On 24/04/2020 03:05, Stephen Hemminger wrote: > On Fri, 16 Nov 2018 18:50:01 +0200 > Nikolay Aleksandrov <nikolay@xxxxxxxxxxxxxxxxxxx> wrote: > >> Syzbot reported a use-after-free of the global vlan context on port vlan >> destruction. When I added per-port vlan stats I missed the fact that the >> global vlan context can be freed before the per-port vlan rcu callback. >> There're a few different ways to deal with this, I've chosen to add a >> new private flag that is set only when per-port stats are allocated so >> we can directly check it on destruction without dereferencing the global >> context at all. The new field in net_bridge_vlan uses a hole. >> >> v2: cosmetic change, move the check to br_process_vlan_info where the >> other checks are done >> v3: add change log in the patch, add private (in-kernel only) flags in a >> hole in net_bridge_vlan struct and use that instead of mixing >> user-space flags with private flags >> >> Fixes: 9163a0fc1f0c ("net: bridge: add support for per-port vlan stats") >> Reported-by: syzbot+04681da557a0e49a52e5@xxxxxxxxxxxxxxxxxxxxxxxxx >> Signed-off-by: Nikolay Aleksandrov <nikolay@xxxxxxxxxxxxxxxxxxx> > > Why not just use v->stats itself as the flag. > Since free of NULL is a nop it would be cleaner? > v->stats is *always* set while the vlan is published/visible, that's a guarantee I don't want to break because I'll have to add null checks in the fast-path. By the way this is a thread from 2018. :-) Cheers, Nik