Patch "packet: in packet_do_bind, test fanout with bind_lock held" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
packet: in packet_do_bind, test fanout with bind_lock held
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
packet-in-packet_do_bind-test-fanout-with-bind_lock-held.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Oct 19 14:05:19 CEST 2017
From: Willem de Bruijn <[email protected]>
Date: Tue, 26 Sep 2017 12:19:37 -0400
Subject: packet: in packet_do_bind, test fanout with bind_lock held
From: Willem de Bruijn <[email protected]>
[ Upstream commit 4971613c1639d8e5f102c4e797c3bf8f83a5a69e ]
Once a socket has po->fanout set, it remains a member of the group until it is destroyed. The prot_hook must be constant and identical across sockets in the group.
If fanout_add races with packet_do_bind between the test of po->fanout and taking the lock, the bind call may make type or dev inconsistent with that of the fanout group.
Hold po->bind_lock when testing po->fanout to avoid this race.
I had to introduce artificial delay (local_bh_enable) to actually observe the race.
--- net/packet/af_packet.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
net/packet/af_packet.c +5 -3
@@ -2944,13 +2944,15 @@ static int packet_do_bind(struct sock *sint ret =0 ;bool unlisted = false; -if (po->fanout) -return -EINVAL ; -lock_sock (sk);spin_lock (&po->bind_lock);rcu_read_lock (); +if (po->fanout) { + ret = -EINVAL ; + goto out_unlock; + } +if (name) { dev =dev_get_by_name_rcu (sock_net (sk), name);if (!dev) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/packet-in-packet_do_bind-test-fanout-with-bind_lock-held.patch queue-4.4/packet-only-test-po-has_vnet_hdr-once-in-packet_snd.patch queue-4.4/packet-hold-bind-lock-when-rebinding-to-fanout-hook.patch