On Tue, 2017-11-28 at 02:23 -0800, Francesco Ruggeri wrote:
On Mon, Nov 27, 2017 at 8:00 PM, Eric Dumazet <eric.dumazet@gmail.com
quoted
wrote:
From: Eric Dumazet <edumazet@google.com>
...
quoted
+++ b/net/packet/af_packet.c
@@ -336,7 +336,7 @@ static void register_prot_hook(struct sock *sk)
{
struct packet_sock *po = pkt_sk(sk);
- if (!po->running) {
+ if (!po->running && !po->frozen) {
Would it make sense to move the check for po->frozen to
packet_notifier(NETDEV_UP)?
As far as I can tell that is the only case today that can cause this
race condition, and if new cases come up in the future an error code
may be required rather than silently turning register_prot_hook()
into
a noop.
Otherwise it looks fine to me.
Whatever works for me is fine, I have no strong opinion on this.
Note that frozen is only set in the case we know that
register_prot_hook() is going to be called by us.