Commit aad1aaf4 authored by Johannes Stezenbach's avatar Johannes Stezenbach Committed by Linus Torvalds

[PATCH] fix dvb-net Oops

emard<at>softhome!net discovered an embarrasing bug in dvb_net.c where
the NET_REMOVE_IF ioctl will cause an Oops when called with an invalid
interface number. 
Signed-off-by: default avatarJohannes Stezenbach <js@linuxtv.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent f0d63d81
......@@ -1201,13 +1201,14 @@ static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype)
}
static int dvb_net_remove_if(struct dvb_net *dvbnet, int num)
static int dvb_net_remove_if(struct dvb_net *dvbnet, unsigned int num)
{
struct net_device *net = dvbnet->device[num];
struct dvb_net_priv *priv = net->priv;
struct dvb_net_priv *priv;
if (!dvbnet->state[num])
return -EINVAL;
priv = net->priv;
if (priv->in_use)
return -EBUSY;
......@@ -1268,10 +1269,18 @@ static int dvb_net_do_ioctl(struct inode *inode, struct file *file,
break;
}
case NET_REMOVE_IF:
{
int ret;
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
if ((unsigned int) parg >= DVB_NET_DEVICES_MAX)
return -EINVAL;
ret = dvb_net_remove_if(dvbnet, (unsigned int) parg);
if (!ret)
module_put(dvbdev->adapter->module);
return dvb_net_remove_if(dvbnet, (int) (long) parg);
return ret;
}
/* binary compatiblity cruft */
case __NET_ADD_IF_OLD:
......
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