neigh: prevent overflowing params in /proc/sys/net/ipv4/neigh/
Without this patch, the fields app_solicit, gc_thresh1, gc_thresh2, gc_thresh3, proxy_qlen, ucast_solicit, mcast_solicit could have assumed negative values when setting large numbers. Signed-off-by: Francesco Fusco <ffusco@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bd547dc68c
commit
3663cc75c7
|
@ -2791,6 +2791,7 @@ EXPORT_SYMBOL(neigh_app_ns);
|
|||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
static int zero;
|
||||
static int int_max = INT_MAX;
|
||||
static int unres_qlen_max = INT_MAX / SKB_TRUESIZE(ETH_FRAME_LEN);
|
||||
|
||||
static int proc_unres_qlen(ctl_table *ctl, int write, void __user *buffer,
|
||||
|
@ -2844,19 +2845,25 @@ static struct neigh_sysctl_table {
|
|||
.procname = "mcast_solicit",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &int_max,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
},
|
||||
[NEIGH_VAR_UCAST_PROBE] = {
|
||||
.procname = "ucast_solicit",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &int_max,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
},
|
||||
[NEIGH_VAR_APP_PROBE] = {
|
||||
.procname = "app_solicit",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &int_max,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
},
|
||||
[NEIGH_VAR_RETRANS_TIME] = {
|
||||
.procname = "retrans_time",
|
||||
|
@ -2899,7 +2906,9 @@ static struct neigh_sysctl_table {
|
|||
.procname = "proxy_qlen",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &int_max,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
},
|
||||
[NEIGH_VAR_ANYCAST_DELAY] = {
|
||||
.procname = "anycast_delay",
|
||||
|
@ -2941,19 +2950,25 @@ static struct neigh_sysctl_table {
|
|||
.procname = "gc_thresh1",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &int_max,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
},
|
||||
[NEIGH_VAR_GC_THRESH2] = {
|
||||
.procname = "gc_thresh2",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &int_max,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
},
|
||||
[NEIGH_VAR_GC_THRESH3] = {
|
||||
.procname = "gc_thresh3",
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &int_max,
|
||||
.proc_handler = proc_dointvec_minmax,
|
||||
},
|
||||
[NEIGH_VAR_PROBE] = {
|
||||
.procname = "neigh_probe",
|
||||
|
|
Loading…
Reference in New Issue