Commit f2455eb1 authored by Eugene Teo's avatar Eugene Teo Committed by David S. Miller

wan: Missing capability checks in sbni_ioctl()

There are missing capability checks in the following code:

1300 static int
1301 sbni_ioctl( struct net_device  *dev,  struct ifreq  *ifr,  int  cmd)
1302 {
[...]
1319     case  SIOCDEVRESINSTATS :
1320         if( current->euid != 0 )    /* root only */
1321             return  -EPERM;
[...]
1336     case  SIOCDEVSHWSTATE :
1337         if( current->euid != 0 )    /* root only */
1338             return  -EPERM;
[...]
1357     case  SIOCDEVENSLAVE :
1358         if( current->euid != 0 )    /* root only */
1359             return  -EPERM;
[...]
1372     case  SIOCDEVEMANSIPATE :
1373         if( current->euid != 0 )    /* root only */
1374             return  -EPERM;

Here's my proposed fix:

Missing capability checks.
Signed-off-by: default avatarEugene Teo <eugeneteo@kernel.sg>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6c36810a
...@@ -1317,7 +1317,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd ) ...@@ -1317,7 +1317,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
break; break;
case SIOCDEVRESINSTATS : case SIOCDEVRESINSTATS :
if( current->euid != 0 ) /* root only */ if (!capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
memset( &nl->in_stats, 0, sizeof(struct sbni_in_stats) ); memset( &nl->in_stats, 0, sizeof(struct sbni_in_stats) );
break; break;
...@@ -1334,7 +1334,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd ) ...@@ -1334,7 +1334,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
break; break;
case SIOCDEVSHWSTATE : case SIOCDEVSHWSTATE :
if( current->euid != 0 ) /* root only */ if (!capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
spin_lock( &nl->lock ); spin_lock( &nl->lock );
...@@ -1355,7 +1355,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd ) ...@@ -1355,7 +1355,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
#ifdef CONFIG_SBNI_MULTILINE #ifdef CONFIG_SBNI_MULTILINE
case SIOCDEVENSLAVE : case SIOCDEVENSLAVE :
if( current->euid != 0 ) /* root only */ if (!capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
if (copy_from_user( slave_name, ifr->ifr_data, sizeof slave_name )) if (copy_from_user( slave_name, ifr->ifr_data, sizeof slave_name ))
...@@ -1370,7 +1370,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd ) ...@@ -1370,7 +1370,7 @@ sbni_ioctl( struct net_device *dev, struct ifreq *ifr, int cmd )
return enslave( dev, slave_dev ); return enslave( dev, slave_dev );
case SIOCDEVEMANSIPATE : case SIOCDEVEMANSIPATE :
if( current->euid != 0 ) /* root only */ if (!capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
return emancipate( dev ); return emancipate( dev );
......
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