From: Greg Edwards
Date: Tue May 11 2004 - 12:51:21 EST

On ia64, EXEC_PAGESIZE (max page size) is 65536, but the default page
size is 16k. This results in NGROUPS_PER_BLOCK in include/linux/sched.h
being calculated incorrectly when the page size is anything other than
64k. For example, on a 16k page size kernel, a setgroups() call with a
gidsetsize of 65536 will end up walking over memory since only 1/4 of
the needed pages were allocated for the blocks[] array in the group_info

Patch below calculates NGROUPS_PER_BLOCK from PAGE_SIZE instead.


===== include/linux/sched.h 1.210 vs edited =====
--- 1.210/include/linux/sched.h Mon May 10 06:25:34 2004
+++ edited/include/linux/sched.h Tue May 11 11:45:29 2004
@@ -352,7 +352,7 @@
void exit_io_context(void);

#define NGROUPS_SMALL 32
-#define NGROUPS_PER_BLOCK ((int)(EXEC_PAGESIZE / sizeof(gid_t)))
+#define NGROUPS_PER_BLOCK ((int)(PAGE_SIZE / sizeof(gid_t)))
struct group_info {
int ngroups;
atomic_t usage;
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/