From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 452FCC43214 for ; Sat, 14 Aug 2021 10:51:41 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D7E4E60F36 for ; Sat, 14 Aug 2021 10:51:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D7E4E60F36 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id CB7B56B0071; Sat, 14 Aug 2021 06:51:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AF43C6B0072; Sat, 14 Aug 2021 06:51:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8F7E08D0005; Sat, 14 Aug 2021 06:51:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0108.hostedemail.com [216.40.44.108]) by kanga.kvack.org (Postfix) with ESMTP id 4F7AC6B006C for ; Sat, 14 Aug 2021 06:51:37 -0400 (EDT) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id D00351DAE2 for ; Sat, 14 Aug 2021 10:51:36 +0000 (UTC) X-FDA: 78473370192.12.D098592 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf12.hostedemail.com (Postfix) with ESMTP id 2B9E810008B7 for ; Sat, 14 Aug 2021 10:51:36 +0000 (UTC) Received: from dggeme703-chm.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Gmy022YL3zYnkc; Sat, 14 Aug 2021 18:51:14 +0800 (CST) Received: from huawei.com (10.175.124.27) by dggeme703-chm.china.huawei.com (10.1.199.99) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Sat, 14 Aug 2021 18:51:32 +0800 From: Miaohe Lin To: , CC: , , , Subject: [PATCH 2/4] mm/hwpoison: fix potential pte_unmap_unlock pte error Date: Sat, 14 Aug 2021 18:51:29 +0800 Message-ID: <20210814105131.48814-3-linmiaohe@huawei.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20210814105131.48814-1-linmiaohe@huawei.com> References: <20210814105131.48814-1-linmiaohe@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.124.27] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggeme703-chm.china.huawei.com (10.1.199.99) X-CFilter-Loop: Reflected Authentication-Results: imf12.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=huawei.com; spf=pass (imf12.hostedemail.com: domain of linmiaohe@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=linmiaohe@huawei.com X-Stat-Signature: o5h76rjhc9i5qf7atofp6ozyb3ixq45i X-Rspamd-Queue-Id: 2B9E810008B7 X-Rspamd-Server: rspam05 X-HE-Tag: 1628938296-742457 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: If the first pte is equal to poisoned_pfn, i.e. check_hwpoisoned_entry() return 1, the wrong ptep - 1 would be passed to pte_unmap_unlock(). Fixes: ad9c59c24095 ("mm,hwpoison: send SIGBUS with error virutal address= ") Signed-off-by: Miaohe Lin --- mm/memory-failure.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 052ec9ee7cf6..54f61133bf60 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -632,7 +632,7 @@ static int hwpoison_pte_range(pmd_t *pmdp, unsigned l= ong addr, { struct hwp_walk *hwp =3D (struct hwp_walk *)walk->private; int ret =3D 0; - pte_t *ptep; + pte_t *ptep, *mapped_pte; spinlock_t *ptl; =20 ptl =3D pmd_trans_huge_lock(pmdp, walk->vma); @@ -645,14 +645,15 @@ static int hwpoison_pte_range(pmd_t *pmdp, unsigned= long addr, if (pmd_trans_unstable(pmdp)) goto out; =20 - ptep =3D pte_offset_map_lock(walk->vma->vm_mm, pmdp, addr, &ptl); + mapped_pte =3D ptep =3D pte_offset_map_lock(walk->vma->vm_mm, pmdp, + addr, &ptl); for (; addr !=3D end; ptep++, addr +=3D PAGE_SIZE) { ret =3D check_hwpoisoned_entry(*ptep, addr, PAGE_SHIFT, hwp->pfn, &hwp->tk); if (ret =3D=3D 1) break; } - pte_unmap_unlock(ptep - 1, ptl); + pte_unmap_unlock(mapped_pte, ptl); out: cond_resched(); return ret; --=20 2.23.0