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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A57A9CA5FD4 for ; Fri, 2 Oct 2026 01:14:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=umsTgaE08zTrTFSFuT25CdVVgEuO/L8wrMOHpmp6xiw=; b=qy6U2f4FnVzCUp ApClr8SBhmqia16zo01UvXP7FTmqCJJq/7P6dT/GmXxgu//nM5EvsOFhJiaEtK5ggbmlQ2rycCNW4 Yx7RbFgQ+Xf/wlJhgufTGyy+kFxijGNOjxqv+B8nyQKfi+8EkTtTXfn5wIgIUSJbBugXw+gLzJjVJ OGmMvrgpufCwIZcSnQFGXHZcwjl2r2Vh9KUGpBBUV90W/BR5l9jXFDvOEKZ9F2T5yRFjdF4VQXiC0 /yt7MhxoYdLocEMLvCPrtdEozDXTaLkLuTcCy2ZElaSkrJuFqeiRzV7kT9l5DXDGtNJ4TpvIN6xLs 6FrNT2PYnLngvGmzdHUw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xCRqd-0000000ASnP-0638; Fri, 02 Oct 2026 01:14:03 +0000 Received: from out-227.mta1.migadu.com ([95.215.58.227] helo=mta1.migadu.com) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xCRqZ-0000000ASmc-1yyQ for linux-riscv@lists.infradead.org; Fri, 02 Oct 2026 01:14:02 +0000 X-Envelope-To: linux-riscv@lists.infradead.org DKIM-Signature: a=rsa-sha256; bh=NWX2xZSeNthE4d+FVcGdGWkc32k8tGi3zDx/87hg2j4=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1790903636; v=1; x=1791508436; b=p+a8rVr81NcJJcfxxPvcAE5oHHNJXWPDJiJJHG6aDo0cgZ3g/hqhJvST6DeXPDrKKNfK73Nd mizzwlztS/s+4+YQw80HMi3LAIX6g88tdJkPAf0aLYTbL2NmTFyZ0WQ/eW5Vkf6EHzbnWjk7w4S InxLzehMTgIIP+r16eOg/d3U= X-Envelope-To: linux-riscv@lists.infradead.org Received: by smtp.migadu.com with ESMTPS id 06414f6154828934; Fri, 02 Oct 2026 01:13:56 +0000 X-Mizu-Trace-ID: 06414f6154828934 X-Migadu-Flow: FLOW_OUT Message-ID: <5382c8744bac2a1d17fd96f76aa6a5245cf8a94e.camel@linux.dev> Subject: Re: [PATCH bpf 1/1] bpf, riscv: Fix stack arguments of struct_ops trampolines From: KaFai Wan To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Eduard Zingerman , Kumar Kartikeya Dwivedi , Martin KaFai Lau , Song Liu , Yonghong Song , Jiri Olsa , Emil Tsalapatis , Ihor Solodrai , =?ISO-8859-1?Q?Bj=F6rn_T=F6pel?= , Pu Lehui , Puranjay Mohan , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , bpf@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Date: Fri, 02 Oct 2026 09:13:45 +0800 In-Reply-To: <20261001154038.2265210-1-kafai.wan@linux.dev> References: <20261001154038.2265210-1-kafai.wan@linux.dev> User-Agent: Evolution 3.52.3-0ubuntu1.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261001_181400_506799_FACBB7B1 X-CRM114-Status: GOOD ( 17.30 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVGh1LCAyMDI2LTEwLTAxIGF0IDIzOjQwICswODAwLCBLYUZhaSBXYW4gd3JvdGU6CgpJIHJh biB0aGUgdGVzdHMgeWVzdGVyZGF5IGFuZCBkaWRu4oCZdCBub3RpY2UgdGhhdCBQdSBMZWh1aSBo YWQgYWxyZWFkeSBzZW50IHRoZSBzYW1lIHBhdGNoLiBQbGVhc2UKaWdub3JlIHRoaXMuIFNvcnJ5 IGZvciB0aGUgbm9pc2UuCgo+IFdoZW4gYSBzdHJ1Y3Rfb3BzIHRyYW1wb2xpbmUgdGFrZXMgbW9y ZSB0aGFuIDggYXJndW1lbnRzICh1cCB0byAxMiksIHRoZQo+IDl0aCBhbmQgYmV5b25kIGFyZSBw YXNzZWQgb24gdGhlIHN0YWNrLiBzdG9yZV9hcmdzKCkgY29waWVzIHRoZW0gaW50byB0aGUKPiB0 cmFtcG9saW5lIGZyYW1lIHVzaW5nIGEgaGFyZC1jb2RlZCBGUCArIDE2IGJhc2U6Cj4gCj4gCWVt aXRfbGQoUlZfUkVHX1QxLCAxNiArIChpIC0gUlZfTUFYX1JFR19BUkdTKSAqIDgsIFJWX1JFR19G UCwgY3R4KTsKPiAKPiBUaGF0IG9mZnNldCBvbmx5IGhvbGRzIGZvciBmZW50cnkgdHJhbXBvbGlu ZXMsIHdoZXJlIHRoZSB0cmFjZWQgZnVuY3Rpb24ncwo+IFQwL0ZQIGFyZSBzYXZlZCBhdCBGUCAt IDgvRlAgLSAxNiBhbmQgaXRzIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBhdCBGUCArIDE2Lgo+IEEg c3RydWN0X29wcyB0cmFtcG9saW5lIGlzIGNhbGxlZCBkaXJlY3RseSwgc28gaXRzIHN0YWNrIGFy Z3VtZW50cyBzdGFydCBhdAo+IEZQICsgMCBhbmQgc3RvcmVfYXJncygpIHJlYWRzIHRoZSB3cm9u ZyB3b3Jkcy4gQlBGIHByb2dyYW1zIHRoZW4gc2VlIGdhcmJhZ2UKPiBmb3IgYXJnOSBhbmQgYmV5 b25kLCB3aGljaCBmYWlscyB0aGUgc2VsZnRlc3Q6Cj4gCj4gwqAgc3RydWN0X29wc19tdWx0aV9h cmdzL3Rlc3RfdHJhbXBvbGluZV9zdGFja19hcmdzOkZBSUwKPiAKPiBQYXNzIHRoZSBzdGFjayBh cmd1bWVudCBiYXNlIG9mZnNldCB0byBzdG9yZV9hcmdzKCk6IDAgZm9yIHN0cnVjdF9vcHMKPiB0 cmFtcG9saW5lcywgMTYgb3RoZXJ3aXNlLgo+IAo+IEZpeGVzOiA2ODAxYjBhZWY3OWQgKCJyaXNj diwgYnBmOiBBZGQgMTItYXJndW1lbnQgc3VwcG9ydCBmb3IgUlY2NCBicGYgdHJhbXBvbGluZSIp Cj4gU2lnbmVkLW9mZi1ieTogS2FGYWkgV2FuIDxrYWZhaS53YW5AbGludXguZGV2Pgo+IC0tLQo+ IMKgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyB8IDggKysrKy0tLS0KPiDCoDEgZmls ZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZf aml0X2NvbXA2NC5jCj4gaW5kZXggMDFmZTY2Nzc0ZjAyLi40YWU2Njc0ZjU4ZWQgMTAwNjQ0Cj4g LS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwo+ICsrKyBiL2FyY2gvcmlzY3Yv bmV0L2JwZl9qaXRfY29tcDY0LmMKPiBAQCAtODc1LDcgKzg3NSw3IEBAIGludCBicGZfYXJjaF90 ZXh0X3Bva2Uodm9pZCAqaXAsIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG9sZF90LAo+IMKgCXJl dHVybiByZXQ7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIHZvaWQgc3RvcmVfYXJncyhpbnQgbnJfYXJn X3Nsb3RzLCBpbnQgYXJnc19vZmYsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQo+ICtzdGF0 aWMgdm9pZCBzdG9yZV9hcmdzKGludCBucl9hcmdfc2xvdHMsIGludCBhcmdzX29mZiwgaW50IHN0 YWNrX2Jhc2UsIHN0cnVjdCBydl9qaXRfY29udGV4dAo+ICpjdHgpCj4gwqB7Cj4gwqAJaW50IGk7 Cj4gwqAKPiBAQCAtODgzLDggKzg4Myw3IEBAIHN0YXRpYyB2b2lkIHN0b3JlX2FyZ3MoaW50IG5y X2FyZ19zbG90cywgaW50IGFyZ3Nfb2ZmLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQKPiAqY3QKPiDC oAkJaWYgKGkgPCBSVl9NQVhfUkVHX0FSR1MpIHsKPiDCoAkJCWVtaXRfc2QoUlZfUkVHX0ZQLCAt YXJnc19vZmYsIFJWX1JFR19BMCArIGksIGN0eCk7Cj4gwqAJCX0gZWxzZSB7Cj4gLQkJCS8qIHNr aXAgc2xvdHMgZm9yIFQwIGFuZCBGUCBvZiB0cmFjZWQgZnVuY3Rpb24gKi8KPiAtCQkJZW1pdF9s ZChSVl9SRUdfVDEsIDE2ICsgKGkgLSBSVl9NQVhfUkVHX0FSR1MpICogOCwgUlZfUkVHX0ZQLCBj dHgpOwo+ICsJCQllbWl0X2xkKFJWX1JFR19UMSwgc3RhY2tfYmFzZSArIChpIC0gUlZfTUFYX1JF R19BUkdTKSAqIDgsIFJWX1JFR19GUCwKPiBjdHgpOwo+IMKgCQkJZW1pdF9zZChSVl9SRUdfRlAs IC1hcmdzX29mZiwgUlZfUkVHX1QxLCBjdHgpOwo+IMKgCQl9Cj4gwqAJCWFyZ3Nfb2ZmIC09IDg7 Cj4gQEAgLTExNzksNyArMTE3OCw4IEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3Ry YW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCj4gwqAJZnVuY19tZXRhID0gbnJf YXJnX3Nsb3RzOwo+IMKgCWVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19t ZXRhX29mZiwgZnVuY19tZXRhLCBjdHgpOwo+IMKgCj4gLQlzdG9yZV9hcmdzKG5yX2FyZ19zbG90 cywgYXJnc19vZmYsIGN0eCk7Cj4gKwkvKiBza2lwIHNsb3RzIGZvciBUMCBhbmQgRlAgb2YgdHJh Y2VkIGZ1bmN0aW9uICovCj4gKwlzdG9yZV9hcmdzKG5yX2FyZ19zbG90cywgYXJnc19vZmYsIGlz X3N0cnVjdF9vcHMgPyAwIDogMTYsIGN0eCk7Cj4gwqAKPiDCoAlpZiAoYnBmX2ZzZXNzaW9uX2Nu dCh0bm9kZXMpKSB7Cj4gwqAJCS8qIGNsZWFyIGFsbCBzZXNzaW9uIGNvb2tpZXMnIHZhbHVlICov CgotLSAKVGhhbmtzLApLYUZhaQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mta0.migadu.com (out-218.mta0.migadu.com [91.218.175.218]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 388962773D for ; Fri, 2 Oct 2026 01:14:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.218 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790903651; cv=none; b=InDP9J0e4ewdKmLZXgGD6/Dg7i83Mn+ar0t9O1U1S+ShAbMMHrlQ21zkoKR3mEdVHdyZz01NOR2cnRWMmaukVdi66N7Qub6fkASzrZiQQNff83MKd1M13Zh2ONWLYCsnnT0osnbydnPHcKV7AfKBeiX1/qdJKNNpk2+5NLk+Rzc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790903651; c=relaxed/simple; bh=NWX2xZSeNthE4d+FVcGdGWkc32k8tGi3zDx/87hg2j4=; h=Message-ID:Subject:From:To:Date:In-Reply-To:References: Content-Type:MIME-Version; b=ti4JO7p/ZLy+iv5wL07JMAhow0s47F0tD+0uPQBCMIphwd4ZF3aDxemskWIzEp6ofeNp3FZPTKyhgs1zNUi6MvTd/0sfCZ2ovIVEHrxJxqVZULNRaSt6Z67xq7R4HkU6KFNUUSYppXIpzV7fQB00/PgJPlfaobwlsnNKf+ESWqA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=m3Ycw7ph; arc=none smtp.client-ip=91.218.175.218 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="m3Ycw7ph" X-Envelope-To: bpf@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=NWX2xZSeNthE4d+FVcGdGWkc32k8tGi3zDx/87hg2j4=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1790903646; v=1; x=1791508446; b=m3Ycw7phD/YQN32KXiDqeVhT6EC1vI8MwMtXR9o0IUOcyNdIW7THhnu1lsPs8cQVskZ/Rtox 4A+z7EnhwfVaIn+rU9jWMZycWFqMyO97BuMomGLt7WFAg/a6DBGbCK26aJn47+sk68FDFWHKopT m8OYLdHrtBI6ee6HukXj5omY= X-Envelope-To: bpf@vger.kernel.org Received: by smtp.migadu.com with ESMTPS id 06414f6154828934; Fri, 02 Oct 2026 01:13:56 +0000 X-Mizu-Trace-ID: 06414f6154828934 X-Migadu-Flow: FLOW_OUT Message-ID: <5382c8744bac2a1d17fd96f76aa6a5245cf8a94e.camel@linux.dev> Subject: Re: [PATCH bpf 1/1] bpf, riscv: Fix stack arguments of struct_ops trampolines From: KaFai Wan To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Eduard Zingerman , Kumar Kartikeya Dwivedi , Martin KaFai Lau , Song Liu , Yonghong Song , Jiri Olsa , Emil Tsalapatis , Ihor Solodrai , =?ISO-8859-1?Q?Bj=F6rn_T=F6pel?= , Pu Lehui , Puranjay Mohan , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , bpf@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Date: Fri, 02 Oct 2026 09:13:45 +0800 In-Reply-To: <20261001154038.2265210-1-kafai.wan@linux.dev> References: <20261001154038.2265210-1-kafai.wan@linux.dev> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.52.3-0ubuntu1.1 Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 On Thu, 2026-10-01 at 23:40 +0800, KaFai Wan wrote: I ran the tests yesterday and didn=E2=80=99t notice that Pu Lehui had alrea= dy sent the same patch. Please ignore this. Sorry for the noise. > When a struct_ops trampoline takes more than 8 arguments (up to 12), the > 9th and beyond are passed on the stack. store_args() copies them into the > trampoline frame using a hard-coded FP + 16 base: >=20 > emit_ld(RV_REG_T1, 16 + (i - RV_MAX_REG_ARGS) * 8, RV_REG_FP, ctx); >=20 > That offset only holds for fentry trampolines, where the traced function'= s > T0/FP are saved at FP - 8/FP - 16 and its stack arguments start at FP + 1= 6. > A struct_ops trampoline is called directly, so its stack arguments start = at > FP + 0 and store_args() reads the wrong words. BPF programs then see garb= age > for arg9 and beyond, which fails the selftest: >=20 > =C2=A0 struct_ops_multi_args/test_trampoline_stack_args:FAIL >=20 > Pass the stack argument base offset to store_args(): 0 for struct_ops > trampolines, 16 otherwise. >=20 > Fixes: 6801b0aef79d ("riscv, bpf: Add 12-argument support for RV64 bpf tr= ampoline") > Signed-off-by: KaFai Wan > --- > =C2=A0arch/riscv/net/bpf_jit_comp64.c | 8 ++++---- > =C2=A01 file changed, 4 insertions(+), 4 deletions(-) >=20 > diff --git a/arch/riscv/net/bpf_jit_comp64.c b/arch/riscv/net/bpf_jit_com= p64.c > index 01fe66774f02..4ae6674f58ed 100644 > --- a/arch/riscv/net/bpf_jit_comp64.c > +++ b/arch/riscv/net/bpf_jit_comp64.c > @@ -875,7 +875,7 @@ int bpf_arch_text_poke(void *ip, enum bpf_text_poke_t= ype old_t, > =C2=A0 return ret; > =C2=A0} > =C2=A0 > -static void store_args(int nr_arg_slots, int args_off, struct rv_jit_con= text *ctx) > +static void store_args(int nr_arg_slots, int args_off, int stack_base, s= truct rv_jit_context > *ctx) > =C2=A0{ > =C2=A0 int i; > =C2=A0 > @@ -883,8 +883,7 @@ static void store_args(int nr_arg_slots, int args_off= , struct rv_jit_context > *ct > =C2=A0 if (i < RV_MAX_REG_ARGS) { > =C2=A0 emit_sd(RV_REG_FP, -args_off, RV_REG_A0 + i, ctx); > =C2=A0 } else { > - /* skip slots for T0 and FP of traced function */ > - emit_ld(RV_REG_T1, 16 + (i - RV_MAX_REG_ARGS) * 8, RV_REG_FP, ctx); > + emit_ld(RV_REG_T1, stack_base + (i - RV_MAX_REG_ARGS) * 8, RV_REG_FP, > ctx); > =C2=A0 emit_sd(RV_REG_FP, -args_off, RV_REG_T1, ctx); > =C2=A0 } > =C2=A0 args_off -=3D 8; > @@ -1179,7 +1178,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, > =C2=A0 func_meta =3D nr_arg_slots; > =C2=A0 emit_store_stack_imm64(RV_REG_T1, -func_meta_off, func_meta, ctx); > =C2=A0 > - store_args(nr_arg_slots, args_off, ctx); > + /* skip slots for T0 and FP of traced function */ > + store_args(nr_arg_slots, args_off, is_struct_ops ? 0 : 16, ctx); > =C2=A0 > =C2=A0 if (bpf_fsession_cnt(tnodes)) { > =C2=A0 /* clear all session cookies' value */ --=20 Thanks, KaFai