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>