[PATCH] pcmcia Oopses fixes
Fix some NULL dereferences in the pcmcia code when using old userland tools. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Acked-by: Dominik Brodowski <linux@dominikbrodowski.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
9458513660
commit
73d5858809
1 changed files with 16 additions and 7 deletions
|
@ -426,7 +426,7 @@ static int ds_open(struct inode *inode, struct file *file)
|
|||
|
||||
if (!warning_printed) {
|
||||
printk(KERN_INFO "pcmcia: Detected deprecated PCMCIA ioctl "
|
||||
"usage.\n");
|
||||
"usage from process: %s.\n", current->comm);
|
||||
printk(KERN_INFO "pcmcia: This interface will soon be removed from "
|
||||
"the kernel; please expect breakage unless you upgrade "
|
||||
"to new tools.\n");
|
||||
|
@ -601,8 +601,12 @@ static int ds_ioctl(struct inode * inode, struct file * file,
|
|||
ret = CS_BAD_ARGS;
|
||||
else {
|
||||
struct pcmcia_device *p_dev = get_pcmcia_device(s, buf->config.Function);
|
||||
ret = pccard_get_configuration_info(s, p_dev, &buf->config);
|
||||
pcmcia_put_dev(p_dev);
|
||||
if (p_dev == NULL)
|
||||
ret = CS_BAD_ARGS;
|
||||
else {
|
||||
ret = pccard_get_configuration_info(s, p_dev, &buf->config);
|
||||
pcmcia_put_dev(p_dev);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DS_GET_FIRST_TUPLE:
|
||||
|
@ -632,8 +636,12 @@ static int ds_ioctl(struct inode * inode, struct file * file,
|
|||
ret = CS_BAD_ARGS;
|
||||
else {
|
||||
struct pcmcia_device *p_dev = get_pcmcia_device(s, buf->status.Function);
|
||||
ret = pccard_get_status(s, p_dev, &buf->status);
|
||||
pcmcia_put_dev(p_dev);
|
||||
if (p_dev == NULL)
|
||||
ret = CS_BAD_ARGS;
|
||||
else {
|
||||
ret = pccard_get_status(s, p_dev, &buf->status);
|
||||
pcmcia_put_dev(p_dev);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DS_VALIDATE_CIS:
|
||||
|
@ -665,9 +673,10 @@ static int ds_ioctl(struct inode * inode, struct file * file,
|
|||
if (!(buf->conf_reg.Function &&
|
||||
(buf->conf_reg.Function >= s->functions))) {
|
||||
struct pcmcia_device *p_dev = get_pcmcia_device(s, buf->conf_reg.Function);
|
||||
if (p_dev)
|
||||
if (p_dev) {
|
||||
ret = pcmcia_access_configuration_register(p_dev, &buf->conf_reg);
|
||||
pcmcia_put_dev(p_dev);
|
||||
pcmcia_put_dev(p_dev);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DS_GET_FIRST_REGION:
|
||||
|
|
Loading…
Reference in a new issue