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 26FB0CE7A9D for ; Thu, 5 Sep 2024 20:41:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B57D16B0088; Thu, 5 Sep 2024 16:41:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B07D66B0089; Thu, 5 Sep 2024 16:41:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9CF686B008C; Thu, 5 Sep 2024 16:41:52 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 788E06B0088 for ; Thu, 5 Sep 2024 16:41:52 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 2B839A9B95 for ; Thu, 5 Sep 2024 20:41:52 +0000 (UTC) X-FDA: 82531856064.27.3FF3EBC Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf25.hostedemail.com (Postfix) with ESMTP id 2303CA0015 for ; Thu, 5 Sep 2024 20:41:49 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=Vmhr4xm1; spf=pass (imf25.hostedemail.com: domain of "SRS0=ehJl=QD=zx2c4.com=Jason@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=ehJl=QD=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725568812; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IeN0hion7E5T8bnC9bEQSPstkGSkSwCA9M/4YZOxoLs=; b=6VSoGisrUxKjWqiBGI8SQvYZU0y6fEXWxcbL/W6Cvie0VHkSM/2/LIDqOAOvZ4tpAf2BV6 Ci8a1bZxwC2LhQ3PfwDeExbvpUG0lFWB++iYoy7m0KsWl1IxkO44SEiEeN3Ps2dqcAR8Nw AqKFsjpPLic3qNwqAZe6C+55XGde+ZM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725568812; a=rsa-sha256; cv=none; b=aHVnt4Qd40/WgVcd963W0tKByelIK3DemiP+w0NUdEVNxoKcF9bt27AF+E8WSTa8lCBJDe LOjcx9Iqn+d+apTo14F/3i2Oorp12bp49+pINlNjDk2YxvRt1uMR0SsBw7y03whO5JC0JC F7Bd2ihpgxqAYVGY0APb5FY3p/SBHqk= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=zx2c4.com header.s=20210105 header.b=Vmhr4xm1; spf=pass (imf25.hostedemail.com: domain of "SRS0=ehJl=QD=zx2c4.com=Jason@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=ehJl=QD=zx2c4.com=Jason@kernel.org"; dmarc=pass (policy=quarantine) header.from=zx2c4.com Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 785D15C5D70; Thu, 5 Sep 2024 20:41:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 398A0C4CEC3; Thu, 5 Sep 2024 20:41:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zx2c4.com; s=20210105; t=1725568904; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=IeN0hion7E5T8bnC9bEQSPstkGSkSwCA9M/4YZOxoLs=; b=Vmhr4xm1Wp03ugcdrYba3ciO2c/OQp0oQM3tMCUeyv/y6IZN4vNwmCaOuwFQTFlZjTxzGh vyDmKYOWlgz6gVR/SY11McK85Ld05NIERlGr0h62hGj7fSc/8dsPEgJIDmwgO9QkzhtMl2 G9lC+jvPOPB9VCi02VaBflNkREEbT7Y= Received: by mail.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id 48b42c3c (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Thu, 5 Sep 2024 20:41:44 +0000 (UTC) Date: Thu, 5 Sep 2024 22:41:40 +0200 From: "Jason A. Donenfeld" To: Christophe Leroy Cc: Andrew Morton , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Michael Ellerman , Nicholas Piggin , Naveen N Rao , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , Shuah Khan , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kselftest@vger.kernel.org, llvm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, Adhemerval Zanella , Xi Ruoyao Subject: Re: [PATCH v5 4/5] powerpc/vdso: Wire up getrandom() vDSO implementation on VDSO32 Message-ID: References: <1f49c2ce009f8b007ab0676fb41187b2d54f28b2.1725304404.git.christophe.leroy@csgroup.eu> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: X-Stat-Signature: exq7xjnsgt3fj9mp45dw4rqdtqa9n565 X-Rspamd-Queue-Id: 2303CA0015 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1725568909-565076 X-HE-Meta: U2FsdGVkX1/Tq9W1BcLnumN6+M7CIQ+eKnCZUn29PmUEH3qnFkrt1Ymmlb7XPE28bJBF+q3hDXWYdUgJfVXk1oUj3TsYmo0PxXQCorql+QhzNEvsjmYoSZHsnMXcbs9m6GOR+pyhjWSKLu7Ge3ExmYO+GVCcLebj/9HgJ5A24PRK6UOcwOWQBIgW+zcO1wv/Gs9dTTiZo8CSHkDEyBu7aJjOUhYPCTwrQV03S1q2ejI3rrf4zk+W0ErS+vSarhsXWw1aQg4FnTEzSj9tVKBgj3sw8tkQyeHU5wK/VqsJOb3A05b8m+dD94MReUUuiKf46895vaRLrngGfRTwfTwCTzFUkPM/DKna/khlxK2ymLlD0uLPwPiJnQVbQGdftoiM+gXF/2b2RhjeY8dLRnxdLkxgqxxMq8Q7fBZ4IHfNpLohhJoSDgAHdjoxHMk7HTiQ/eNsobL++fxbhLzzhf1dXpv3uYWZOC+Xm7d98dIdICE3FoqAvQeSlY3vY2h8yngP+88uS9YQ5Xrum0HafhrUc2F1N/KGhxUcRrxAICVQpHaHlguFpxS2Nh/LrhfpRkNW+b6WVl6RdFfZ2ZAPE84STEuSOtuV04rUNedeki/gYmALI+EZCMy4kTjStP27tPQtl/VudsXObmEM8Z781xHjV11ODYrvfok3bp6bJZr7Q1+lrs1Z9q1T5PrI6j9UUSBfsRRoE655N/4yWc0cMlT/78qetRQwn/nPliGJc4GIqmh4pw5tPpMSjTIJD9HFGkM06hdQOq2eSBbt5ZKpZYjZXR+TAMJV5onhCfKNwM9VbaAr1U1EUSfVMu+x+ZVTe84sGQ6Gyp1rtm3TSHB2U0yGcJrVFBaqDoL0e+e22wZTFYFUv4sYa8Bjmp3bnMd7Ppc4rlkKYWFo/w00tmZdOjWXB6xX2oYIuoy42j7WmS3Q05niTqy6aUjvPNt3ghiBJVp80as5oyStlN0pLd4GglS L0luTnQq 2vRXdbqF4CTF89en7/4NpQk6YhqzkHW/DzL8phB46IFzhPl4xgbbdHkFQ5xNUBJNET2bGT6AaaEwN1T45UAJALBCXvzD+mhwxLPzcAxgVcm7cwk65miN+wT7fx/y5aKykkK9Q0PjTWLODmhH9SWW2Lm6zI/qP3fxh4/uGb/e60ou0JmpUtthdYC6KXcUGdf6DbAy4Pht4nkDgMnm8sDY21sueQIEt/THVP3XZ24RO6SS43VYd6Uo1kCVO5DDy7TXfXztoc/09B8VF4XU16w3KWB9OBSHkbagSbTqzQHkFUtzzDfYJqZfqFenlOAd8Ura5adqfzUUBuZrIhD5u6fkji/pPV/sPa7zUrHLJEh2uuf8a8JKFR3I/bcQemyDoGfRCl6pL3r/NiQCMn7vdsa+qJWYstLfftysnmaee2ikTnzSAcZ+NRGx02GoARQ== 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, Sep 05, 2024 at 06:13:29PM +0200, Jason A. Donenfeld wrote: > > +/* > > + * The macro sets two stack frames, one for the caller and one for the callee > > + * because there are no requirement for the caller to set a stack frame when > > + * calling VDSO so it may have omitted to set one, especially on PPC64 > > + */ > > + > > +.macro cvdso_call funct > > + .cfi_startproc > > + PPC_STLU r1, -PPC_MIN_STKFRM(r1) > > + .cfi_adjust_cfa_offset PPC_MIN_STKFRM > > + mflr r0 > > + PPC_STLU r1, -PPC_MIN_STKFRM(r1) > > + .cfi_adjust_cfa_offset PPC_MIN_STKFRM > > + PPC_STL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) > > + .cfi_rel_offset lr, PPC_MIN_STKFRM + PPC_LR_STKOFF > > + get_datapage r8 > > + addi r8, r8, VDSO_RNG_DATA_OFFSET > > + bl CFUNC(DOTSYM(\funct)) > > + PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) > > + cmpwi r3, 0 > > + mtlr r0 > > + addi r1, r1, 2 * PPC_MIN_STKFRM > > + .cfi_restore lr > > + .cfi_def_cfa_offset 0 > > + crclr so > > + bgelr+ > > + crset so > > + neg r3, r3 > > + blr > > + .cfi_endproc > > +.endm > > Can you figure out what's going on and send a fix, which I'll squash > into this commit? This doesn't work, but I wonder if something like it is what we want. I need to head out for the day, but here's what I've got. It's all wrong but might be of interest. diff --git a/arch/powerpc/include/asm/vdso/getrandom.h b/arch/powerpc/include/asm/vdso/getrandom.h index 501d6bb14e8a..acb271709d30 100644 --- a/arch/powerpc/include/asm/vdso/getrandom.h +++ b/arch/powerpc/include/asm/vdso/getrandom.h @@ -47,7 +47,8 @@ static __always_inline struct vdso_rng_data *__arch_get_vdso_rng_data(void) } ssize_t __c_kernel_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, - size_t opaque_len, const struct vdso_rng_data *vd); + size_t opaque_len, const struct vdso_data *vd, + const struct vdso_rng_data *vrd); #endif /* !__ASSEMBLY__ */ diff --git a/arch/powerpc/kernel/vdso/getrandom.S b/arch/powerpc/kernel/vdso/getrandom.S index a957cd2b2b03..bc49eb87cfd1 100644 --- a/arch/powerpc/kernel/vdso/getrandom.S +++ b/arch/powerpc/kernel/vdso/getrandom.S @@ -32,7 +32,7 @@ .cfi_rel_offset r2, PPC_MIN_STKFRM + STK_GOT #endif get_datapage r8 - addi r8, r8, VDSO_RNG_DATA_OFFSET + addi r9, r8, VDSO_RNG_DATA_OFFSET bl CFUNC(DOTSYM(\funct)) PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) #ifdef __powerpc64__ diff --git a/arch/powerpc/kernel/vdso/vgetrandom.c b/arch/powerpc/kernel/vdso/vgetrandom.c index 5f855d45fb7b..408c76036868 100644 --- a/arch/powerpc/kernel/vdso/vgetrandom.c +++ b/arch/powerpc/kernel/vdso/vgetrandom.c @@ -8,7 +8,10 @@ #include ssize_t __c_kernel_getrandom(void *buffer, size_t len, unsigned int flags, void *opaque_state, - size_t opaque_len, const struct vdso_rng_data *vd) + size_t opaque_len, const struct vdso_data *vd, + const struct vdso_rng_data *vrd) { - return __cvdso_getrandom_data(vd, buffer, len, flags, opaque_state, opaque_len); + if (IS_ENABLED(CONFIG_TIME_NS) && vd->clock_mode == VDSO_CLOCKMODE_TIMENS) + vrd = (void *)vrd + (1UL << CONFIG_PAGE_SHIFT); + return __cvdso_getrandom_data(vrd, buffer, len, flags, opaque_state, opaque_len); }