mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 18:05:20 +00:00
fix crash when starting network
commit 27908453 introduces a regression, and it will cause libvirt crashed when starting network. The reason is that tapfd may be NULL, but we dereference it without checking whether it is NULL.
This commit is contained in:
parent
97656536e7
commit
7ab1c25cc5
@ -484,7 +484,8 @@ brAddTap(brControl *ctl,
|
||||
|
||||
errno = brCreateTap(ctl, ifname, vnet_hdr, tapfd);
|
||||
|
||||
if (*tapfd < 0 || errno)
|
||||
/* fd has been closed in brCreateTap() when it failed. */
|
||||
if (errno)
|
||||
goto error;
|
||||
|
||||
/* We need to set the interface MAC before adding it
|
||||
@ -494,22 +495,23 @@ brAddTap(brControl *ctl,
|
||||
* device before we set our static MAC.
|
||||
*/
|
||||
if ((errno = brSetInterfaceMac(ctl, *ifname, macaddr)))
|
||||
goto error;
|
||||
goto close_fd;
|
||||
/* We need to set the interface MTU before adding it
|
||||
* to the bridge, because the bridge will have its
|
||||
* MTU adjusted automatically when we add the new interface.
|
||||
*/
|
||||
if ((errno = brSetInterfaceMtu(ctl, bridge, *ifname)))
|
||||
goto error;
|
||||
goto close_fd;
|
||||
if ((errno = brAddInterface(ctl, bridge, *ifname)))
|
||||
goto error;
|
||||
goto close_fd;
|
||||
if (up && ((errno = brSetInterfaceUp(ctl, *ifname, 1))))
|
||||
goto error;
|
||||
goto close_fd;
|
||||
return 0;
|
||||
|
||||
error:
|
||||
VIR_FORCE_CLOSE(*tapfd);
|
||||
|
||||
close_fd:
|
||||
if (tapfd)
|
||||
VIR_FORCE_CLOSE(*tapfd);
|
||||
error:
|
||||
return errno;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user