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:
Родитель
e403d29581
Коммит
ed0483fa06
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче