On Wed, Oct 24, 2018 at 4:16 AM Taehee Yoo <ap420...@gmail.com> wrote: > > The dev_map_notification() removes interface in devmap if > unregistering interface's ifindex is same. > But only checking ifindex is not enough because other netns can have > same ifindex. so that wrong interface selection could occurred. > Hence netdev pointer comparison code is added. > > v2: compare netdev pointer instead of using net_eq() (Daniel Borkmann) > v1: Initial patch > > Fixes: 2ddf71e23cc2 ("net: add notifier hooks for devmap bpf map") > Signed-off-by: Taehee Yoo <ap420...@gmail.com> Acked-by: Song Liu <songliubrav...@fb.com>
> --- > kernel/bpf/devmap.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c > index 141710b82a6c..191b79948424 100644 > --- a/kernel/bpf/devmap.c > +++ b/kernel/bpf/devmap.c > @@ -512,8 +512,7 @@ static int dev_map_notification(struct notifier_block > *notifier, > struct bpf_dtab_netdev *dev, *odev; > > dev = READ_ONCE(dtab->netdev_map[i]); > - if (!dev || > - dev->dev->ifindex != netdev->ifindex) > + if (!dev || netdev != dev->dev) > continue; > odev = cmpxchg(&dtab->netdev_map[i], dev, > NULL); > if (dev == odev) > -- > 2.17.1 >