mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 22:37:45 -04:00
The kernel has only two users of proc_do_large_bitmap(), the kernel CPU watchdog, and the ip_local_reserved_ports. Refer to watchdog_cpumask and ip_local_reserved_ports in Documentation for further details on these. When you input a large buffer into these, when it is larger than PAGE_SIZE- 1, the input data gets misparsed, and the user get incorrectly informed that the desired input value was set. This commit implements a test which mimics and exploits that use case, it uses a bitmap size, as in the watchdog case. The bitmap is used to test the bitmap proc handler, proc_do_large_bitmap(). The next commit fixes this issue. [[email protected]: move proc_do_large_bitmap() export to EOF] [[email protected]: use new target description for backward compatibility] [[email protected]: augment test number to 50, ran into issues with bash string comparisons when testing up to 50 cases.] [[email protected]: introduce and use verify_diff_proc_file() to use diff] [[email protected]: use mktemp for tmp file] [[email protected]: merge shell test and C code] [[email protected]: commit log love] [[email protected]: export proc_do_large_bitmap() to allow for the test [[email protected]: check for the return value when writing to the proc file] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Eric Sandeen <[email protected]> Signed-off-by: Luis Chamberlain <[email protected]> Acked-by: Kees Cook <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>