proc_misc.c bug

From: David Mosberger (davidm@napali.hpl.hp.com)
Date: Thu Apr 10 2003 - 17:02:34 EST


interrupts_open() can easily try to kmalloc() more memory than
supported by kmalloc. E.g., with 16KB page size and NR_CPUS==64, it
would try to allocate 147456 bytes.

The workaround below is to allocate 4KB per 8 CPUs. Not really a
solution, but the fundamental problem is that /proc/interrupts
shouldn't use a fixed buffer size in the first place. I suppose
another solution would be to use vmalloc() instead. It all feels like
bandaids though.

        --david

===== fs/proc/proc_misc.c 1.71 vs edited =====
--- 1.71/fs/proc/proc_misc.c Sat Mar 22 22:14:49 2003
+++ edited/fs/proc/proc_misc.c Thu Apr 10 14:35:16 2003
@@ -388,7 +388,7 @@
 extern int show_interrupts(struct seq_file *p, void *v);
 static int interrupts_open(struct inode *inode, struct file *file)
 {
- unsigned size = PAGE_SIZE * (1 + NR_CPUS / 8);
+ unsigned size = 4096 * (1 + NR_CPUS / 8);
         char *buf = kmalloc(size, GFP_KERNEL);
         struct seq_file *m;
         int res;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Apr 15 2003 - 22:00:21 EST