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 3D92BC02198 for ; Tue, 18 Feb 2025 13:28:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7AE2228012F; Tue, 18 Feb 2025 08:28:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 75D9228012B; Tue, 18 Feb 2025 08:28:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6262628012F; Tue, 18 Feb 2025 08:28:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 455DD28012B for ; Tue, 18 Feb 2025 08:28:45 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 88DEC14125B for ; Tue, 18 Feb 2025 13:28:44 +0000 (UTC) X-FDA: 83133145368.23.213F675 Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by imf19.hostedemail.com (Postfix) with ESMTP id 48F3F1A0012 for ; Tue, 18 Feb 2025 13:28:40 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=MKnmUqbR; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf19.hostedemail.com: domain of xueshuai@linux.alibaba.com designates 115.124.30.130 as permitted sender) smtp.mailfrom=xueshuai@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739885322; a=rsa-sha256; cv=none; b=lCAjvgQqhSPQUe3TP2IZ66V5+sb6zvdcnP9NJIwJmzCU79JXhk3alI2u8M46R8hAnpybZM +qm1tKUDVtHCWrPy14vMX3CahdNyr0QlRaC7nq/UG0juFv7o+cGjKJVL1xqbOWLZxiZkQj VkDmp8AT8hSQLjhpq+Hsq3gKTQf+jxM= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=MKnmUqbR; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf19.hostedemail.com: domain of xueshuai@linux.alibaba.com designates 115.124.30.130 as permitted sender) smtp.mailfrom=xueshuai@linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739885322; 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:dkim-signature; bh=Y5AyiJ/PFt2OYj7VTelaJEhdAfegG77Q/50N6RHUleo=; b=MJXxD0sfVTaEmeC5UrRG8a1l0PbCBGi48zLbeB5+C+JQjCcL0ek9DVmcX45tpYRmkSIBQg yuGjvYc77m1fYUL8G4cKj4L60ndrTLITw7uOtYhXrhtGQdhhybxi9M/7D3SPZdu81/plHx qufdKzz14qBZpoSILrL/x5S1DXz21kA= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1739885316; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=Y5AyiJ/PFt2OYj7VTelaJEhdAfegG77Q/50N6RHUleo=; b=MKnmUqbRvEpStHH+pRMC8sqwvagRpKRt2Gj6wRX1Iy8FUzhllJ7m8UC5QvnaB2QkerVuBQA4RYzOvs2kMMq823PUFQqFW5Kp+FV/p/v9Jo1jT0Ojrqb+k/LoDrZQm5Q/z1YFnSDGoN464IUD7yS1QKc3LUVwJgqItNV0Oo/HVis= Received: from 30.246.161.128(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0WPlxWAh_1739885314 cluster:ay36) by smtp.aliyun-inc.com; Tue, 18 Feb 2025 21:28:35 +0800 Message-ID: <1ff716d3-eb3d-477e-ae30-1abe97eee01b@linux.alibaba.com> Date: Tue, 18 Feb 2025 21:28:33 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 3/5] x86/mce: add EX_TYPE_EFAULT_REG as in-kernel recovery context to fix copy-from-user operations regression To: Peter Zijlstra Cc: tony.luck@intel.com, bp@alien8.de, nao.horiguchi@gmail.com, tglx@linutronix.de, mingo@redhat.com, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, linmiaohe@huawei.com, akpm@linux-foundation.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 References: <20250217063335.22257-1-xueshuai@linux.alibaba.com> <20250217063335.22257-4-xueshuai@linux.alibaba.com> <20250218125408.GD40464@noisy.programming.kicks-ass.net> From: Shuai Xue In-Reply-To: <20250218125408.GD40464@noisy.programming.kicks-ass.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 48F3F1A0012 X-Stat-Signature: oummky61kusctxf8qtes4jeyhc5bintx X-Rspam-User: X-HE-Tag: 1739885320-188606 X-HE-Meta: U2FsdGVkX18CN5vQNsQ+lMxiOtcF2cHSe32r5K+wMmrMIDOo4Sa+Xi0+Qwi69NumE8IhzydQLqgvBLDu+PJYtM59lYnWAgq5d4tZPH2Y9DVZ9cQvLJGsmE7Tuw0nHFV+tfZWd6aEGrtEpbGV+b4I/Og7YQcdPORX8Y1To3+zdoCrR6/YEKrZbe38LueIKh9ghYQX7MWj3O0XvzC3YG8jdKfqSVTopsvGsBDQWJ0pWYMHjZEB9oH9Tp237L5okCA9RZGuVeY+YYg3D1z2UjvPMTNnqbRdSuZNUcBrnj3f/b4A5PDWzY0XpngaIObWitUIOduiQJbeNnkhH7xa0RQBy25OHo1RZbO8liQCPmZTSKlHwNxdaJbLzWm82eIxb1A6vTH8LCsvvUta7oGSYr7QfgR5HhORETJdBC386B53jof9GUWY6wkYQckQc2kLkl680CW4MDecEZCXwvP8VHBAqPh+SWgr0X+Gw4wdaAMZYuwV0n4PLl6EI//QMVmCVTFMmn/TL8QSmQtmVwEIQ0YuW/T8Z8Xs9EpASwFEzs4OQhq51AI25mmWp8p84eelHrJbJrg/CPSwKxeaMKc4PHXz7L6zS0JXl51qx6kmb7Zi0xQL6OdOV6/bJv0C9RpimJilQnqwcgULdfTsz8t/0h34p2Vv2u7jUcckC8M/LM1nia245ZkDwC7SCkgtFa0KZs85PRQrO8fQxOmjEd67usJa/9F15v/y/HsCBOjBPK0MwwcRU9vkYx9AQDvgn2VinHr0qXM+t341Td3v5odt1NR7Z9TW3wgvafgxEM2VOYdCWYCSP/tV0gOCfBdDHky03yTd4IxjvjAfYoAfwO5CBBQ347arlq42h8x/1WjdBqc6yaq3TBXsleh2dZkwus0hWS/Ed/xIprJMESuUwnbcbt1Yte+YHsfCjffdKfAFdR1iCDhoVk9fS8TJkgWtvYMHxAlwNCQp5ON7heSGh/nX4sj KvNtVS9/ bbSfx7NElrO1Q2/R3A7qeRzUx3aE0gzfrQREP0qUsdVxx0ahIhw9+f4UwogOAT4zN3WZkfgtpAGKihO0sa2phVQPhg+HBMTny68IKCb604WG2Cd1G1mx9Io0oOIobWOWu2QvbxQFA8GcbW91eBDvopfa6eFtX0RwRAHAogTr8AdYMoKxl+0q9Uqdq08GGl6BsnwKB0YUzNr8IlENgFp7ArH035O8HKN9fuZxnRoObBGzMMpZrGn50tT1BspAtjcJB7IftN/rsI6NWwoylGyd6Up7QGOycSQpZwoAIRhv49lkdDIzeD4Q/6ra2KojoES76vNPaxKDZYRNiWR1gteF6vx/Zf9YaSBmHUR6I5874p+EIea5C18pA4nMROYVsYH7FmdvkTSmUJID3BsI= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000068, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi, Peter 在 2025/2/18 20:54, Peter Zijlstra 写道: > On Mon, Feb 17, 2025 at 02:33:33PM +0800, Shuai Xue wrote: > >> 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; > > You didn't actually build this, did you? Or did you ignore the extra > noinstr warnings? I did build and test this patch set on it. But I did not find any warnings. Could you provide more details? > >> /* 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; > > Maybe I'm justnot understanding things, but what's wrong with something > like the below; why do we care about the ex-type if we know its a MOV > reading from userspace? > > The less we muck about with the extable here, the better. We need to make sure that we have register a fixup handler for the copy_user case. If no fixup handler found, the PC accessing posion will trigger #MCE again and again resulting a hardlock up. > > --- > diff --git a/arch/x86/kernel/cpu/mce/severity.c b/arch/x86/kernel/cpu/mce/severity.c > index dac4d64dfb2a..cb021058165f 100644 > --- a/arch/x86/kernel/cpu/mce/severity.c > +++ b/arch/x86/kernel/cpu/mce/severity.c > @@ -300,13 +300,12 @@ static noinstr int error_context(struct mce *m, struct pt_regs *regs) > copy_user = is_copy_from_user(regs); > instrumentation_end(); > > - switch (fixup_type) { > - case EX_TYPE_UACCESS: > - if (!copy_user) > - return IN_KERNEL; > - m->kflags |= MCE_IN_KERNEL_COPYIN; > - fallthrough; > + if (copy_user) { > + m->kflags |= MCE_IN_KERNEL_COPYIN | MCE_IN_KERNEL_COPYIN; > + return IN_KERNEL_RECOV > + } > > + switch (fixup_type) { > case EX_TYPE_FAULT_MCE_SAFE: > case EX_TYPE_DEFAULT_MCE_SAFE: > m->kflags |= MCE_IN_KERNEL_RECOV; Thanks. Shuai