All of lore.kernel.org
 help / color / mirror / Atom feed
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>


  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.