|
@@ -598,7 +598,11 @@ int net_init_bridge(const Netdev *netdev, const char *name,
|
|
}
|
|
}
|
|
|
|
|
|
qemu_set_nonblock(fd);
|
|
qemu_set_nonblock(fd);
|
|
- vnet_hdr = tap_probe_vnet_hdr(fd);
|
|
|
|
|
|
+ vnet_hdr = tap_probe_vnet_hdr(fd, errp);
|
|
|
|
+ if (vnet_hdr < 0) {
|
|
|
|
+ close(fd);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
s = net_tap_fd_init(peer, "bridge", name, fd, vnet_hdr);
|
|
s = net_tap_fd_init(peer, "bridge", name, fd, vnet_hdr);
|
|
|
|
|
|
snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s,br=%s", helper,
|
|
snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s,br=%s", helper,
|
|
@@ -810,7 +814,11 @@ int net_init_tap(const Netdev *netdev, const char *name,
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
- vnet_hdr = tap_probe_vnet_hdr(fd);
|
|
|
|
|
|
+ vnet_hdr = tap_probe_vnet_hdr(fd, errp);
|
|
|
|
+ if (vnet_hdr < 0) {
|
|
|
|
+ close(fd);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
|
|
net_init_tap_one(tap, peer, "tap", name, NULL,
|
|
net_init_tap_one(tap, peer, "tap", name, NULL,
|
|
script, downscript,
|
|
script, downscript,
|
|
@@ -862,8 +870,11 @@ int net_init_tap(const Netdev *netdev, const char *name,
|
|
}
|
|
}
|
|
|
|
|
|
if (i == 0) {
|
|
if (i == 0) {
|
|
- vnet_hdr = tap_probe_vnet_hdr(fd);
|
|
|
|
- } else if (vnet_hdr != tap_probe_vnet_hdr(fd)) {
|
|
|
|
|
|
+ vnet_hdr = tap_probe_vnet_hdr(fd, errp);
|
|
|
|
+ if (vnet_hdr < 0) {
|
|
|
|
+ goto free_fail;
|
|
|
|
+ }
|
|
|
|
+ } else if (vnet_hdr != tap_probe_vnet_hdr(fd, NULL)) {
|
|
error_setg(errp,
|
|
error_setg(errp,
|
|
"vnet_hdr not consistent across given tap fds");
|
|
"vnet_hdr not consistent across given tap fds");
|
|
ret = -1;
|
|
ret = -1;
|
|
@@ -908,7 +919,11 @@ free_fail:
|
|
}
|
|
}
|
|
|
|
|
|
qemu_set_nonblock(fd);
|
|
qemu_set_nonblock(fd);
|
|
- vnet_hdr = tap_probe_vnet_hdr(fd);
|
|
|
|
|
|
+ vnet_hdr = tap_probe_vnet_hdr(fd, errp);
|
|
|
|
+ if (vnet_hdr < 0) {
|
|
|
|
+ close(fd);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
|
|
net_init_tap_one(tap, peer, "bridge", name, ifname,
|
|
net_init_tap_one(tap, peer, "bridge", name, ifname,
|
|
script, downscript, vhostfdname,
|
|
script, downscript, vhostfdname,
|