Revision e7d316a02f683864a12389f8808570e37fb90aa3 authored by Subash Abhinov Kasiviswanathan on 25 August 2016, 22:16:51 UTC, committed by Linus Torvalds on 27 August 2016, 00:39:35 UTC
We have scripts which write to certain fields on 3.18 kernels but this
seems to be failing on 4.4 kernels.  An entry which we write to here is
xfrm_aevent_rseqth which is u32.

  echo 4294967295  > /proc/sys/net/core/xfrm_aevent_rseqth

Commit 230633d109e3 ("kernel/sysctl.c: detect overflows when converting
to int") prevented writing to sysctl entries when integer overflow
occurs.  However, this does not apply to unsigned integers.

Heinrich suggested that we introduce a new option to handle 64 bit
limits and set min as 0 and max as UINT_MAX.  This might not work as it
leads to issues similar to __do_proc_doulongvec_minmax.  Alternatively,
we would need to change the datatype of the entry to 64 bit.

  static int __do_proc_doulongvec_minmax(void *data, struct ctl_table
  {
      i = (unsigned long *) data;   //This cast is causing to read beyond the size of data (u32)
      vleft = table->maxlen / sizeof(unsigned long); //vleft is 0 because maxlen is sizeof(u32) which is lesser than sizeof(unsigned long) on x86_64.

Introduce a new proc handler proc_douintvec.  Individual proc entries
will need to be updated to use the new handler.

[akpm@linux-foundation.org: coding-style fixes]
Fixes: 230633d109e3 ("kernel/sysctl.c:detect overflows when converting to int")
Link: http://lkml.kernel.org/r/1471479806-5252-1-git-send-email-subashab@codeaurora.org
Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: Kees Cook <keescook@chromium.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 8582fb5
History
File Mode Size
Kconfig -rw-r--r-- 3.2 KB
Makefile -rw-r--r-- 636 bytes
associola.c -rw-r--r-- 48.3 KB
auth.c -rw-r--r-- 23.9 KB
bind_addr.c -rw-r--r-- 13.8 KB
chunk.c -rw-r--r-- 9.8 KB
debug.c -rw-r--r-- 4.2 KB
endpointola.c -rw-r--r-- 12.2 KB
input.c -rw-r--r-- 32.8 KB
inqueue.c -rw-r--r-- 7.4 KB
ipv6.c -rw-r--r-- 28.8 KB
objcnt.c -rw-r--r-- 4.0 KB
offload.c -rw-r--r-- 2.7 KB
output.c -rw-r--r-- 26.3 KB
outqueue.c -rw-r--r-- 55.0 KB
primitive.c -rw-r--r-- 7.3 KB
probe.c -rw-r--r-- 5.9 KB
proc.c -rw-r--r-- 13.9 KB
protocol.c -rw-r--r-- 42.7 KB
sctp_diag.c -rw-r--r-- 12.7 KB
sm_make_chunk.c -rw-r--r-- 103.3 KB
sm_sideeffect.c -rw-r--r-- 48.7 KB
sm_statefuns.c -rw-r--r-- 196.9 KB
sm_statetable.c -rw-r--r-- 31.2 KB
socket.c -rw-r--r-- 219.0 KB
ssnmap.c -rw-r--r-- 3.1 KB
sysctl.c -rw-r--r-- 12.4 KB
transport.c -rw-r--r-- 19.9 KB
tsnmap.c -rw-r--r-- 9.5 KB
ulpevent.c -rw-r--r-- 29.5 KB
ulpqueue.c -rw-r--r-- 29.2 KB

back to top