From: Simon Horman <horms@kernel.org>
To: Jamal Hadi Salim <jhs@mojatatu.com>
Cc: netdev@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net,
andrii@kernel.org, eddyz87@gmail.com, memxor@gmail.com,
martin.lau@linux.dev, song@kernel.org, yonghong.song@linux.dev,
jolsa@kernel.org, emil@etsalapatis.com, ihor.solodrai@linux.dev,
john.fastabend@gmail.com, sdf@fomichev.me, davem@davemloft.net,
edumazet@kernel.org, kuba@kernel.org, pabeni@redhat.com,
jiri@resnulli.us, bpf@vger.kernel.org, stable@vger.kernel.org,
sashiko-bot@kernel.org, victor@mojatatu.com
Subject: Re: [PATCH net v2 2/3] net/sched: cls_bpf: accept dev-bound programs on shared blocks
Date: Fri, 16 Oct 2026 19:23:07 +0100 [thread overview]
Message-ID: <20261016182307.GL363352@horms.kernel.org> (raw)
In-Reply-To: <QDISC-PYC7.v2.20261010165947-3@mojatatu.com>
On Sat, Oct 10, 2026 at 05:02:49PM -0400, Jamal Hadi Salim wrote:
> The issue:
> Follow-up to commit 120977e2c096 ("net/sched: cls_bpf: reject dev-bound
> programs bound to a different device"), which derived the target device
> from block->q:
>
> dev = block->q ? qdisc_dev(block->q) : NULL;
>
> tcf_block_create() leaves block->q NULL for shared blocks, so a
> device-bound program attached through a shared block is rejected with
> -EINVAL even when it is bound to a netdev that owns the block. The
> offload path (cls_bpf_offload_cmd()) never consults block->q and drives
> the per-device callbacks for shared blocks as before.
>
> The Fix:
> Accept the attach on a shared block when bpf_offload_dev_match() matches
> every netdev bound to the block, and reject an empty block. Every member
> must match because the offload path broadcasts the program to every
> callback registered on the block, so an any-member check would re-admit
> the wrong-device attach on a mixed block. Every dev-bound SCHED_CLS
> attach is skip_sw, which becomes err_stop and aborts the offload on the
> first failing callback, so the all-members rule is the offload path's own
> semantics.
>
> Iterate the public block->ports xarray (913b47d3424e, v6.8-rc1) rather
> than block->owner_list, which is private to cls_api.c. The shared-block
> rejection reports "Program is not bound to every device in the block",
> distinct from the non-shared message, because a member can exist without
> a registered callback (netdevsim registers its block callback
> ingress-only).
>
> Context note:
> This patch is not an independent fix: it re-exposes the shared-block
> replay path that commit 120977e2c096 ("net/sched: cls_bpf: reject
> dev-bound programs bound to a different device") had closed, so patch 1
> must be applied first, including in stable. A stable tree taking this
> patch alone would re-enable shared-block attaches on a kernel whose
> netdevsim callback is still unchecked.
>
> Conditions to recreate the bug:
> - CONFIG_NETDEVSIM=y, CONFIG_NET_CLS_BPF=y
> - load a dev-bound SCHED_CLS program for netdevsim device B
> (prog_ifindex=B), pin it in bpffs
> - tc qdisc add dev B ingress_block 22 clsact
> - tc filter add block 22 ingress bpf da object-pinned <pin> skip_sw
> Unfixed, the filter add fails with -EINVAL ("Program is bound to a
> different device"); fixed, it succeeds. Adding a second, independently
> backed netdevsim device to the same block makes the attach fail again.
>
> Fixes: 120977e2c096 ("net/sched: cls_bpf: reject dev-bound programs bound to a different device")
> Reported-by: Sashiko (nipa) <sashiko-bot@kernel.org>
> Link: https://lore.kernel.org/netdev/20260809094418.901607-1-jhs@mojatatu.com/
> Link: https://lore.kernel.org/netdev/QDISC-PYC7.v1.20261003103747@mojatatu.com/
> Cc: stable@vger.kernel.org
> Reviewed-by: Victor Nogueira <victor@mojatatu.com>
> Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
Reviewed-by: Simon Horman <horms@kernel.org>
next prev parent reply other threads:[~2026-10-16 18:23 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-10 21:02 [PATCH net v2 0/3] net/sched: cls_bpf: accept dev-bound programs on shared blocks Jamal Hadi Salim
2026-10-10 21:02 ` [PATCH net v2 1/3] netdevsim: reject cls_bpf programs bound to another device Jamal Hadi Salim
2026-10-11 21:03 ` netdev-bot+sashiko
2026-10-11 23:50 ` Jamal Hadi Salim
2026-10-16 18:22 ` Simon Horman
2026-10-10 21:02 ` [PATCH net v2 2/3] net/sched: cls_bpf: accept dev-bound programs on shared blocks Jamal Hadi Salim
2026-10-11 21:03 ` netdev-bot+sashiko
2026-10-11 23:51 ` Jamal Hadi Salim
2026-10-16 18:23 ` Simon Horman [this message]
2026-10-10 21:02 ` [PATCH net v2 3/3] selftests: net: exercise dev-bound cls_bpf " Jamal Hadi Salim
2026-10-11 21:03 ` netdev-bot+sashiko
2026-10-11 23:49 ` Jamal Hadi Salim
2026-10-11 23:50 ` Jamal Hadi Salim
2026-10-16 18:23 ` Simon Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261016182307.GL363352@horms.kernel.org \
--to=horms@kernel.org \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@kernel.org \
--cc=emil@etsalapatis.com \
--cc=ihor.solodrai@linux.dev \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kuba@kernel.org \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sashiko-bot@kernel.org \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=stable@vger.kernel.org \
--cc=victor@mojatatu.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox