diff options
author | Jason Wang <jasowang@redhat.com> | 2013-06-05 23:54:33 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-07 23:49:08 -0700 |
commit | ed0483fa06e0efb86a82e382a00dbad02b62807c (patch) | |
tree | 2a0c920af1a2a7f748d81248cb027ca12f7f0bb5 /drivers | |
parent | e403d295817cf9f8be3110eb7ee1a03981287495 (diff) | |
download | blackbird-op-linux-ed0483fa06e0efb86a82e382a00dbad02b62807c.tar.gz blackbird-op-linux-ed0483fa06e0efb86a82e382a00dbad02b62807c.zip |
macvtap: fix a possible race between queue selection and changing queues
Complier may generate codes that re-read the vlan->numvtaps during
macvtap_get_queue(). This may lead a race if vlan->numvtaps were changed in the
same time and which 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 vlan->numvtaps were only read once.
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/macvtap.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index 68efb91a5633..5e485e307424 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c @@ -172,7 +172,7 @@ static struct macvtap_queue *macvtap_get_queue(struct net_device *dev, { struct macvlan_dev *vlan = netdev_priv(dev); struct macvtap_queue *tap = NULL; - int numvtaps = vlan->numvtaps; + int numvtaps = ACCESS_ONCE(vlan->numvtaps); __u32 rxq; if (!numvtaps) |