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 641F8C52D7C for ; Fri, 9 Aug 2024 17:31:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F1C066B007B; Fri, 9 Aug 2024 13:31:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id ECBFC6B009E; Fri, 9 Aug 2024 13:31:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DBAB36B00A0; Fri, 9 Aug 2024 13:31:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id BED036B007B for ; Fri, 9 Aug 2024 13:31:05 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 77FD6A807D for ; Fri, 9 Aug 2024 17:31:05 +0000 (UTC) X-FDA: 82433397690.11.46225BF Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.47]) by imf23.hostedemail.com (Postfix) with ESMTP id A0CC3140031 for ; Fri, 9 Aug 2024 17:31:03 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=PpLpcLSV; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf23.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.160.47 as permitted sender) smtp.mailfrom=jeffxu@chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1723224589; 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=4wWJES9dN+T0737KjEhk14QZogRDSeEDzNjYRNfc2PQ=; b=I3eJFAfjh3SnoFkabOigCMeZzYhrcGRQ5fAQNZDMncu4f+blP2oscLlDwWcpjN9ZGFAWiN z9fZpQdf1EP2al4pQmZsf9pp2WnE+FH5J8oLyL5+f66fgBobRziFsm7EAAYgbtNvtCWb/k TeYwt5KKD0r+ORiD9UsFIbdkomC2/Jc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1723224589; a=rsa-sha256; cv=none; b=h8bbjGbnkeVpOITYD622Dg3HKmNSxCQK+tf38fLD8tJCpfNdKiCaDhLL71mhc/I/COkD9x h1Zojr+hN40vL0PE+9kDoMbRaq1aWh2Gs3RIHROlTRNkurkCbzhdjg8ounkmcW5cu524nl Way2/D8X+tNwwWc6SKp0z8UzJga5r+Y= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=PpLpcLSV; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf23.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.160.47 as permitted sender) smtp.mailfrom=jeffxu@chromium.org Received: by mail-oa1-f47.google.com with SMTP id 586e51a60fabf-260e6298635so1345061fac.1 for ; Fri, 09 Aug 2024 10:31:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1723224662; x=1723829462; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=4wWJES9dN+T0737KjEhk14QZogRDSeEDzNjYRNfc2PQ=; b=PpLpcLSVq8FWPPpe+m2G8+iBRuEK/7XydlxAtrqXKlnbZGtDOnGv6yjBP9i3l98bgB PoeB+fGvc/80QjOgtv660nLjeDa+mrOcqh5hTsDuKNNyGBNZERNP04vuZeiSec8Mxoz1 YNFAaqr72r5vzl2O2vWqO8r3mVBpnb1aR9rLg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723224662; x=1723829462; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4wWJES9dN+T0737KjEhk14QZogRDSeEDzNjYRNfc2PQ=; b=V1IryMXuem1ws9rPT3zVdzhQoZ8y5yZARUfstpmzL+X4EtFrlfd00RkmyKkMkdqO1q lpdF3ILabBsbwGe14mgqQnXsoKhyYeBhIqPKKVUsCv68f9Un6JyjqF4iK1OXvHEmuDLb pNjhBybJMPUtLI/TyhKAcSaP2sbG4fbwxbK9K4rRfu+WHigx+JZbkR+wcjeSPOOQuyW2 DgkX/MbUDwDBljspQa7WkrhcumEDsNk/u/6bfcTwB/GUxdcugErm89MvVh012PtSLGVF Hht0fAAkHBS640SIC8gjfeFQmq8vqQFOxENwbd6ctafnv8HUaQZ57kYsFwIlIeh6V5ZX CH6g== X-Forwarded-Encrypted: i=1; AJvYcCVZnx0SzjVdbh1o1lo/bsMN3zzbCICwbeoi25iQHXZMhdXRBIJiLNnsMJ/PtFR7v4bKSqIeVIgHyqNY0LZl7HrAHc4= X-Gm-Message-State: AOJu0Yx05Z1eLiFEDf3rEG/W6ZM2bzPRBQaqep40zjGv53gK0Rb38VyB kW5T5tqlnas2Dr5mHawoMOIDjkRZGz91zAPqADvFyOGazqVCb8rrtFxWS83zkucvUq09BXIIJqB Bs7ggbQOCszss9Rl3yJHFW1AFwYKYPy3XWUGd X-Google-Smtp-Source: AGHT+IEBEPuSAY1tIMbqjh+/EoPcs7ZAb4YhPlN2g/kLHf6+IphnkfkzhOD5SjAmaDVQxwnIxl+YeieBGmZwVkZFbaU= X-Received: by 2002:a05:6870:41d1:b0:261:184f:4ef1 with SMTP id 586e51a60fabf-2692d38e91fmr2585320fac.15.1723224662473; Fri, 09 Aug 2024 10:31:02 -0700 (PDT) MIME-Version: 1.0 References: <20240802061318.2140081-1-aruna.ramakrishna@oracle.com> <20240802061318.2140081-4-aruna.ramakrishna@oracle.com> In-Reply-To: <20240802061318.2140081-4-aruna.ramakrishna@oracle.com> From: Jeff Xu Date: Fri, 9 Aug 2024 10:30:51 -0700 Message-ID: Subject: Re: [PATCH v8 3/5] x86/pkeys: Update PKRU to enable all pkeys before XSAVE To: Aruna Ramakrishna Cc: linux-kernel@vger.kernel.org, x86@kernel.org, dave.hansen@linux.intel.com, tglx@linutronix.de, mingo@kernel.org, linux-mm@kvack.org, keith.lucas@oracle.com, rick.p.edgecombe@intel.com, jorgelo@chromium.org, keescook@chromium.org, sroettger@google.com, jannh@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: A0CC3140031 X-Stat-Signature: q9w7j68xp7ptyk8q4hfdptzgok55caob X-Rspam-User: X-HE-Tag: 1723224663-294476 X-HE-Meta: U2FsdGVkX1+jfQeZmdKOx12C+GlMLPgPeCZLh5viYCvJHagVWuHUkECALRIks+U6HRirVf5fvckbzhf/AeUpro+XyIHGUIpPIGPvS1TnOE62hfRVbAK3xymEhZFzcAfx0/v3PtKM5RdH/bLZjoZqkJuDf4F5ns2oUe4//0yeRyjwtN335e22UgQtvtCpYa/31kcTFXUPcja533w3zpRV8ff3lq4WbgFCBVi6xnvh5inf9OSq2o1Zvg0gM5hEsEmqK3kqJMheTQKfzjSJMmbRdzBYa7PIwvofJrMxouLXRc1IOr6RXPnJzIF9VbhsSOwYMzsQY7eULJY7oXPVEhzsX6Wvdpd1guk87btpBM3qgR6929WBcJFJ8cDtBS1qP1tFaSrkIqU5abdSYRergsnellPR1Rq0XjFY/Hg0rrjriQ82GA6/Z7LmpmlP9AZzyMK7QZKpGWVktjPR1VgyeAQ/v9iUDTJpxG+GIM8eKJS0wRrOsbT4mmE84OkAVu3savBZXQxz8XP0W4ePWlufYnMUxuMVVK1PVzVGM6F+K2faSiX305vYYsivwz0Q7p98+dXMwWKLSwQnYVyCAgZnAijCTfWFxCloPbMSiIWUgBD42rm0Mf0M9Za2sdn+/k2+BJCvADY1K/iS5BzGZdtxOScl2tO2LkvbFmfk1Zbf3h6Tj/DJRDZ78nBkYW/6IC48bz2HIsAAnUB9N8lyMG0Dv45PJVvt6N0leGG637Cg1bEbYeXEZVm3De0m39EHuzCcuxbqX2VXThWxDWYW08s86/cJ/qYpS/NEVkwJKFYJuliTMMSdFvPdkFso6i0gRC4ZayF2orQW2HWNflJlnkle7ifONakZZJkdYFRm2zwUxEK6F7JqklCz8r5LDJ4YB5nz2DGCvJ7rM4mW/6a/6fElsevcKcZEv7keNnwaLOJ2x4jGEHJz5SxZDrB92R6PkRPilZKpZtuiEDJbS758UyHAmRU WAFfDBKv bDFOGBxLh8ylcY/jZUZeLmvy+7VQaos6Ly4ocmMF2xjJCf3X3EB58pGD3OnTVqVQ3Xywzh9g90chaG8PeXP4uKKoeVywPtpZlzKDTrBrJY6ippPfLrYYBjK7kSQG97yQZlxL0TgplWwh6uUrUUZArMY4AZzEFwOdtgYWGeNP3INNpyYCwkw4hdjymGAKlrHiIlTca 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: On Thu, Aug 1, 2024 at 11:13=E2=80=AFPM Aruna Ramakrishna wrote: > > If the alternate signal stack is protected by a different pkey than the > current execution stack, copying xsave data to the sigaltstack will fail > if its pkey is not enabled in the PKRU register. > > We do not know which pkey was used by the application for the altstack, > so enable all pkeys before xsave. > > But this updated PKRU value is also pushed onto the sigframe, which > means the register value restored from sigcontext will be different from > the user-defined one, which is unexpected. Fix that by overwriting the > PKRU value on the sigframe with the original, user-defined PKRU. > > Signed-off-by: Aruna Ramakrishna > --- > arch/x86/kernel/fpu/signal.c | 11 +++++++++-- > arch/x86/kernel/signal.c | 12 ++++++++++-- > 2 files changed, 19 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c > index 931c5469d7f3..1065ab995305 100644 > --- a/arch/x86/kernel/fpu/signal.c > +++ b/arch/x86/kernel/fpu/signal.c > @@ -168,8 +168,15 @@ static inline bool save_xstate_epilog(void __user *b= uf, int ia32_frame, > > static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf= , u32 pkru) > { > - if (use_xsave()) > - return xsave_to_user_sigframe(buf); > + int err =3D 0; > + > + if (use_xsave()) { > + err =3D xsave_to_user_sigframe(buf); > + if (!err) > + err =3D update_pkru_in_sigframe(buf, pkru); > + return err; > + } > + > if (use_fxsr()) > return fxsave_to_user_sigframe((struct fxregs_state __use= r *) buf); > else > diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c > index 9dc77ad03a0e..5f441039b572 100644 > --- a/arch/x86/kernel/signal.c > +++ b/arch/x86/kernel/signal.c > @@ -102,7 +102,7 @@ get_sigframe(struct ksignal *ksig, struct pt_regs *re= gs, size_t frame_size, > unsigned long math_size =3D 0; > unsigned long sp =3D regs->sp; > unsigned long buf_fx =3D 0; > - u32 pkru =3D read_pkru(); > + u32 pkru; > > /* redzone */ > if (!ia32_frame) > @@ -157,9 +157,17 @@ get_sigframe(struct ksignal *ksig, struct pt_regs *r= egs, size_t frame_size, > return (void __user *)-1L; > } > > + /* Update PKRU to enable access to the alternate signal stack. */ > + pkru =3D sig_prepare_pkru(); I think, the better place to call sig_prepare_pkru() at begging of the get_sigframe: get_sigframe() { /* ... */ if (ka->sa.sa_flags & SA_ONSTACK) { if (sas_ss_flags(sp) =3D=3D 0) { // set pkru =3D 0 <--- set pkru =3D 0 here. entering_altstack =3D true; } } For two reasons: - We probably don't want all signaling handling going through "PKRU=3D0" , this includes the regular stack and nested signaling handling. The best place is when "entering the altstack". IIUC, this feature only enabled when sigaltstack() is used. - The thread might not have read-access to the altstack, so we will want to make sure that pkru=3D0 is set before any read to the altstack. And IIRC, fpu__alloc_mathframe needs read-access to the altstack. To help with testing, I will send a test case to demo the usage. (please give me sometime to organize the test code, I'm hoping to send out before the end of next week) Also, could you please consider adding a new flag SS_PKEYALTSTACK (see SS_AUTODISARM for example). Most existing apps that use sigaltstack() don't use PKEY and don't care about setting PKRU=3D0, and don't need to overwrite the sig frame after XSAVE. The flag will limit the impact of this patch. Thanks Best regards, -Jeff > /* save i387 and extended state */ > - if (!copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, ma= th_size, pkru)) > + if (!copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, ma= th_size, pkru)) { > + /* > + * Restore PKRU to the original, user-defined value; disa= ble > + * extra pkeys enabled for the alternate signal stack, if= any. > + */ > + write_pkru(pkru); > return (void __user *)-1L; > + } > > return (void __user *)sp; > } > -- > 2.39.3 >