Re: [Patch 0/2] powerpc: avoid userspace poking to legacy ioports
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2008-02-13 20:43:34
Also in:
lkml
On Wed, 2008-02-13 at 18:35 +0100, Christian Krafft wrote:
sensors_detect crashes kernel on PowerPC, as it pokes directly to memory. This patch adds a check_legacy_ioports to read_port and write_port. It will now return ENXIO, instead of oopsing. Signed-off-by: Christian Krafft <redacted>
The problem is that this prevents using /proc/ioports to access PCI IO space, which might be useful. I hate that sensors_detect.. or for that matter any other userland code that pokes random ports like that. It should die. Ben.
quoted hunk ↗ jump to hunk
Index: linux.git/drivers/char/mem.c ===================================================================--- linux.git.orig/drivers/char/mem.c +++ linux.git/drivers/char/mem.c@@ -566,8 +566,13 @@ static ssize_t read_port(struct file * f char __user *tmp = buf; if (!access_ok(VERIFY_WRITE, buf, count)) - return -EFAULT; + return -EFAULT; + while (count-- > 0 && i < 65536) { +#ifdef CONFIG_PPC_MERGE + if (check_legacy_ioport(i)) + return -ENXIO; +#endif if (__put_user(inb(i),tmp) < 0) return -EFAULT; i++;@@ -585,6 +590,7 @@ static ssize_t write_port(struct file * if (!access_ok(VERIFY_READ,buf,count)) return -EFAULT; + while (count-- > 0 && i < 65536) { char c; if (__get_user(c, tmp)) {@@ -592,6 +598,10 @@ static ssize_t write_port(struct file * break; return -EFAULT; } +#ifdef CONFIG_PPC_MERGE + if (check_legacy_ioport(i)) + return -ENXIO; +#endif outb(c,i); i++; tmp++;_______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev