diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2008-05-10 10:08:32 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-05-16 17:22:52 -0400 |
commit | eceea0b3df05ed262ae32e0c6340cc7a3626632d (patch) | |
tree | 73e5e33acace9187d5729a9a8c8ff53c3d720d52 /fs | |
parent | adbecb128cd2cc5d14b0ebef6d020ced0efd0ec6 (diff) |
[PATCH] avoid multiplication overflows and signedness issues for max_fds
Limit sysctl_nr_open - we don't want ->max_fds to exceed MAX_INT and
we don't want size calculation for ->fd[] to overflow.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/file.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -26,6 +26,8 @@ struct fdtable_defer { | |||
26 | }; | 26 | }; |
27 | 27 | ||
28 | int sysctl_nr_open __read_mostly = 1024*1024; | 28 | int sysctl_nr_open __read_mostly = 1024*1024; |
29 | int sysctl_nr_open_min = BITS_PER_LONG; | ||
30 | int sysctl_nr_open_max = 1024 * 1024; /* raised later */ | ||
29 | 31 | ||
30 | /* | 32 | /* |
31 | * We use this list to defer free fdtables that have vmalloced | 33 | * We use this list to defer free fdtables that have vmalloced |
@@ -405,6 +407,8 @@ void __init files_defer_init(void) | |||
405 | int i; | 407 | int i; |
406 | for_each_possible_cpu(i) | 408 | for_each_possible_cpu(i) |
407 | fdtable_defer_list_init(i); | 409 | fdtable_defer_list_init(i); |
410 | sysctl_nr_open_max = min((size_t)INT_MAX, ~(size_t)0/sizeof(void *)) & | ||
411 | -BITS_PER_LONG; | ||
408 | } | 412 | } |
409 | 413 | ||
410 | struct files_struct init_files = { | 414 | struct files_struct init_files = { |