From: Anoob Soman <[email protected]>
Date: Wed, 15 Feb 2017 20:25:39 +0000
> Commit 6664498280cf ("packet: call fanout_release, while UNREGISTERING a
> netdev"), unfortunately, introduced the following issues.
...
> To fix the above problems, remove the call to fanout_release() under
> rcu_read_lock(). Instead, call __dev_remove_pack(&fanout->prot_hook) and
> netdev_run_todo will be happy that &dev->ptype_specific list is empty. In
> order
> to achieve this, I moved dev_{add,remove}_pack() out of fanout_{add,release}
> to
> __fanout_{link,unlink}. So, call to {,__}unregister_prot_hook() will make sure
> fanout->prot_hook is removed as well.
>
> Fixes: 6664498280cf ("packet: call fanout_release, while UNREGISTERING a
> netdev")
> Reported-by: Eric Dumazet <[email protected]>
> Signed-off-by: Anoob Soman <[email protected]>
> ---
> Changes in v3:
> - Removed extra variable from fanout_release(), per Eric's suggestion.
> Changes in v2:
> - Incorporated Eric's suggestion to do fanout_release_data() and kfree()
> after
> synchronize_net()
Applied and queued up for -stable, thanks.