diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 89d1a0d5d797..6d87f2182136 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2279,6 +2279,32 @@ int dev_ioctl(unsigned int cmd, void *arg) * These ioctl calls: * - require superuser power. * - require strict serialization. + * - return a value + */ + + case SIOCETHTOOL: + case SIOCGMIIPHY: + case SIOCGMIIREG: + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + dev_load(ifr.ifr_name); + dev_probe_lock(); + rtnl_lock(); + ret = dev_ifsioc(&ifr, cmd); + rtnl_unlock(); + dev_probe_unlock(); + if (!ret) { + if (colon) + *colon = ':'; + if (copy_to_user(arg, &ifr, sizeof(struct ifreq))) + return -EFAULT; + } + return ret; + + /* + * These ioctl calls: + * - require superuser power. + * - require strict serialization. * - do not return a value */ @@ -2293,9 +2319,6 @@ int dev_ioctl(unsigned int cmd, void *arg) case SIOCSIFHWBROADCAST: case SIOCSIFTXQLEN: case SIOCSIFNAME: - case SIOCETHTOOL: - case SIOCGMIIPHY: - case SIOCGMIIREG: case SIOCSMIIREG: if (!capable(CAP_NET_ADMIN)) return -EPERM; |
