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
This commit is contained in:
Mark Johnston 2018-08-14 14:02:53 +00:00
parent 217643e7da
commit 845800e190
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=337754

View File

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