Commit 75f3123c authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller

[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: default avatarJames Morris <jmorris@namei.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 32f50cde
...@@ -806,13 +806,6 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -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) ...@@ -822,6 +815,31 @@ int dev_ethtool(struct ifreq *ifr)
if (copy_from_user(&ethcmd, useraddr, sizeof (ethcmd))) if (copy_from_user(&ethcmd, 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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment