sysctl: fix uninitialized variable in proc_do_large_bitmap
proc_do_large_bitmap() does not initialize variable c, which is expected
to be set to a trailing character by proc_get_long().
However, proc_get_long() only sets c when the input buffer contains a
trailing character after the parsed value.
If c is not initialized it may happen to contain a '-'. If this is the
case proc_do_large_bitmap() expects to be able to parse a second part of
the input buffer. If there is no second part an unjustified -EINVAL will
be returned.
Initialize c to 0 to prevent returning -EINVAL on valid input.
Fixes: 9f977fb7ae ("sysctl: add proc_do_large_bitmap")
Signed-off-by: Marc Buerg <buermarc@googlemail.com>
Reviewed-by: Joel Granados <joel.granados@kernel.org>
Signed-off-by: Joel Granados <joel.granados@kernel.org>
This commit is contained in:
parent
c369299895
commit
f63a9df7e3
|
|
@ -1118,7 +1118,7 @@ int proc_do_large_bitmap(const struct ctl_table *table, int dir,
|
||||||
unsigned long bitmap_len = table->maxlen;
|
unsigned long bitmap_len = table->maxlen;
|
||||||
unsigned long *bitmap = *(unsigned long **) table->data;
|
unsigned long *bitmap = *(unsigned long **) table->data;
|
||||||
unsigned long *tmp_bitmap = NULL;
|
unsigned long *tmp_bitmap = NULL;
|
||||||
char tr_a[] = { '-', ',', '\n' }, tr_b[] = { ',', '\n', 0 }, c;
|
char tr_a[] = { '-', ',', '\n' }, tr_b[] = { ',', '\n', 0 }, c = 0;
|
||||||
|
|
||||||
if (!bitmap || !bitmap_len || !left || (*ppos && SYSCTL_KERN_TO_USER(dir))) {
|
if (!bitmap || !bitmap_len || !left || (*ppos && SYSCTL_KERN_TO_USER(dir))) {
|
||||||
*lenp = 0;
|
*lenp = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue