Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Aug 2018 14:02:54 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r337754 - head/sys/x86/x86
Message-ID:  <201808141402.w7EE2seW007725@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Tue Aug 14 14:02:53 2018
New Revision: 337754
URL: https://svnweb.freebsd.org/changeset/base/337754

Log:
  Don't use memcpy() in the early microcode loading code.
  
  At some point memcpy() may be an ifunc, ifunc resolution cannot be done
  until CPU identification has been performed, and CPU identification must
  be done after loading any microcode updates.
  
  X-MFC with:	r337715
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/x86/x86/ucode.c

Modified: head/sys/x86/x86/ucode.c
==============================================================================
--- head/sys/x86/x86/ucode.c	Tue Aug 14 14:01:12 2018	(r337753)
+++ head/sys/x86/x86/ucode.c	Tue Aug 14 14:02:53 2018	(r337754)
@@ -312,8 +312,7 @@ ucode_load_bsp(uintptr_t free)
 	uint8_t *addr, *fileaddr, *match;
 	char *type;
 	caddr_t file;
-	size_t len, ucode_len;
-	int i;
+	size_t i, len, ucode_len;
 
 	KASSERT(free % PAGE_SIZE == 0, ("unaligned boundary %p", (void *)free));
 
@@ -345,7 +344,8 @@ ucode_load_bsp(uintptr_t free)
 		match = loader->match(fileaddr, &len);
 		if (match != NULL) {
 			addr = map_ucode(free, len);
-			memcpy(addr, match, len);
+			for (i = 0; i < len; i++)
+				addr[i] = match[i];
 			match = addr;
 
 			if (loader->load(match, false) == 0) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808141402.w7EE2seW007725>