Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp80136pxf; Wed, 10 Mar 2021 00:34:05 -0800 (PST) X-Google-Smtp-Source: ABdhPJz/D6evB1TrbnZbvvHa1Xul6VvnwcRssYPUv08LYq76/R+f1lm+tpcI+YGsE2UKMDita6QK X-Received: by 2002:a17:906:7b8d:: with SMTP id s13mr2430336ejo.247.1615365245093; Wed, 10 Mar 2021 00:34:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615365245; cv=none; d=google.com; s=arc-20160816; b=NiLyJS/234WjhgY9SzlIabCEovC3RM2jdzAve1ogGYYzgiyzF+WHAutI3zYIifBY8q r1ts66GBgS8NoiJaKPz0Tz9BtwJxz7ICfM0YiQFSKgi17KMLAHgY0yROl0iIz/04ZS3K u4Yw0VhvKrz/KLVajPexNjCZ7MHDFHDYQJQf03bCzQSRN97ig+Wzp94m/CfDNRs6rn72 +WTNotET/Y/Yc0ZRagRo+Tqu0NH2Ok0CfXUoXcokY0ruBnWGhOWU4QbxMlclWkiSbdSe tyhb7URfeqBvwBj6FR63mYAuShPkGHzG6z2rryM6WttvX1tWVGc5KlBov1h86ZYcy1zG POwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=nnm8ucZ5LQcGGIu3zt2kPvo+8H0RoC4x7aUGkFHxz0A=; b=0CSB57s6bD5HmbZ6ZIjpHUztrTu2juu/E2FlkwS5y1WdpZ99z82Aw/GSRT5Ie8GmJ/ YVO51a69Nnbz6K9VsjvDk87lya9uQ76BkeVcw8rjmxLpfQNYg+fyflLkyxYA/CmHyioi xBbuReMZeKBfhKq/DIpHmS28fC04573b1IcLYvy5ThqBMdgxE48iRSFjTCJzaJ3arlw1 GlgZpH8tgNMfkmCJmRvURmlXysUvvtmhXXn00Mp4aD8YGttTcdNfnNfW49CkeJMky7Ls Hr4kfgAIJfUfyo5zIh1UR0FxCPM+5wyI4ZdiPXq4oCTVjTLaaVReJinsuWXSbMu3tRMG DrEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mail.ustc.edu.cn header.s=dkim header.b=SlfJWZkF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mail.ustc.edu.cn Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ho11si8420680ejc.258.2021.03.10.00.33.42; Wed, 10 Mar 2021 00:34:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mail.ustc.edu.cn header.s=dkim header.b=SlfJWZkF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mail.ustc.edu.cn Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232366AbhCJIcF (ORCPT + 99 others); Wed, 10 Mar 2021 03:32:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231934AbhCJIbx (ORCPT ); Wed, 10 Mar 2021 03:31:53 -0500 Received: from ustc.edu.cn (email6.ustc.edu.cn [IPv6:2001:da8:d800::8]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B3726C06174A for ; Wed, 10 Mar 2021 00:31:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ustc.edu.cn; s=dkim; h=Received:From:To:Cc:Subject:Date: Message-Id:MIME-Version:Content-Transfer-Encoding; bh=nnm8ucZ5LQ cGGIu3zt2kPvo+8H0RoC4x7aUGkFHxz0A=; b=SlfJWZkF4adwpYWN9axoLqr2o3 By0SRWHgTpZA1GUeJgzH0zOv9cvn2oQ9GD6qC3Ust9EVGqkep4eqlXSW0C5PiPLE Gc+VPuSGWxr1oou65pqpjg8GEYPS4ft4u8sosEoLMIHdWieme6Qjj/5TMSBsl1Vo PYvdJIbAI2FlUCOMo= Received: from ubuntu.localdomain (unknown [114.214.224.243]) by newmailweb.ustc.edu.cn (Coremail) with SMTP id LkAmygBXRGHpg0hgL7ECAA--.3682S4; Wed, 10 Mar 2021 16:31:37 +0800 (CST) From: Lv Yunlong To: ardb@kernel.org, jonathan.richardson@broadcom.com Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org, Lv Yunlong Subject: [PATCH] firmware/efi: Fix a use after bug in efi_mem_reserve_persistent Date: Wed, 10 Mar 2021 00:31:27 -0800 Message-Id: <20210310083127.5784-1-lyl2019@mail.ustc.edu.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: LkAmygBXRGHpg0hgL7ECAA--.3682S4 X-Coremail-Antispam: 1UD129KBjvdXoW7Wr1UZr47GryUuF4xAF4rAFb_yoWkKFcEkr 4rJ395K3yUKrW2vanFyrsa9asayayDXw109FnFya4fC39rAFy3ZrWkur1ktF47Cwn7Kryr CF48tw4Ykw1xGjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUb4AFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8w A2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j 6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oV Cq3wAac4AC62xK8xCEY4vEwIxC4wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC 0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr 1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IE rcIFxwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14 v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIxkG c2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI 0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6rW3Jr0E3s1lIxAIcVC2z280aVAFwI0_Jr0_ Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7VUbHa0D UUUUU== X-CM-SenderInfo: ho1ojiyrz6zt1loo32lwfovvfxof0/ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In the for loop in efi_mem_reserve_persistent(), prsv = rsv->next use the unmapped rsv. Use the unmapped pages will cause segment fault. Fixes: 18df7577adae6 ("efi/memreserve: deal with memreserve entries in unmapped memory") Signed-off-by: Lv Yunlong --- drivers/firmware/efi/efi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index df3f9bcab581..4b7ee3fa9224 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -927,7 +927,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) } /* first try to find a slot in an existing linked list entry */ - for (prsv = efi_memreserve_root->next; prsv; prsv = rsv->next) { + for (prsv = efi_memreserve_root->next; prsv; ) { rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB); index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size); if (index < rsv->size) { @@ -937,6 +937,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) memunmap(rsv); return efi_mem_reserve_iomem(addr, size); } + prsv = rsv->next; memunmap(rsv); } -- 2.25.1