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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8A17C021A1 for ; Tue, 11 Feb 2025 06:02:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C988B28000B; Tue, 11 Feb 2025 01:02:11 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C1EA8280005; Tue, 11 Feb 2025 01:02:11 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ABEA728000B; Tue, 11 Feb 2025 01:02:11 -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 7F5DB280005 for ; Tue, 11 Feb 2025 01:02:11 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 2E9D6120FFC for ; Tue, 11 Feb 2025 06:02:11 +0000 (UTC) X-FDA: 83106618462.03.7709A99 Received: from out30-118.freemail.mail.aliyun.com (out30-118.freemail.mail.aliyun.com [115.124.30.118]) by imf04.hostedemail.com (Postfix) with ESMTP id 33EDB40006 for ; Tue, 11 Feb 2025 06:02:08 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="IBv4NDd/"; spf=pass (imf04.hostedemail.com: domain of xueshuai@linux.alibaba.com designates 115.124.30.118 as permitted sender) smtp.mailfrom=xueshuai@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739253729; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hfmiBx8OqSwf83Pjl+Ndh5ksVZvALy8DLh1zZo/PfR0=; b=fnpbz0ergTBuXwr1CMx2SAf6/lTe8LO6oa0U6A63A+eAR4mRr9omA0RYIvRV5ic7GXI9A9 u/75LN3YD5SWXIBpjE6/w6iPEYbIptT34bAAz5NY4L2TisvwdXXP9PMidp2ra9GQ08M7H1 rTJgfwBof039axk06G/YCDKVfibuajk= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="IBv4NDd/"; spf=pass (imf04.hostedemail.com: domain of xueshuai@linux.alibaba.com designates 115.124.30.118 as permitted sender) smtp.mailfrom=xueshuai@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739253729; a=rsa-sha256; cv=none; b=3B1ECPe+YGNSQ3CDvfJllTJZmu3V1/y+SvyXnKAD6Nl8TBh+NiJxc4h/ujku0aEXzbcezk UiMBBktniJobYnXl4b769OL52hdr6eXch8/vlr5ylr1lOGj0Z++UKt7SkRL/GXYIgcTdiR wgbhozNG8Z4fsJrh9UTzcJ7/YGa/7us= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1739253726; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=hfmiBx8OqSwf83Pjl+Ndh5ksVZvALy8DLh1zZo/PfR0=; b=IBv4NDd/IZMNMZ3ebccSd1/tyOAXFlXZDmAtA2WvCQZYNW4tKXLSJ5lkWDkS4cbqE1Ae/SxDxrEdbvjjTV2j3qobKEjyQZTG+2IAmWPJsxj4sHQmnPcn2tYg2rh4vJlLZ1oOriBra4dc2u1+FSaRsVZ6rsOhDwjwwBWjbT26BXU= Received: from localhost.localdomain(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0WPFiSIJ_1739253724 cluster:ay36) by smtp.aliyun-inc.com; Tue, 11 Feb 2025 14:02:05 +0800 From: Shuai Xue To: tony.luck@intel.com, bp@alien8.de, nao.horiguchi@gmail.com Cc: tglx@linutronix.de, mingo@redhat.com, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, linmiaohe@huawei.com, akpm@linux-foundation.org, linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, baolin.wang@linux.alibaba.com, tianruidong@linux.alibaba.com Subject: [PATCH v1 3/4] x86/mce: add EX_TYPE_EFAULT_REG as in-kernel recovery context to fix copy-from-user operations regression Date: Tue, 11 Feb 2025 14:01:59 +0800 Message-ID: <20250211060200.33845-4-xueshuai@linux.alibaba.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20250211060200.33845-1-xueshuai@linux.alibaba.com> References: <20250211060200.33845-1-xueshuai@linux.alibaba.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 33EDB40006 X-Stat-Signature: uytxgmwa9jn3xpr4xnafq3pyxu1nidrr X-HE-Tag: 1739253728-583073 X-HE-Meta: U2FsdGVkX1+vuo6c/wzMk7rbsxFd5OsKKZ8pu6IMS9aoh0Vh5ZnwaPsEVs9mrGatcj358mMK7Jjr8060Nwxczl7dBgH/pxRunkv3bXL5N0xx/sBKFKqcQdW3o0BPmNGSZ6X1+XahLORO5Ihu/wBysJCPQqllqlPtxsGe9T1xk7jU5gaYu+Vkyshi98ELKQmFYD3nndxvIP+MtB2jSid3oWLt3oiYl9960sumrYNGEL1QoglodSowp3t+qPcQAslLh2nSA4KTMX96vO9dNsPikKSmnlJJIlrNbuaW1mQuxN/YEquR+J/PFg8vuGOMVvEHPvlLumf5nNs64J3CGs84v8btjAbG72OlBaXgHyngS1darKX+RNBypd1nhao/nVIHM/p32YIusoNx55VbrrF6T4CEpeA9J5fD0yMBy6Xuv4Pohvh7Lmc1edy5a79JaPJv39at1nyBQ2X4F7FoT5y/HXpxm4ygYi/3HZTNvBFUvZxhtSl7YnK6AWk+kzNBENf5Qhm86+hqWK6r53xXJtbf+Bzvh6wwPWHLklj10xGYVhlK2qCU/HjUeJ/f68ZJGxdWFGuTHzywnghV6Lfw4poP2bbnn6+dwLsHg0YUD59hNANZNobx9mv9LV4PFTwZ1S2ZmfsGW514uXXFnqnckfjAsjPybZVlayD8RgRJl2vNxqkyMhuNsuvrGWoQgctIV7ZZMhgvD43kJVqIzghLMtPWBHedqd7hzTuXs0fGtP5LFkDnyJMic9BAuodyOR4GJxCi/0GLFT6/HJx7B9kRptS7l2mS0EBgDv8qAm6242G/qlmhGvhghvuscd25xWxbE46jgw3TxNF9qukXsvRKI2ga608clVWRVZ80FGaEmLkakDwWQbeWi/2RkgcrnUI1fVVVP17AdyqL4moLGKZfzqNR1EJ+ZQPQPJXODjd1D6hEGi8B5wrY1x89MtAaSSpJe/hgpmMijt+SlQcDdBogemu R8GaSomB d8AoBH9alFsG5V6iI98GhQrytm4YXyp4ftMfuiW38zyRty7Q5fUoo77dB0xTqyrFDawJncR0KSP7MyasVcOn33Q4zm/556STPqsgFmhE1KTgGi3Z9oN80/TcQVKzVKLnZSOCSAByzkdvkEE5UhYNdO9Q052s1tiFX3M0vlLN9M0XhureNJP45bjA+iXnZx/EZC4V1eaTYPCJq+Fk+TVdyED75cnE9jSpvUJkj/5dIWT5N14zc3D7ftP7UkX3y/BmQvL7gL3qeiSbf5i9TRLEFH4XiNyCJ/Lu8D6hph1Yo/Ci3QHYiuoVq8j4ZGEi4o4XnelaW/B+3G2iqqi9UxIfrWLhPpngSyqCZkOS5i9/KR1BCyxXPegWCoE+JdwNKikY/8zEW 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: Commit 4c132d1d844a ("x86/futex: Remove .fixup usage") introduced a new extable fixup type, EX_TYPE_EFAULT_REG, and later patches updated the extable fixup type for copy-from-user operations, changing it from EX_TYPE_UACCESS to EX_TYPE_EFAULT_REG. Specifically, commit 99641e094d6c ("x86/uaccess: Remove .fixup usage") altered the extable fixup type for the get_user family, while commit 4c132d1d844a ("x86/futex: Remove .fixup usage") addressed the futex operations. This change inadvertently caused a regression where the error context for some copy-from-user operations no longer functions as an in-kernel recovery context, leading to kernel panics with the message: "Machine check: Data load in unrecoverable area of kernel." To fix the regression, add EX_TYPE_EFAULT_REG as a in-kernel recovery context for copy-from-user operations. Signed-off-by: Shuai Xue --- arch/x86/kernel/cpu/mce/severity.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/mce/severity.c b/arch/x86/kernel/cpu/mce/severity.c index dac4d64dfb2a..14c2d71c3ce1 100644 --- a/arch/x86/kernel/cpu/mce/severity.c +++ b/arch/x86/kernel/cpu/mce/severity.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "internal.h" @@ -285,7 +286,8 @@ static bool is_copy_from_user(struct pt_regs *regs) */ static noinstr int error_context(struct mce *m, struct pt_regs *regs) { - int fixup_type; + const struct exception_table_entry *e; + int fixup_type, imm; bool copy_user; if ((m->cs & 3) == 3) @@ -294,9 +296,14 @@ static noinstr int error_context(struct mce *m, struct pt_regs *regs) if (!mc_recoverable(m->mcgstatus)) return IN_KERNEL; + e = search_exception_tables(m->ip); + if (!e) + return IN_KERNEL; + /* Allow instrumentation around external facilities usage. */ instrumentation_begin(); - fixup_type = ex_get_fixup_type(m->ip); + fixup_type = FIELD_GET(EX_DATA_TYPE_MASK, e->data); + imm = FIELD_GET(EX_DATA_IMM_MASK, e->data); copy_user = is_copy_from_user(regs); instrumentation_end(); @@ -304,9 +311,13 @@ static noinstr int error_context(struct mce *m, struct pt_regs *regs) case EX_TYPE_UACCESS: if (!copy_user) return IN_KERNEL; - m->kflags |= MCE_IN_KERNEL_COPYIN; - fallthrough; - + m->kflags |= MCE_IN_KERNEL_COPYIN | MCE_IN_KERNEL_RECOV; + return IN_KERNEL_RECOV; + case EX_TYPE_IMM_REG: + if (!copy_user || imm != -EFAULT) + return IN_KERNEL; + m->kflags |= MCE_IN_KERNEL_COPYIN | MCE_IN_KERNEL_RECOV; + return IN_KERNEL_RECOV; case EX_TYPE_FAULT_MCE_SAFE: case EX_TYPE_DEFAULT_MCE_SAFE: m->kflags |= MCE_IN_KERNEL_RECOV; -- 2.39.3