From patchwork Tue Jan 31 13:21:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 92985 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1923828qgi; Tue, 31 Jan 2017 05:27:49 -0800 (PST) X-Received: by 10.99.97.196 with SMTP id v187mr30578061pgb.175.1485869269464; Tue, 31 Jan 2017 05:27:49 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x66si11218392pgb.260.2017.01.31.05.27.49; Tue, 31 Jan 2017 05:27:49 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752534AbdAaN1m (ORCPT + 25 others); Tue, 31 Jan 2017 08:27:42 -0500 Received: from mail-wm0-f47.google.com ([74.125.82.47]:35049 "EHLO mail-wm0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752120AbdAaN0C (ORCPT ); Tue, 31 Jan 2017 08:26:02 -0500 Received: by mail-wm0-f47.google.com with SMTP id b65so79138613wmf.0 for ; Tue, 31 Jan 2017 05:26:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CQI7XR1zjv/07TVSGLNsjbyRI7VKut/4S3v40/uL4LU=; b=AxY4PkeFbFT7DJwcRMxWuMjQuvyeYwqhDkaYQrTXZHAMc3vnHp0hrL9cAYaZVI1Qj4 tpKzG82B5N3PXhQyINqmPvfETA7mUX6qAPfHz89yO/LaMvLiJWmAaIwq/VIA7Hpt5Gku TT6w6ZljH+M/L8X2tsn8WDcBDHGFR8ClZuhGs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CQI7XR1zjv/07TVSGLNsjbyRI7VKut/4S3v40/uL4LU=; b=t8ClnQcoYvdAhP+F87di5Yl5ghIvkI47B/eSNpo71CRf2E2fFn7JxOoj1fOOdn4k2U /8OgDNKRt+4sCZ6lsnjwKuSwyr22KJ1cvvkYRQyft80GI9wcBDcwJ+rI2O3DKc3UFfrk MkuDhSG5+mc8sQFdCMPP4cZfTsV1aXKlqJO9ja1plM/UlRjxpBZdyTruY+bvWOx2UI6s dfSTSg4EORq7b0PYwtNHWAy/cvvneTmvUNJ4DIguCs05TIvvL3+L8CgEYMJPhDeE0RbK njV7veo7u2Z5CpEXLCb+py+o7cdgTjY78cNSC/ecL9poTMPTDsTN9fI2+jSo+NI+e0WR G9mw== X-Gm-Message-State: AIkVDXLeNRAesUZYfjm+370mgwZkMBXtqngpy//m6AceDFC3sD6IPyaowvt9SVZ1qzXhfJ0P X-Received: by 10.223.164.66 with SMTP id e2mr23334231wra.47.1485869160680; Tue, 31 Jan 2017 05:26:00 -0800 (PST) Received: from localhost.localdomain ([105.130.17.13]) by smtp.gmail.com with ESMTPSA id i73sm23961714wmd.11.2017.01.31.05.25.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Jan 2017 05:26:00 -0800 (PST) From: Ard Biesheuvel To: linux-kernel@vger.kernel.org, Ingo Molnar , Thomas Gleixner , "H . Peter Anvin" Cc: Sai Praneeth , Ard Biesheuvel , linux-efi@vger.kernel.org, "Lee, Chun-Yi" , Borislav Petkov , Ricardo Neri , Ravi Shankar , Fenghua Yu , Matt Fleming Subject: [PATCH 05/10] x86/efi: Add support for EFI_MEMORY_ATTRIBUTES_TABLE Date: Tue, 31 Jan 2017 13:21:37 +0000 Message-Id: <1485868902-20401-6-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> References: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sai Praneeth UEFI v2.6 introduces EFI_MEMORY_ATTRIBUTES_TABLE which describes memory protections that may be applied to EFI Runtime code and data regions by kernel. This enables kernel to map these regions more strictly thereby increasing security. Presently, the only valid bits for attribute field of a memory descriptor are EFI_MEMORY_RO and EFI_MEMORY_XP, hence use these bits to update mappings in efi_pgd. UEFI specification recommends to use this feature instead of EFI_PROPERTIES_TABLE and hence while updating efi mappings we first check for EFI_MEMORY_ATTRIBUTES_TABLE and if it's present we update mappings according to this table and hence disregarding EFI_PROPERTIES_TABLE even if it's published by firmware. We consider EFI_PROPERTIES_TABLE only when EFI_MEMORY_ATTRIBUTES_TABLE is absent. Signed-off-by: Sai Praneeth Prakhya Cc: "Lee, Chun-Yi" Cc: Borislav Petkov Cc: Ricardo Neri Cc: Ard Biesheuvel Cc: Ravi Shankar Cc: Fenghua Yu Signed-off-by: Matt Fleming Signed-off-by: Ard Biesheuvel --- arch/x86/platform/efi/efi_64.c | 64 +++++++++++++++++++++++++++++++++++------- drivers/firmware/efi/memattr.c | 5 +++- 2 files changed, 58 insertions(+), 11 deletions(-) -- 2.7.4 diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c index 319148bd4b05..ee966aaf51b2 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c @@ -398,10 +398,44 @@ void __init parse_efi_setup(u64 phys_addr, u32 data_len) efi_setup = phys_addr + sizeof(struct setup_data); } -void __init efi_runtime_update_mappings(void) +static int __init efi_update_mappings(efi_memory_desc_t *md, unsigned long pf) { unsigned long pfn; pgd_t *pgd = efi_pgd; + int err1, err2; + + /* Update the 1:1 mapping */ + pfn = md->phys_addr >> PAGE_SHIFT; + err1 = kernel_map_pages_in_pgd(pgd, pfn, md->phys_addr, md->num_pages, pf); + if (err1) { + pr_err("Error while updating 1:1 mapping PA 0x%llx -> VA 0x%llx!\n", + md->phys_addr, md->virt_addr); + } + + err2 = kernel_map_pages_in_pgd(pgd, pfn, md->virt_addr, md->num_pages, pf); + if (err2) { + pr_err("Error while updating VA mapping PA 0x%llx -> VA 0x%llx!\n", + md->phys_addr, md->virt_addr); + } + + return err1 || err2; +} + +static int __init efi_update_mem_attr(struct mm_struct *mm, efi_memory_desc_t *md) +{ + unsigned long pf = 0; + + if (md->attribute & EFI_MEMORY_XP) + pf |= _PAGE_NX; + + if (!(md->attribute & EFI_MEMORY_RO)) + pf |= _PAGE_RW; + + return efi_update_mappings(md, pf); +} + +void __init efi_runtime_update_mappings(void) +{ efi_memory_desc_t *md; if (efi_enabled(EFI_OLD_MEMMAP)) { @@ -410,6 +444,24 @@ void __init efi_runtime_update_mappings(void) return; } + /* + * Use EFI Memory Attribute Table for mapping permissions if it + * exists, since it is intended to supersede EFI_PROPERTIES_TABLE. + */ + if (efi_enabled(EFI_MEM_ATTR)) { + efi_memattr_apply_permissions(NULL, efi_update_mem_attr); + return; + } + + /* + * EFI_MEMORY_ATTRIBUTES_TABLE is intended to replace + * EFI_PROPERTIES_TABLE. So, use EFI_PROPERTIES_TABLE to update + * permissions only if EFI_MEMORY_ATTRIBUTES_TABLE is not + * published by firmware. Even if we find a buggy implementation of + * EFI_MEMORY_ATTRIBUTES_TABLE don't fall back to + * EFI_PROPERTIES_TABLE because of the same above mentioned reason. + */ + if (!efi_enabled(EFI_NX_PE_DATA)) return; @@ -430,15 +482,7 @@ void __init efi_runtime_update_mappings(void) (md->type != EFI_RUNTIME_SERVICES_CODE)) pf |= _PAGE_RW; - /* Update the 1:1 mapping */ - pfn = md->phys_addr >> PAGE_SHIFT; - if (kernel_map_pages_in_pgd(pgd, pfn, md->phys_addr, md->num_pages, pf)) - pr_warn("Error mapping PA 0x%llx -> VA 0x%llx!\n", - md->phys_addr, md->virt_addr); - - if (kernel_map_pages_in_pgd(pgd, pfn, md->virt_addr, md->num_pages, pf)) - pr_warn("Error mapping PA 0x%llx -> VA 0x%llx!\n", - md->phys_addr, md->virt_addr); + efi_update_mappings(md, pf); } } diff --git a/drivers/firmware/efi/memattr.c b/drivers/firmware/efi/memattr.c index 402197460507..8986757eafaf 100644 --- a/drivers/firmware/efi/memattr.c +++ b/drivers/firmware/efi/memattr.c @@ -175,8 +175,11 @@ int __init efi_memattr_apply_permissions(struct mm_struct *mm, md.phys_addr + size - 1, efi_md_typeattr_format(buf, sizeof(buf), &md)); - if (valid) + if (valid) { ret = fn(mm, &md); + if (ret) + pr_err("Error updating mappings, skipping subsequent md's\n"); + } } memunmap(tbl); return ret; From patchwork Tue Jan 31 13:21:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 92981 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1923523qgi; Tue, 31 Jan 2017 05:26:58 -0800 (PST) X-Received: by 10.99.100.70 with SMTP id y67mr29954730pgb.74.1485869218895; Tue, 31 Jan 2017 05:26:58 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t8si11199795pgn.178.2017.01.31.05.26.57; Tue, 31 Jan 2017 05:26:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752413AbdAaN0p (ORCPT + 25 others); Tue, 31 Jan 2017 08:26:45 -0500 Received: from mail-wm0-f44.google.com ([74.125.82.44]:36313 "EHLO mail-wm0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752185AbdAaN0E (ORCPT ); Tue, 31 Jan 2017 08:26:04 -0500 Received: by mail-wm0-f44.google.com with SMTP id c85so260985096wmi.1 for ; Tue, 31 Jan 2017 05:26:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1WY4na9B0Iy4E4W+x92xNTLTZauSG1f46htgcsrfwVU=; b=NXILWfkMpj+EmOEsBNJ5vgkLgAiEYqPFWDJX0Ui3IXmTo924X/K4rdtvpsD0lmtFgj omIzqMNI75sTJiKSwySvYlqJ7ch+aFm2CzOIBfkQEB2V2uFN/dOZPPyFrqVxe7Xcz05m GaOymyDx2INz3XCu46VMImtW85SKZ2J6aq+L0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1WY4na9B0Iy4E4W+x92xNTLTZauSG1f46htgcsrfwVU=; b=dmyJ1PpIW8kF/rkRuv/up/baIpU3MlYxN+49WWyZND6jyM2ghVqpqcleevwDnoc3nI bu6kMSU8Tao/igYB+aSJqmRtALMmI9fmL6C7k/Ikg/K7RKMF3QdZvPri1zaMd0vmKdj2 hetCVcAS6cHRt/mwENHo9um9DgWV9rr19xFYDdCyj1C0cgSlY71QP8FbWIMolS1i572S +uy+uFK2XU1LiYEyWmD1c0MteiPYhEwdAMaIoVgAmJu9yltzv391t67h0h31FOlLHoTR Vqe6uwaDOe0RrIcSxeAVgFJ5eBUx0x86ja1Z8I/nvm9X+v4A07tAIkk2U7v/KUjeKc73 /E7g== X-Gm-Message-State: AIkVDXKuTK585+iKLxHaM89LMw+hQYMOtw3O8Z5y7oX4X3rwEddEYFpGZWMavNscM5+qiBJE X-Received: by 10.223.151.205 with SMTP id t13mr23578838wrb.9.1485869163041; Tue, 31 Jan 2017 05:26:03 -0800 (PST) Received: from localhost.localdomain ([105.130.17.13]) by smtp.gmail.com with ESMTPSA id i73sm23961714wmd.11.2017.01.31.05.26.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Jan 2017 05:26:02 -0800 (PST) From: Ard Biesheuvel To: linux-kernel@vger.kernel.org, Ingo Molnar , Thomas Gleixner , "H . Peter Anvin" Cc: Colin Ian King , Ard Biesheuvel , linux-efi@vger.kernel.org, Matt Fleming Subject: [PATCH 06/10] efi/esrt: Fix spelling mistake "doen't" Date: Tue, 31 Jan 2017 13:21:38 +0000 Message-Id: <1485868902-20401-7-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> References: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Colin Ian King Trivial fix to spelling mistake "doen't" to "doesn't" in pr_err message Cc: Matt Fleming Signed-off-by: Colin Ian King Signed-off-by: Ard Biesheuvel --- drivers/firmware/efi/esrt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c index 14914074f716..08b026864d4e 100644 --- a/drivers/firmware/efi/esrt.c +++ b/drivers/firmware/efi/esrt.c @@ -269,7 +269,7 @@ void __init efi_esrt_init(void) max -= efi.esrt; if (max < size) { - pr_err("ESRT header doen't fit on single memory map entry. (size: %zu max: %zu)\n", + pr_err("ESRT header doesn't fit on single memory map entry. (size: %zu max: %zu)\n", size, max); return; } From patchwork Tue Jan 31 13:21:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 92982 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1923524qgi; Tue, 31 Jan 2017 05:26:59 -0800 (PST) X-Received: by 10.84.135.34 with SMTP id 31mr39326122pli.50.1485869219250; Tue, 31 Jan 2017 05:26:59 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t8si11199795pgn.178.2017.01.31.05.26.59; Tue, 31 Jan 2017 05:26:59 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752455AbdAaN0x (ORCPT + 25 others); Tue, 31 Jan 2017 08:26:53 -0500 Received: from mail-wm0-f53.google.com ([74.125.82.53]:38227 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752241AbdAaN0J (ORCPT ); Tue, 31 Jan 2017 08:26:09 -0500 Received: by mail-wm0-f53.google.com with SMTP id r141so79341196wmg.1 for ; Tue, 31 Jan 2017 05:26:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+POYcCltBecblxb+hQw7g4Q31LTdcTA2u+82GQs0YHg=; b=XomkAof+e1fQkpuZo2Oc/ROHIuKn3DzqQmzx9s3s8OkjPkDozjzuOTkqbpTfuFO8al I1vuOIIGXwfHZB1ot4YELGe2esS1zTJOs1QizmkviTHcWE57VpAJEfeJxlCMUlB5FrvS Z06U+oMgTaCYrmu1+2vojdSx3I5ArF7D3qYTI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+POYcCltBecblxb+hQw7g4Q31LTdcTA2u+82GQs0YHg=; b=RRXf/MYDFHbi9yGXltJgu8FHVOHZ890+7CNO026oHkq6/aeMrKFUDvO8c7WnJYvJD7 JSbl4h3uXWC9T3Rye5zGXJJvuMExUnlSKKMVNef0Ub1kUPyALUVkal8HReeQOsLt/hYe 2hPg3uMnZtuh4znDUFAaIUcyFj/BhQ0epOhcLBVPgNC0JXI1iWe2WricU9T4k7D9Nf7q UGCGKGHz16lSXg6LgqF5Mm7zbHI7midoNmQ4kQ6OOWfbQeipIInWUBcLYzUpB8+KiTtG cUVZCPJ3k/EVjbNC3CkR9HF9okp5CLG1/S9I6CBeGyuN35QtjhxZ98Kyw+JJxtPj9yG9 fLkw== X-Gm-Message-State: AIkVDXJpy4mwBDgnax6QjxlL171vuTaW3KNA9t1rV58PwN7nuwcjtqgY08bGriMQFbWm9HGx X-Received: by 10.223.139.213 with SMTP id w21mr23784733wra.108.1485869167286; Tue, 31 Jan 2017 05:26:07 -0800 (PST) Received: from localhost.localdomain ([105.130.17.13]) by smtp.gmail.com with ESMTPSA id i73sm23961714wmd.11.2017.01.31.05.26.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Jan 2017 05:26:06 -0800 (PST) From: Ard Biesheuvel To: linux-kernel@vger.kernel.org, Ingo Molnar , Thomas Gleixner , "H . Peter Anvin" Cc: Dave Young , Ard Biesheuvel , linux-efi@vger.kernel.org, Matt Fleming , "Rafael J. Wysocki" , Len Brown , linux-acpi@vger.kernel.org Subject: [PATCH 08/10] efi/x86: Move EFI BGRT init code to early init code Date: Tue, 31 Jan 2017 13:21:40 +0000 Message-Id: <1485868902-20401-9-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> References: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Young Before invoking the arch specific handler, efi_mem_reserve() reserves the given memory region through memblock. efi_bgrt_init() will call efi_mem_reserve() after mm_init(), at which time memblock is dead and should not be used anymore. The EFI BGRT code depends on ACPI initialization to get the BGRT ACPI table, so move parsing of the BGRT table to ACPI early boot code to ensure that efi_mem_reserve() in EFI BGRT code still use memblock safely. Signed-off-by: Dave Young Cc: Matt Fleming Cc: "Rafael J. Wysocki" Cc: Len Brown Cc: linux-acpi@vger.kernel.org Tested-by: Bhupesh Sharma Signed-off-by: Ard Biesheuvel --- arch/x86/kernel/acpi/boot.c | 9 ++++++ arch/x86/platform/efi/efi-bgrt.c | 59 +++++++++++++++++----------------------- arch/x86/platform/efi/efi.c | 5 ---- drivers/acpi/bgrt.c | 28 +++++++++++++------ include/linux/efi-bgrt.h | 11 ++++---- init/main.c | 1 - 6 files changed, 59 insertions(+), 54 deletions(-) -- 2.7.4 diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 64422f850e95..7ff007ed899d 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -1557,6 +1558,12 @@ int __init early_acpi_boot_init(void) return 0; } +static int __init acpi_parse_bgrt(struct acpi_table_header *table) +{ + efi_bgrt_init(table); + return 0; +} + int __init acpi_boot_init(void) { /* those are executed after early-quirks are executed */ @@ -1581,6 +1588,8 @@ int __init acpi_boot_init(void) acpi_process_madt(); acpi_table_parse(ACPI_SIG_HPET, acpi_parse_hpet); + if (IS_ENABLED(CONFIG_ACPI_BGRT)) + acpi_table_parse(ACPI_SIG_BGRT, acpi_parse_bgrt); if (!acpi_noirq) x86_init.pci.init = pci_acpi_init; diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c index 6aad870e8962..04ca8764f0c0 100644 --- a/arch/x86/platform/efi/efi-bgrt.c +++ b/arch/x86/platform/efi/efi-bgrt.c @@ -19,8 +19,7 @@ #include #include -struct acpi_table_bgrt *bgrt_tab; -void *__initdata bgrt_image; +struct acpi_table_bgrt bgrt_tab; size_t __initdata bgrt_image_size; struct bmp_header { @@ -28,66 +27,58 @@ struct bmp_header { u32 size; } __packed; -void __init efi_bgrt_init(void) +void __init efi_bgrt_init(struct acpi_table_header *table) { - acpi_status status; void *image; struct bmp_header bmp_header; + struct acpi_table_bgrt *bgrt = &bgrt_tab; if (acpi_disabled) return; - status = acpi_get_table("BGRT", 0, - (struct acpi_table_header **)&bgrt_tab); - if (ACPI_FAILURE(status)) - return; - - if (bgrt_tab->header.length < sizeof(*bgrt_tab)) { + if (table->length < sizeof(bgrt_tab)) { pr_notice("Ignoring BGRT: invalid length %u (expected %zu)\n", - bgrt_tab->header.length, sizeof(*bgrt_tab)); + table->length, sizeof(bgrt_tab)); return; } - if (bgrt_tab->version != 1) { + *bgrt = *(struct acpi_table_bgrt *)table; + if (bgrt->version != 1) { pr_notice("Ignoring BGRT: invalid version %u (expected 1)\n", - bgrt_tab->version); - return; + bgrt->version); + goto out; } - if (bgrt_tab->status & 0xfe) { + if (bgrt->status & 0xfe) { pr_notice("Ignoring BGRT: reserved status bits are non-zero %u\n", - bgrt_tab->status); - return; + bgrt->status); + goto out; } - if (bgrt_tab->image_type != 0) { + if (bgrt->image_type != 0) { pr_notice("Ignoring BGRT: invalid image type %u (expected 0)\n", - bgrt_tab->image_type); - return; + bgrt->image_type); + goto out; } - if (!bgrt_tab->image_address) { + if (!bgrt->image_address) { pr_notice("Ignoring BGRT: null image address\n"); - return; + goto out; } - image = memremap(bgrt_tab->image_address, sizeof(bmp_header), MEMREMAP_WB); + image = early_memremap(bgrt->image_address, sizeof(bmp_header)); if (!image) { pr_notice("Ignoring BGRT: failed to map image header memory\n"); - return; + goto out; } memcpy(&bmp_header, image, sizeof(bmp_header)); - memunmap(image); + early_memunmap(image, sizeof(bmp_header)); if (bmp_header.id != 0x4d42) { pr_notice("Ignoring BGRT: Incorrect BMP magic number 0x%x (expected 0x4d42)\n", bmp_header.id); - return; + goto out; } bgrt_image_size = bmp_header.size; + efi_mem_reserve(bgrt->image_address, bgrt_image_size); - bgrt_image = memremap(bgrt_tab->image_address, bmp_header.size, MEMREMAP_WB); - if (!bgrt_image) { - pr_notice("Ignoring BGRT: failed to map image memory\n"); - bgrt_image = NULL; - return; - } - - efi_mem_reserve(bgrt_tab->image_address, bgrt_image_size); + return; +out: + memset(bgrt, 0, sizeof(bgrt_tab)); } diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 274dfc481849..0d4becfc5145 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -542,11 +542,6 @@ void __init efi_init(void) efi_print_memmap(); } -void __init efi_late_init(void) -{ - efi_bgrt_init(); -} - void __init efi_set_executable(efi_memory_desc_t *md, bool executable) { u64 addr, npages; diff --git a/drivers/acpi/bgrt.c b/drivers/acpi/bgrt.c index 75f128e766a9..ca28aa572aa9 100644 --- a/drivers/acpi/bgrt.c +++ b/drivers/acpi/bgrt.c @@ -15,40 +15,41 @@ #include #include +static void *bgrt_image; static struct kobject *bgrt_kobj; static ssize_t show_version(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->version); + return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab.version); } static DEVICE_ATTR(version, S_IRUGO, show_version, NULL); static ssize_t show_status(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->status); + return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab.status); } static DEVICE_ATTR(status, S_IRUGO, show_status, NULL); static ssize_t show_type(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->image_type); + return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab.image_type); } static DEVICE_ATTR(type, S_IRUGO, show_type, NULL); static ssize_t show_xoffset(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->image_offset_x); + return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab.image_offset_x); } static DEVICE_ATTR(xoffset, S_IRUGO, show_xoffset, NULL); static ssize_t show_yoffset(struct device *dev, struct device_attribute *attr, char *buf) { - return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab->image_offset_y); + return snprintf(buf, PAGE_SIZE, "%d\n", bgrt_tab.image_offset_y); } static DEVICE_ATTR(yoffset, S_IRUGO, show_yoffset, NULL); @@ -84,15 +85,24 @@ static int __init bgrt_init(void) { int ret; - if (!bgrt_image) + if (!bgrt_tab.image_address) return -ENODEV; + bgrt_image = memremap(bgrt_tab.image_address, bgrt_image_size, + MEMREMAP_WB); + if (!bgrt_image) { + pr_notice("Ignoring BGRT: failed to map image memory\n"); + return -ENOMEM; + } + bin_attr_image.private = bgrt_image; bin_attr_image.size = bgrt_image_size; bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj); - if (!bgrt_kobj) - return -EINVAL; + if (!bgrt_kobj) { + ret = -EINVAL; + goto out_memmap; + } ret = sysfs_create_group(bgrt_kobj, &bgrt_attribute_group); if (ret) @@ -102,6 +112,8 @@ static int __init bgrt_init(void) out_kobject: kobject_put(bgrt_kobj); +out_memmap: + memunmap(bgrt_image); return ret; } device_initcall(bgrt_init); diff --git a/include/linux/efi-bgrt.h b/include/linux/efi-bgrt.h index 051b21fedf68..2fd3993c370b 100644 --- a/include/linux/efi-bgrt.h +++ b/include/linux/efi-bgrt.h @@ -1,20 +1,19 @@ #ifndef _LINUX_EFI_BGRT_H #define _LINUX_EFI_BGRT_H -#ifdef CONFIG_ACPI_BGRT - #include -void efi_bgrt_init(void); +#ifdef CONFIG_ACPI_BGRT + +void efi_bgrt_init(struct acpi_table_header *table); /* The BGRT data itself; only valid if bgrt_image != NULL. */ -extern void *bgrt_image; extern size_t bgrt_image_size; -extern struct acpi_table_bgrt *bgrt_tab; +extern struct acpi_table_bgrt bgrt_tab; #else /* !CONFIG_ACPI_BGRT */ -static inline void efi_bgrt_init(void) {} +static inline void efi_bgrt_init(struct acpi_table_header *table) {} #endif /* !CONFIG_ACPI_BGRT */ diff --git a/init/main.c b/init/main.c index b0c9d6facef9..9648d707eea5 100644 --- a/init/main.c +++ b/init/main.c @@ -663,7 +663,6 @@ asmlinkage __visible void __init start_kernel(void) sfi_init_late(); if (efi_enabled(EFI_RUNTIME_SERVICES)) { - efi_late_init(); efi_free_boot_services(); } From patchwork Tue Jan 31 13:21:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 92984 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1923822qgi; Tue, 31 Jan 2017 05:27:49 -0800 (PST) X-Received: by 10.99.108.74 with SMTP id h71mr29715201pgc.99.1485869269115; Tue, 31 Jan 2017 05:27:49 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x66si11218392pgb.260.2017.01.31.05.27.48; Tue, 31 Jan 2017 05:27:49 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752522AbdAaN1d (ORCPT + 25 others); Tue, 31 Jan 2017 08:27:33 -0500 Received: from mail-wj0-f171.google.com ([209.85.210.171]:34712 "EHLO mail-wj0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752280AbdAaN0M (ORCPT ); Tue, 31 Jan 2017 08:26:12 -0500 Received: by mail-wj0-f171.google.com with SMTP id uo9so13935308wjc.1 for ; Tue, 31 Jan 2017 05:26:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Xd1UQfBvzCizBSuX2dfpkIoaHDvYy2vXKPHNcDn/Jmg=; b=UPwtZmukEicWP1Q6jA3WDbpXxWsF0YZWYPKmelmw4Y6Z+0cYDw5yDUt3d19N+fGsMW 7nwtPkpOyEclIs7Aaz2/L+ZJLobPi4rjfeXPI2qzAsYKu7v6fUnEZdkl215WyXkydwI1 hYfOqCpEqppm/QStGzl7Ow8MADyUS00NWQAV0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Xd1UQfBvzCizBSuX2dfpkIoaHDvYy2vXKPHNcDn/Jmg=; b=tP4GojmwvQksWn2fIdm0p56L6H8YftuaCMkmcx4pOQDSncyJFa1Bp/Oa2vJEWa+NQx jAkQYifDRzM3Kzmvm88gi19oxzGq6svgIewCY3su7IwiQqGK7jQFNmZeLcTPSv2LO46w Mrk9SKq8SFuK1p5ZUgYhsRD+vZ012dsHnU5R13QMzo2S7r7TXdI3qv81VBoUPwXP/p5m Ybb4hV6Gtf30unLuY16qYH9HSqaZZbI58qIygkYpMgUmSA/x0F65oaUKFGgGdsSKrsv6 QdRFqrmyY3gLIXKaU2MsWqkh3cNdSPeVixdWyvmL086APCo4yXIXdCDkphlNjOZ+arVG fQ7Q== X-Gm-Message-State: AIkVDXIKWVpO0KetJjwF4eV2qA47NzQY8PmbPFGzTW33pp1xggWKb78cl9FgZBCE5ZGsqeMs X-Received: by 10.223.142.1 with SMTP id n1mr23652465wrb.185.1485869170132; Tue, 31 Jan 2017 05:26:10 -0800 (PST) Received: from localhost.localdomain ([105.130.17.13]) by smtp.gmail.com with ESMTPSA id i73sm23961714wmd.11.2017.01.31.05.26.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Jan 2017 05:26:09 -0800 (PST) From: Ard Biesheuvel To: linux-kernel@vger.kernel.org, Ingo Molnar , Thomas Gleixner , "H . Peter Anvin" Cc: Dave Young , Ard Biesheuvel , linux-efi@vger.kernel.org, Matt Fleming Subject: [PATCH 09/10] efi/x86: Add debug code to print cooked memmap Date: Tue, 31 Jan 2017 13:21:41 +0000 Message-Id: <1485868902-20401-10-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> References: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Young It is not obvious if the reserved boot area are added correctly, add a efi_print_memmap to print the new memmap. Signed-off-by: Dave Young Cc: Matt Fleming Reviewed-by: Nicolai Stange Tested-by: Nicolai Stange Signed-off-by: Ard Biesheuvel --- arch/x86/platform/efi/efi.c | 5 +++++ 1 file changed, 5 insertions(+) -- 2.7.4 diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 0d4becfc5145..565dff3c9a12 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -955,6 +955,11 @@ static void __init __efi_enter_virtual_mode(void) return; } + if (efi_enabled(EFI_DBG)) { + pr_info("EFI runtime memory map:\n"); + efi_print_memmap(); + } + BUG_ON(!efi.systab); if (efi_setup_page_tables(pa, 1 << pg_shift)) { From patchwork Tue Jan 31 13:21:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 92983 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1923819qgi; Tue, 31 Jan 2017 05:27:48 -0800 (PST) X-Received: by 10.98.103.20 with SMTP id b20mr29358882pfc.166.1485869268725; Tue, 31 Jan 2017 05:27:48 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x66si11218392pgb.260.2017.01.31.05.27.48; Tue, 31 Jan 2017 05:27:48 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752265AbdAaN1X (ORCPT + 25 others); Tue, 31 Jan 2017 08:27:23 -0500 Received: from mail-wj0-f173.google.com ([209.85.210.173]:35663 "EHLO mail-wj0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752260AbdAaN0Y (ORCPT ); Tue, 31 Jan 2017 08:26:24 -0500 Received: by mail-wj0-f173.google.com with SMTP id b20so13968323wjs.2 for ; Tue, 31 Jan 2017 05:26:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=i5uoS52NvcBJ4JPsUL9JUzpuKUetuLlL3vGwthUxHQY=; b=gZgTKylpyPmZ5Bg8u7ZffAynAcgX1YZ8Q6wGs++8bXPKI0fZ3YPpFXHzM08fpS2u0V AUHpTDOQUyGLLi2o3g5oQvkhb4YbnWC7yqD8nF/pEjlAEfzBwq8JDnUHpHDBBf5DXLwR +HOZApgNcfCszo1MdjFZoMrY9EVJ0Twzp8i54= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=i5uoS52NvcBJ4JPsUL9JUzpuKUetuLlL3vGwthUxHQY=; b=UPbvkb8MaTIJtqqXMvIvYJ3G7+p3QKLh4YV0B02gIFOGn6Qunap8ZR/ame3NJz0Ikv qjBYtxqSnSPvaYFToEJvTD2RgPb3IWN+3Z5+PdR5CCz3T600Pb5Fwe/9YzIqmNIJ09aB 7R/pASMyPW9aEyKzQ47TStVupgO+I/uM/6880sJB5Kh3cLxttt8EieOL1uvbGhpEyvyz QGpOEsq1YU/0A4Ctk9f9qtYgbvZTlrGfoJ2FAYyVMPYlqmNU7d3C9S6dFW3VJFX63+n9 SG/c+nCbelrMci13TUc6jnZOkX3KgyflmB4HvoNH1JRI6IacmEQEFsYzq6ZIX6wZ6ZT3 DqdQ== X-Gm-Message-State: AIkVDXLxre2w/7ak47OCH4z9sqwQ8o4Woaz9z1qGzZ6NjOOz17RZuYLJCHmoEubl/mvORJa3 X-Received: by 10.223.175.49 with SMTP id z46mr28457672wrc.84.1485869172601; Tue, 31 Jan 2017 05:26:12 -0800 (PST) Received: from localhost.localdomain ([105.130.17.13]) by smtp.gmail.com with ESMTPSA id i73sm23961714wmd.11.2017.01.31.05.26.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Jan 2017 05:26:11 -0800 (PST) From: Ard Biesheuvel To: linux-kernel@vger.kernel.org, Ingo Molnar , Thomas Gleixner , "H . Peter Anvin" Cc: Ard Biesheuvel , linux-efi@vger.kernel.org, Matt Fleming Subject: [PATCH 10/10] efi: libstub: Preserve .debug sections after absolute relocation check Date: Tue, 31 Jan 2017 13:21:42 +0000 Message-Id: <1485868902-20401-11-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> References: <1485868902-20401-1-git-send-email-ard.biesheuvel@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The build commands for the ARM and arm64 EFI stubs strip the .debug sections and other sections that may legally contain absolute relocations, in order to inspect the remaining sections for the presence of such relocations. This leaves us without debugging symbols in the stub for no good reason, considering that these sections are omitted from the kernel binary anyway, and that these relocations are thus only consumed by users of the ELF binary, such as debuggers. So move to 'strip' for performing the relocation check, and if it succeeds, invoke objcopy as before, but leaving the .debug sections in place. Note that these sections may refer to ksymtab/kcrctab contents, so leave those in place as well. Cc: Matt Fleming Signed-off-by: Ard Biesheuvel --- drivers/firmware/efi/libstub/Makefile | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) -- 2.7.4 diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile index d564d25df8ab..33e0e2f1a730 100644 --- a/drivers/firmware/efi/libstub/Makefile +++ b/drivers/firmware/efi/libstub/Makefile @@ -11,7 +11,7 @@ cflags-$(CONFIG_X86) += -m$(BITS) -D__KERNEL__ -O2 \ -mno-mmx -mno-sse cflags-$(CONFIG_ARM64) := $(subst -pg,,$(KBUILD_CFLAGS)) -cflags-$(CONFIG_ARM) := $(subst -pg,,$(KBUILD_CFLAGS)) -g0 \ +cflags-$(CONFIG_ARM) := $(subst -pg,,$(KBUILD_CFLAGS)) \ -fno-builtin -fpic -mno-single-pic-base cflags-$(CONFIG_EFI_ARMSTUB) += -I$(srctree)/scripts/dtc/libfdt @@ -60,7 +60,7 @@ CFLAGS_arm64-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET) extra-$(CONFIG_EFI_ARMSTUB) := $(lib-y) lib-$(CONFIG_EFI_ARMSTUB) := $(patsubst %.o,%.stub.o,$(lib-y)) -STUBCOPY_FLAGS-y := -R .debug* -R *ksymtab* -R *kcrctab* +STUBCOPY_RM-y := -R *ksymtab* -R *kcrctab* STUBCOPY_FLAGS-$(CONFIG_ARM64) += --prefix-alloc-sections=.init \ --prefix-symbols=__efistub_ STUBCOPY_RELOC-$(CONFIG_ARM64) := R_AARCH64_ABS @@ -68,17 +68,25 @@ STUBCOPY_RELOC-$(CONFIG_ARM64) := R_AARCH64_ABS $(obj)/%.stub.o: $(obj)/%.o FORCE $(call if_changed,stubcopy) +# +# Strip debug sections and some other sections that may legally contain +# absolute relocations, so that we can inspect the remaining sections for +# such relocations. If none are found, regenerate the output object, but +# this time, use objcopy and leave all sections in place. +# quiet_cmd_stubcopy = STUBCPY $@ - cmd_stubcopy = if $(OBJCOPY) $(STUBCOPY_FLAGS-y) $< $@; then \ - $(OBJDUMP) -r $@ | grep $(STUBCOPY_RELOC-y) \ - && (echo >&2 "$@: absolute symbol references not allowed in the EFI stub"; \ - rm -f $@; /bin/false); else /bin/false; fi + cmd_stubcopy = if $(STRIP) --strip-debug $(STUBCOPY_RM-y) -o $@ $<; \ + then if $(OBJDUMP) -r $@ | grep $(STUBCOPY_RELOC-y); \ + then (echo >&2 "$@: absolute symbol references not allowed in the EFI stub"; \ + rm -f $@; /bin/false); \ + else $(OBJCOPY) $(STUBCOPY_FLAGS-y) $< $@; fi \ + else /bin/false; fi # # ARM discards the .data section because it disallows r/w data in the # decompressor. So move our .data to .data.efistub, which is preserved # explicitly by the decompressor linker script. # -STUBCOPY_FLAGS-$(CONFIG_ARM) += --rename-section .data=.data.efistub \ - -R ___ksymtab+sort -R ___kcrctab+sort +STUBCOPY_FLAGS-$(CONFIG_ARM) += --rename-section .data=.data.efistub +STUBCOPY_RM-$(CONFIG_ARM) += -R ___ksymtab+sort -R ___kcrctab+sort STUBCOPY_RELOC-$(CONFIG_ARM) := R_ARM_ABS