svn commit: r337754 - head/sys/x86/x86

Mark Johnston markj at FreeBSD.org
Tue Aug 14 14:02:55 UTC 2018


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) {


More information about the svn-src-all mailing list