From: Greg Edwards 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 struct. Patch below calculates NGROUPS_PER_BLOCK from PAGE_SIZE instead. --- 25-akpm/include/linux/sched.h | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN include/linux/sched.h~calculate-ngroups_per_block-from-page_size include/linux/sched.h --- 25/include/linux/sched.h~calculate-ngroups_per_block-from-page_size Tue May 11 17:20:03 2004 +++ 25-akpm/include/linux/sched.h Tue May 11 17:20:03 2004 @@ -363,7 +363,7 @@ struct io_context; /* See blkdev.h */ 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; _