Add missing -EFAULT for sysctl
PATCH 1/1 Add missing -EFAULT for sysctl
Hi Linus, Andrew,
Kernel 2.6 lacks two -EFAULT returns in get_user() in kernel/sysctl.c.
It's already fixed in 2.4 9 months ago, but I forgot to send it for 2.6.
It's basically this one:
http://linux.bkbits.net:8080/linux-2.4/diffs/kernel/[email protected]?nav=index.html|
src/|src/kernel|hist/kernel/sysctl.c
Please apply.
ciao, Marc
kernel/sysctl.c +8 -6
@@ -1107,7 +1107,8 @@ int do_sysctl_strategy (ctl_table *table* zero, proceed with automatic r/w */ if (table->data && table->maxlen) {if (oldval && oldlenp) { -get_user (len, oldlenp); +if (get_user (len, oldlenp)) +return -EFAULT ;if (len) {if (len > table->maxlen) len = table->maxlen;
@@ -1406,7 +1407,7 @@ int proc_dostring(ctl_table *table, int len =0 ; p = buffer;while (len < *lenp) { -if (get_user (c, p++)) +if (get_user (c, p++))return -EFAULT ;if (c ==0 || c =='\n' )break ;
@@ -1573,7 +1574,7 @@ static int do_proc_dointvec(ctl_table *t p = (char *) buffer;while (left) {char c; -if (get_user (c, p++)) +if (get_user (c, p++))return -EFAULT ;if (!isspace (c))break ;
@@ -1808,7 +1809,7 @@ static int do_proc_doulongvec_minmax(ctl p = (char *) buffer;while (left) {char c; -if (get_user (c, p++)) +if (get_user (c, p++))return -EFAULT ;if (!isspace (c))break ;
@@ -2033,7 +2034,7 @@ int sysctl_string(ctl_table *table, intreturn -ENOTDIR ;if (oldval && oldlenp) { -if (get_user (len, oldlenp)) +if (get_user (len, oldlenp))return -EFAULT ;if (len) { l =strlen (table->data);
@@ -2090,7 +2091,8 @@ int sysctl_intvec(ctl_table *table, intfor (i =0 ; i < length; i++) {int value; -get_user (value, vec + i); +if (get_user (value, vec + i)) +return -EFAULT ;if (min && value < min[i])return -EINVAL ;if (max && value > max[i])