]> xenbits.xensource.com Git - libvirt.git/commitdiff
selinux: relabel tapfd in qemuPhysIfaceConnect
authorGuannan Ren <gren@redhat.com>
Fri, 19 Oct 2012 08:44:30 +0000 (16:44 +0800)
committerGuannan Ren <gren@redhat.com>
Fri, 19 Oct 2012 16:01:03 +0000 (00:01 +0800)
Relabeling tapfd right after the tap device is created.
qemuPhysIfaceConnect is common function called both for static
netdevs and for hotplug netdevs.

src/qemu/qemu_command.c

index 9096b3c6da72d4d35ecc1a01aeb276b302a22b41..0623c58a4c61804d80d5d94b2d4c04c35ca8f9bb 100644 (file)
@@ -170,12 +170,26 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
         vmop, driver->stateDir,
         virDomainNetGetActualBandwidth(net));
     if (rc >= 0) {
+        if (virSecurityManagerSetTapFDLabel(driver->securityManager,
+                                            def, rc) < 0)
+            goto error;
+
         virDomainAuditNetDevice(def, net, res_ifname, true);
         VIR_FREE(net->ifname);
         net->ifname = res_ifname;
     }
 
     return rc;
+
+error:
+    ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
+                     res_ifname, &net->mac,
+                     virDomainNetGetActualDirectDev(net),
+                     virDomainNetGetActualDirectMode(net),
+                     virDomainNetGetActualVirtPortProfile(net),
+                     driver->stateDir));
+    VIR_FREE(res_ifname);
+    return -1;
 }
 
 
@@ -5446,10 +5460,6 @@ qemuBuildCommandLine(virConnectPtr conn,
                 if (tapfd < 0)
                     goto error;
 
-                if (virSecurityManagerSetTapFDLabel(driver->securityManager,
-                                                    def, tapfd) < 0)
-                    goto error;
-
                 last_good_net = i;
                 virCommandTransferFD(cmd, tapfd);