From patchwork Mon Feb 17 06:33:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shuai Xue X-Patchwork-Id: 13977132 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 6D9E1C021A0 for ; Mon, 17 Feb 2025 06:33:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 766A4280034; Mon, 17 Feb 2025 01:33:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7173C280032; Mon, 17 Feb 2025 01:33:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5DFBB280034; Mon, 17 Feb 2025 01:33:49 -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 3E6DA280032 for ; Mon, 17 Feb 2025 01:33:49 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id D59B5A1B2A for ; Mon, 17 Feb 2025 06:33:48 +0000 (UTC) X-FDA: 83128470936.09.4A105C0 Received: from out30-132.freemail.mail.aliyun.com (out30-132.freemail.mail.aliyun.com [115.124.30.132]) by imf10.hostedemail.com (Postfix) with ESMTP id 8E0C4C0010 for ; Mon, 17 Feb 2025 06:33:46 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=ceuTCBZS; spf=pass (imf10.hostedemail.com: domain of xueshuai@linux.alibaba.com designates 115.124.30.132 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=1739774027; 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=nVZg/Xi0EFgJwO78HVQQzmH5TmzN10gdAW21xjQG3r4=; b=DKD8KIJR6ziBX2AJuSyrcM+o6rKbddyvhHEk/G+Hz2p0VkkZ5DB6Ru85q3IOl/uX3xnUGa 5vmqdLbspdQoymWQzOE3hwzv+RT3xL04OBvDZBXwBm6t7loG/zTa51HKpE2CUqan7xVo6b j0gqJimyEdBV+bM9KVC2aZzT2101HEQ= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=ceuTCBZS; spf=pass (imf10.hostedemail.com: domain of xueshuai@linux.alibaba.com designates 115.124.30.132 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=1739774027; a=rsa-sha256; cv=none; b=NnuTsluOmU4K1JuR57Jl9NMfZ/fZzylGtwhIFcHoS7Tez6j5QQ8CQmmls23VJULnx2j8b+ feq5GS10Ew2OZJshklQEnXtNC41zkBWhwS1lx/OOTYU25LKbI/45cYbp07H4zmg+Yydbg5 +k+juogpTuqTgycyhQEmknyTypKjwKk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1739774022; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=nVZg/Xi0EFgJwO78HVQQzmH5TmzN10gdAW21xjQG3r4=; b=ceuTCBZSvIcvKrK8/rvcF6MEAimkrZA/RXC5ONxzaRWFXxn5kctpxXX/oJz6KfYXH0PzHolPRxkt9F64OKdrQ5yyiNd+cBK41i6azKYcdHNFeXQsCcm0dGUM0TIEkaRyC0OfBvH8LPujGxNJjsfSpeSPoXzKfsrECP76Er8CbqM= Received: from localhost.localdomain(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0WPb1mQ2_1739774019 cluster:ay36) by smtp.aliyun-inc.com; Mon, 17 Feb 2025 14:33:40 +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, peterz@infradead.org, jpoimboe@kernel.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 v2 3/5] x86/mce: add EX_TYPE_EFAULT_REG as in-kernel recovery context to fix copy-from-user operations regression Date: Mon, 17 Feb 2025 14:33:33 +0800 Message-ID: <20250217063335.22257-4-xueshuai@linux.alibaba.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20250217063335.22257-1-xueshuai@linux.alibaba.com> References: <20250217063335.22257-1-xueshuai@linux.alibaba.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: a77k6nq9feduqusnff1131q77ydz1wrz X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 8E0C4C0010 X-HE-Tag: 1739774026-608705 X-HE-Meta: U2FsdGVkX19uUZtbdoP4fZTa5x/edT/tnF7MHAwYcamN+lCu6KL3/OCwiTvFzYw7KSJN31n7NOb97y3ZAP/+MXDhc00DgvnZN7zWFGEGI/3lLinoeu3CUrPeUpf0pdRh195AskIMER2IgT9X8LX5Oh3eZck3h+CyikblE6bdM4UuYqGc46ILQX4K5Ck42GwtXHybO5Cse+lCnBORU+Kda370IzaC99xilad8qcP/QRe2oxOe77opEwbkkDj1UEGZBzcovtaZBG/WEmHQymURq6rQ8cftCXhmDqpVCiBQr/8/Rmev9bXP8Q7ax8UzKX1dUgDu0L/FWvxhWQRG1JOtui3ceQoEZCSlVex5RazzawZNRoif+HFs5facBEQN53gqG3c7UQmHQnqoMCoypQ69gNrZVLweq+0Pdm5j95GRFZ5S93jF4L/dgN2QKTJdGg24DV1Mj+SvOB1kpn/HmovQM89Z3wbEpW9pFN4LIWqReq0dQ4Q5s3COW77khEHWlzp2gmObSbKAFgIlpOuRNcMHN/U4yo2hUVxx43fSGVwPh26dETPkwTm3zS3iPiW6Xlj9IhXw8k7vH3Gc9h09iYPPYyzs0nc/4BNHO3lYp+1PqHScaWKm01FxNZ0EpJILTDbNAnQqdRXGZfLux9+Hmerw6v8ljVzlb5pjH+u55Udf8BWhUlQVGMxDLkULfkBw1mSOfWY9FxLkzCXSXaSwgJdQGURmBmAp/upLleAghFEJh5nLEscD67uc1Kohp2PFcAyN20igMfqzUIqljXQAZfTOiAPM2schFccRo87fpP0Vly+BszeklC1zqGoZUVvrVGqqBLugWXXvrnBCGIcqBzuPnZSFJql2Pp3Bmj1CXrb4Z2/A6joVcvWpty25Iv78Ew8tBvzsuK0kwcGUNJnvNfwf1ep7vrZQpiDGt5cbFmXLQrA0laOKnA4xbdQRKUiPP9BMWv+9thczX0OPHL/vjuV BYzlODbG dL2LkEIT08kVKBLF+w7ldlBzTp9jtdfafCfpRBOSS+VyfYk+uyZ8UYo0kuGiUgtUYvgbWx09fKEo/L+k6StWkJrrE8BKht8y4bedqXVdQoFTKWUmk8wZSNLBf3MZm0YidOFartGC3FyCbwbYsQ/nl8gdQfGCs2EIUppjStLU9zuozB9+L283ypZ6p86pjiGGhnEcgCZ8UIRcDZ8UVuOXCknWSflDm0pkTkhJCKHauRlaaRtYjv0AoySRKnrZC/HuaMY83QXu0zBLKFq7/XoJaCzUSTVJuWJEr71YXFaQYUAxCNzuftArBk2lglcjp0PxURm0cP8Un639TaquTaVvX9iNVSDQvM2nMNOii0xrJ8Uh1deQM+4scrPSa1Q== 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 Fixes: 4c132d1d844a ("x86/futex: Remove .fixup usage") Cc: stable@vger.kernel.org --- 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;