From d0a3a1ff929e8e2d6a82a4e0e3cfb72bfa63c928 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Wed, 4 Nov 2015 10:26:16 -0500 Subject: [PATCH] virnetdev: Check for root in virNetDevGetFeatures Since the SIOCETHTOOL ioctl only works for privileged daemons, if called when not root, then virNetDevGetFeatures will VIR_DEBUG a message and return 0 as if the functions were not available for the architecture. This effectively returns an empty bitmap indicating no features available. Introduced by commit id 'c9027d8f4' Signed-off-by: John Ferlan --- src/util/virnetdev.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index fb367e7eae..0bc1a6f603 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -3239,7 +3239,8 @@ virNetDevGFeatureAvailable(const char *ifname, struct ethtool_gfeatures *cmd) * @ifname: name of the interface * @out: bitmap of the available virNetDevFeature feature bits * - * Returns 0 on success, -1 on failure. + * Returns 0 on success or if called from session mode, -1 on failure. + * If called from session mode, an empty bitmap is returned. */ int virNetDevGetFeatures(const char *ifname, @@ -3271,6 +3272,12 @@ virNetDevGetFeatures(const char *ifname, if (!(*out = virBitmapNew(VIR_NET_DEV_FEAT_LAST))) return -1; + /* Only fetch features if we're privileged, but no need to fail */ + if (geteuid() != 0) { + VIR_DEBUG("ETHTOOL feature bits not available in session mode"); + return 0; + } + for (i = 0; i < ARRAY_CARDINALITY(cmds); i++) { cmd.cmd = cmds[i].cmd; if (virNetDevFeatureAvailable(ifname, &cmd) == 1)