[ETHTOOL]: let mortals use ethtool
There is no reason to not allow non-admin users to query network statistics and settings. [ Removed PHYS_ID and GREGS based upon feedback from Auke Kok and Michael Chan -DaveM] Acked-by: James Morris <jmorris@namei.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
32f50cdee6
commit
75f3123c11
|
@ -806,13 +806,6 @@ int dev_ethtool(struct ifreq *ifr)
|
||||||
int rc;
|
int rc;
|
||||||
unsigned long old_features;
|
unsigned long old_features;
|
||||||
|
|
||||||
/*
|
|
||||||
* XXX: This can be pushed down into the ethtool_* handlers that
|
|
||||||
* need it. Keep existing behaviour for the moment.
|
|
||||||
*/
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (!dev || !netif_device_present(dev))
|
if (!dev || !netif_device_present(dev))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
@ -822,6 +815,31 @@ int dev_ethtool(struct ifreq *ifr)
|
||||||
if (copy_from_user(ðcmd, useraddr, sizeof (ethcmd)))
|
if (copy_from_user(ðcmd, useraddr, sizeof (ethcmd)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
|
/* Allow some commands to be done by anyone */
|
||||||
|
switch(ethcmd) {
|
||||||
|
case ETHTOOL_GSET:
|
||||||
|
case ETHTOOL_GDRVINFO:
|
||||||
|
case ETHTOOL_GWOL:
|
||||||
|
case ETHTOOL_GMSGLVL:
|
||||||
|
case ETHTOOL_GLINK:
|
||||||
|
case ETHTOOL_GCOALESCE:
|
||||||
|
case ETHTOOL_GRINGPARAM:
|
||||||
|
case ETHTOOL_GPAUSEPARAM:
|
||||||
|
case ETHTOOL_GRXCSUM:
|
||||||
|
case ETHTOOL_GTXCSUM:
|
||||||
|
case ETHTOOL_GSG:
|
||||||
|
case ETHTOOL_GSTRINGS:
|
||||||
|
case ETHTOOL_GSTATS:
|
||||||
|
case ETHTOOL_GTSO:
|
||||||
|
case ETHTOOL_GPERMADDR:
|
||||||
|
case ETHTOOL_GUFO:
|
||||||
|
case ETHTOOL_GGSO:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (!capable(CAP_NET_ADMIN))
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
|
||||||
if(dev->ethtool_ops->begin)
|
if(dev->ethtool_ops->begin)
|
||||||
if ((rc = dev->ethtool_ops->begin(dev)) < 0)
|
if ((rc = dev->ethtool_ops->begin(dev)) < 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -947,6 +965,10 @@ int dev_ethtool(struct ifreq *ifr)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
ioctl:
|
ioctl:
|
||||||
|
/* Keep existing behaviour for the moment. */
|
||||||
|
if (!capable(CAP_NET_ADMIN))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
if (dev->do_ioctl)
|
if (dev->do_ioctl)
|
||||||
return dev->do_ioctl(dev, ifr, SIOCETHTOOL);
|
return dev->do_ioctl(dev, ifr, SIOCETHTOOL);
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
Loading…
Reference in New Issue