forked from Minki/linux
netback: don't store invalid vif pointer
When xenvif_alloc() fails, it returns a non-NULL error indicator. To avoid eventual races, we shouldn't store that into struct backend_info as readers of it only check for NULL. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ceaca9dc3c
commit
f15650b7f9
@ -404,6 +404,7 @@ static int backend_create_xenvif(struct backend_info *be)
|
||||
int err;
|
||||
long handle;
|
||||
struct xenbus_device *dev = be->dev;
|
||||
struct xenvif *vif;
|
||||
|
||||
if (be->vif != NULL)
|
||||
return 0;
|
||||
@ -414,13 +415,13 @@ static int backend_create_xenvif(struct backend_info *be)
|
||||
return (err < 0) ? err : -EINVAL;
|
||||
}
|
||||
|
||||
be->vif = xenvif_alloc(&dev->dev, dev->otherend_id, handle);
|
||||
if (IS_ERR(be->vif)) {
|
||||
err = PTR_ERR(be->vif);
|
||||
be->vif = NULL;
|
||||
vif = xenvif_alloc(&dev->dev, dev->otherend_id, handle);
|
||||
if (IS_ERR(vif)) {
|
||||
err = PTR_ERR(vif);
|
||||
xenbus_dev_fatal(dev, err, "creating interface");
|
||||
return err;
|
||||
}
|
||||
be->vif = vif;
|
||||
|
||||
kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user