On Tue, May 12, 2026 at 03:57:25PM +0800, Ren Wei wrote: > From: Haoze Xie > > br_pass_frame_up() rewrites skb->dev from the ingress port to the bridge > master before queueing bridge LOCAL_IN packets. NFQUEUE only holds > references on state.in/out and bridge physdevs, so a queued bridge > packet can retain a freed bridge master in skb->dev until reinjection. > > When the verdict is reinjected later, br_netif_receive_skb() re-enters > the receive path with skb->dev still pointing at the freed bridge master, > triggering a use-after-free. > > Store skb->dev in the queue entry for bridge builds, hold a reference on > it for the queue lifetime, and use the saved device when dropping queued > packets during NETDEV_DOWN handling. Next attempt: Maybe hold reference on skb->dev...