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 /kernel/sysctl.c | |
parent | adbecb128cd2cc5d14b0ebef6d020ced0efd0ec6 (diff) | |
download | lwn-eceea0b3df05ed262ae32e0c6340cc7a3626632d.tar.gz lwn-eceea0b3df05ed262ae32e0c6340cc7a3626632d.zip |
[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 'kernel/sysctl.c')
-rw-r--r-- | kernel/sysctl.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index d7ffdc59816a..29116652dca8 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -81,6 +81,7 @@ extern int compat_log; extern int maps_protect; extern int sysctl_stat_interval; extern int latencytop_enabled; +extern int sysctl_nr_open_min, sysctl_nr_open_max; /* Constants used for minimum and maximum */ #if defined(CONFIG_DETECT_SOFTLOCKUP) || defined(CONFIG_HIGHMEM) @@ -1190,7 +1191,9 @@ static struct ctl_table fs_table[] = { .data = &sysctl_nr_open, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = &proc_dointvec, + .proc_handler = &proc_dointvec_minmax, + .extra1 = &sysctl_nr_open_min, + .extra2 = &sysctl_nr_open_max, }, { .ctl_name = FS_DENTRY, |