mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
util: use AF_UNIX family (not AF_PACKET) for ioctl sockets
The exact family of the socket created for the fd used by ioctl(7) doesn't matter, it just needs to be a socket and not a file. But for some reason when macvtap support was added, it used AF_PACKET/SOCK_DGRAM sockets for its ioctls; we later used the same AF_PACKET/SOCK_DGRAM socket for new ioctls we added, and eventually modified the other pre-existing ioctl sockets (for creating/deleting bridges) to also use AF_PACKET/SOCK_DGRAM (that code originally used AF_UNIX/SOCK_STREAM). The problem with using AF_PACKET (intended for sending/receiving "raw" packets, i.e. packets that can be some protocol other than TCP or UDP) is that it requires root privileges. This meant that none of the ioctls in virnetdev.c or virnetdevip.c would work when running libvirtd unprivileged. This packet solves that problem by changing the family to AF_UNIX when creating the socket used for any ioctl().
This commit is contained in:
parent
df769041c2
commit
1c9a8746ef
@ -41,7 +41,7 @@
|
||||
#ifdef __linux__
|
||||
# include <linux/sockios.h>
|
||||
# include <linux/if_vlan.h>
|
||||
# define VIR_NETDEV_FAMILY AF_PACKET
|
||||
# define VIR_NETDEV_FAMILY AF_UNIX
|
||||
#elif defined(HAVE_STRUCT_IFREQ) && defined(AF_LOCAL)
|
||||
# define VIR_NETDEV_FAMILY AF_LOCAL
|
||||
#else
|
||||
@ -2589,9 +2589,6 @@ virNetDevGetFeatures(const char *ifname,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Ultimately uses AF_PACKET for socket which requires privileged
|
||||
* daemon support.
|
||||
*/
|
||||
if ((fd = virNetDevSetupControl(ifname, &ifr)) < 0)
|
||||
goto cleanup;
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
||||
#ifdef __linux__
|
||||
# include <linux/sockios.h>
|
||||
# include <linux/if_vlan.h>
|
||||
# define VIR_NETDEV_FAMILY AF_PACKET
|
||||
# define VIR_NETDEV_FAMILY AF_UNIX
|
||||
#elif defined(HAVE_STRUCT_IFREQ) && defined(AF_LOCAL)
|
||||
# define VIR_NETDEV_FAMILY AF_LOCAL
|
||||
#else
|
||||
|
Loading…
x
Reference in New Issue
Block a user