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>
This commit is contained in:
parent
e403d29581
commit
ed0483fa06
@ -172,7 +172,7 @@ static struct macvtap_queue *macvtap_get_queue(struct net_device *dev,
|
|||||||
{
|
{
|
||||||
struct macvlan_dev *vlan = netdev_priv(dev);
|
struct macvlan_dev *vlan = netdev_priv(dev);
|
||||||
struct macvtap_queue *tap = NULL;
|
struct macvtap_queue *tap = NULL;
|
||||||
int numvtaps = vlan->numvtaps;
|
int numvtaps = ACCESS_ONCE(vlan->numvtaps);
|
||||||
__u32 rxq;
|
__u32 rxq;
|
||||||
|
|
||||||
if (!numvtaps)
|
if (!numvtaps)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user