Commit 7dd692fc authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] calculate NGROUPS_PER_BLOCK from PAGE_SIZE

From: Greg Edwards <edwardsg@sgi.com>

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.
parent ee4c48c0
...@@ -352,7 +352,7 @@ struct io_context; /* See blkdev.h */ ...@@ -352,7 +352,7 @@ struct io_context; /* See blkdev.h */
void exit_io_context(void); void exit_io_context(void);
#define NGROUPS_SMALL 32 #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 { struct group_info {
int ngroups; int ngroups;
atomic_t usage; atomic_t usage;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment