From owner-svn-src-head@freebsd.org Tue Aug 14 14:02:55 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EC6B010792EF; Tue, 14 Aug 2018 14:02:54 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 908437085F; Tue, 14 Aug 2018 14:02:54 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 71C3C1C8B1; Tue, 14 Aug 2018 14:02:54 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w7EE2sGG007726; Tue, 14 Aug 2018 14:02:54 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w7EE2seW007725; Tue, 14 Aug 2018 14:02:54 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201808141402.w7EE2seW007725@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Tue, 14 Aug 2018 14:02:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r337754 - head/sys/x86/x86 X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: head/sys/x86/x86 X-SVN-Commit-Revision: 337754 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2018 14:02:55 -0000 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) {