tuntap: fix a possible race between queue selection and changing queues
Complier may generate codes that re-read the tun->numqueues during
tun_select_queue(). This may be a race if vlan->numqueues were changed in the
same time and can lead unexpected result (e.g. very huge value).
We need prevent the compiler from generating such codes by adding an
ACCESS_ONCE() to make sure tun->numqueues were only read once.
Bug were introduced by commit c8d68e6be1
(tuntap: multiqueue support).
Reported-by: Michael S. Tsirkin <mst@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4364d5f96e
commit
92bb73ea2c
1 changed files with 1 additions and 1 deletions
|
@ -352,7 +352,7 @@ static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb)
|
|||
u32 numqueues = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
numqueues = tun->numqueues;
|
||||
numqueues = ACCESS_ONCE(tun->numqueues);
|
||||
|
||||
txq = skb_get_rxhash(skb);
|
||||
if (txq) {
|
||||
|
|
Loading…
Reference in a new issue