From patchwork Mon Jan 29 13:46:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tong Tiangen X-Patchwork-Id: 13535676 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A5356C47DDB for ; Mon, 29 Jan 2024 13:47:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 572BA6B00A7; Mon, 29 Jan 2024 08:47:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4FE236B00AA; Mon, 29 Jan 2024 08:47:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 219E26B00A9; Mon, 29 Jan 2024 08:47:13 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 0BEE66B00A7 for ; Mon, 29 Jan 2024 08:47:13 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9758640A04 for ; Mon, 29 Jan 2024 13:47:12 +0000 (UTC) X-FDA: 81732475104.13.267B6EC Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) by imf14.hostedemail.com (Postfix) with ESMTP id 88DCC100021 for ; Mon, 29 Jan 2024 13:47:09 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf14.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.32 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706536030; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=inDfPJ8KPUyQcnteDpkHTQ4f2V6PM28Z1hOutgycIus=; b=SWazeyuNj7N+lnDs4UHIlvUFEZxEC5kzybB9bi0/6jUtBrpi0htUEgK5I2FVgaqE5AEiY8 nM8s5wLXaK4DNN/Dw9ikxHuoXEr0KaqYeH/kE9sDBJ7yZsAvh00WjlkPe+nvPmzOnDdPga De7u96ahCJF35GOgC8TiU46TtJFg6S0= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf14.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.32 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706536030; a=rsa-sha256; cv=none; b=lGQWfv3128af9N6lgNeuWCC480JngJk8Yu4necOXW0e76/pwuP8SyzbpCzSZY8RD6nX26J 9pqW5cwh5cKD2zJpPEyXFYh4IzpztFhJgG8km/DWZKxe4RCSXRJa3o7l1t60QOQn8ZF7pn GYty3puqyG+Phf3zjRg5SPBhCCOTldY= Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4TNqMx3SYCz1vsVw; Mon, 29 Jan 2024 21:46:37 +0800 (CST) Received: from kwepemm600017.china.huawei.com (unknown [7.193.23.234]) by mail.maildlp.com (Postfix) with ESMTPS id B94991A016B; Mon, 29 Jan 2024 21:47:01 +0800 (CST) Received: from localhost.localdomain (10.175.112.125) by kwepemm600017.china.huawei.com (7.193.23.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 29 Jan 2024 21:46:59 +0800 From: Tong Tiangen To: Catalin Marinas , Will Deacon , Mark Rutland , James Morse , Robin Murphy , Andrey Ryabinin , Alexander Potapenko , Alexander Viro , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Andrew Morton , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Aneesh Kumar K.V , "Naveen N. Rao" , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" CC: , , , , , Tong Tiangen , , Guohanjun Subject: [PATCH v10 3/6] arm64: add uaccess to machine check safe Date: Mon, 29 Jan 2024 21:46:49 +0800 Message-ID: <20240129134652.4004931-4-tongtiangen@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240129134652.4004931-1-tongtiangen@huawei.com> References: <20240129134652.4004931-1-tongtiangen@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.112.125] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm600017.china.huawei.com (7.193.23.234) X-Rspamd-Queue-Id: 88DCC100021 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: cfai49ghh5cj9sop5dr36cpaqxh4ts8g X-HE-Tag: 1706536029-837909 X-HE-Meta: U2FsdGVkX1/FPpUgoUHD27dhl0YysA3EmiuwhdVZUvsOu7n/pm2AARNtWrM0fMUzhu0HpJrEjSYCWFHnUyd+eOrcvBqRXGRxpc0wWDOFVGUe7d5s3CEZ2VugYuiu5nDdJcsphd64FfkTBg0pbQDVMAosF/9TClzWylH6/ICcAB1Q9kVmSquW4H8NEWK1QMzs4ZifEDz33pKYll1Vj/qsi2duZ8gkpBekGNP7EbjuKgvI+rNZFg8Y/P9YL1fR8muaDagKOntqsOl7wFK3IfyBzgTa9v4CGxr8LpU6NqiSwlalXuCaU5wh14+BrAsNWZ2U6N5Pkgg3RkoJunohgx6bbj7eRTPnWKGo9hI35Feo7v23b5+8ehi12CVn9cFt+y0t5nZNZox9mXX1yPi9OoJ0J0gT11jzBiRa5Z9luiKMDk4NSKF3CV/33fyP3tzD+Wo2sC+fWYy3TmrPESrlpq9pWbECRsatFOli2+pcbMeeuTHDOud9HTj3lLDgsZpL36Fh/85t1J6eiQ6gs+QSXJ7R9tXHKJc3PVQueof4U+jixhTa8174fty6rRz1bwMgmU2F72BjW0g/rqsJYwZlC4m8YYga3nf/tQ9vMEORuUNApmJS5xo7JNbd6GcgQfgc+VOyicnyjYQiZ7BUBgFlZvJfUefcKZFKNi+ALtcIO7XKs9SaNdff9tUBU/77oOEUeaRqIigoO8I//rUwI3OoJA24D0d19lbZqRAfDalYh4X9ZcFVcbTSMBTTaztcGmlbRx186RrQiBhMR6Xyx8ktGb/rbR9gMjUGWWwj5T9h7Z6VFqSV1ynj/DDX2Z1eBnjE0AInAIBrd8+bHsJbHj8N0wv/p9GgDtuq0VB6D5NJfaaOEJLx5kxLUpzQLwLXUHccCMaN9AuiKZLdyLaOdGhv/+jB1WDADPP7k1mmi0RAHxuesYRz0q81A3WD/vfOLYvGMCU+G1H58B7Z8ypF1gSXVEq IWs2O+Dd m87mkVkig640Gc1+oRS3NYWrIVLWEOsNM5/wlIUCG4Q5qdcOzrACNXFEDBE/S+Kz8fs84BGSiUYT3fvB9RSZckzc0jE2BxgGKePbrGGnWfhSbNGgPyfRJTGCRX2luaQaIWeSJIZ2bBZHVHSiH9wbiseniM+zWOpvVfpklr6mpD52TjlgoYfxz1kHZGvv6kyeOIy/m26A/iMh4KHLvdM5Dm0vKaA== 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: List-Subscribe: List-Unsubscribe: If user process access memory fails due to hardware memory error, only the relevant processes are affected, so it is more reasonable to kill the user process and isolate the corrupt page than to panic the kernel. Signed-off-by: Tong Tiangen --- arch/arm64/lib/copy_from_user.S | 10 +++++----- arch/arm64/lib/copy_to_user.S | 10 +++++----- arch/arm64/mm/extable.c | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/arch/arm64/lib/copy_from_user.S b/arch/arm64/lib/copy_from_user.S index 34e317907524..1bf676e9201d 100644 --- a/arch/arm64/lib/copy_from_user.S +++ b/arch/arm64/lib/copy_from_user.S @@ -25,7 +25,7 @@ .endm .macro strb1 reg, ptr, val - strb \reg, [\ptr], \val + USER(9998f, strb \reg, [\ptr], \val) .endm .macro ldrh1 reg, ptr, val @@ -33,7 +33,7 @@ .endm .macro strh1 reg, ptr, val - strh \reg, [\ptr], \val + USER(9998f, strh \reg, [\ptr], \val) .endm .macro ldr1 reg, ptr, val @@ -41,7 +41,7 @@ .endm .macro str1 reg, ptr, val - str \reg, [\ptr], \val + USER(9998f, str \reg, [\ptr], \val) .endm .macro ldp1 reg1, reg2, ptr, val @@ -49,7 +49,7 @@ .endm .macro stp1 reg1, reg2, ptr, val - stp \reg1, \reg2, [\ptr], \val + USER(9998f, stp \reg1, \reg2, [\ptr], \val) .endm end .req x5 @@ -66,7 +66,7 @@ SYM_FUNC_START(__arch_copy_from_user) b.ne 9998f // Before being absolutely sure we couldn't copy anything, try harder USER(9998f, ldtrb tmp1w, [srcin]) - strb tmp1w, [dst], #1 +USER(9998f, strb tmp1w, [dst], #1) 9998: sub x0, end, dst // bytes not copied ret SYM_FUNC_END(__arch_copy_from_user) diff --git a/arch/arm64/lib/copy_to_user.S b/arch/arm64/lib/copy_to_user.S index 802231772608..cc031bd87455 100644 --- a/arch/arm64/lib/copy_to_user.S +++ b/arch/arm64/lib/copy_to_user.S @@ -20,7 +20,7 @@ * x0 - bytes not copied */ .macro ldrb1 reg, ptr, val - ldrb \reg, [\ptr], \val + USER(9998f, ldrb \reg, [\ptr], \val) .endm .macro strb1 reg, ptr, val @@ -28,7 +28,7 @@ .endm .macro ldrh1 reg, ptr, val - ldrh \reg, [\ptr], \val + USER(9998f, ldrh \reg, [\ptr], \val) .endm .macro strh1 reg, ptr, val @@ -36,7 +36,7 @@ .endm .macro ldr1 reg, ptr, val - ldr \reg, [\ptr], \val + USER(9998f, ldr \reg, [\ptr], \val) .endm .macro str1 reg, ptr, val @@ -44,7 +44,7 @@ .endm .macro ldp1 reg1, reg2, ptr, val - ldp \reg1, \reg2, [\ptr], \val + USER(9998f, ldp \reg1, \reg2, [\ptr], \val) .endm .macro stp1 reg1, reg2, ptr, val @@ -64,7 +64,7 @@ SYM_FUNC_START(__arch_copy_to_user) 9997: cmp dst, dstin b.ne 9998f // Before being absolutely sure we couldn't copy anything, try harder - ldrb tmp1w, [srcin] +USER(9998f, ldrb tmp1w, [srcin]) USER(9998f, sttrb tmp1w, [dst]) add dst, dst, #1 9998: sub x0, end, dst // bytes not copied diff --git a/arch/arm64/mm/extable.c b/arch/arm64/mm/extable.c index 478e639f8680..28ec35e3d210 100644 --- a/arch/arm64/mm/extable.c +++ b/arch/arm64/mm/extable.c @@ -85,10 +85,10 @@ bool fixup_exception_mc(struct pt_regs *regs) if (!ex) return false; - /* - * This is not complete, More Machine check safe extable type can - * be processed here. - */ + switch (ex->type) { + case EX_TYPE_UACCESS_ERR_ZERO: + return ex_handler_uaccess_err_zero(ex, regs); + } return false; }