| From 41662f5cc55335807d39404371cfcbb1909304c4 Mon Sep 17 00:00:00 2001 |
| From: Kees Cook <keescook@chromium.org> |
| Date: Wed, 20 Jan 2016 15:00:45 -0800 |
| Subject: sysctl: enable strict writes |
| |
| From: Kees Cook <keescook@chromium.org> |
| |
| commit 41662f5cc55335807d39404371cfcbb1909304c4 upstream. |
| |
| SYSCTL_WRITES_WARN was added in commit f4aacea2f5d1 ("sysctl: allow for |
| strict write position handling"), and released in v3.16 in August of |
| 2014. Since then I can find only 1 instance of non-zero offset |
| writing[1], and it was fixed immediately in CRIU[2]. As such, it |
| appears safe to flip this to the strict state now. |
| |
| [1] https://www.google.com/search?q="when%20file%20position%20was%20not%200" |
| [2] http://lists.openvz.org/pipermail/criu/2015-April/019819.html |
| |
| Signed-off-by: Kees Cook <keescook@chromium.org> |
| Cc: "Eric W. Biederman" <ebiederm@xmission.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Sumit Semwal <sumit.semwal@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| Documentation/sysctl/kernel.txt | 15 +++++++-------- |
| kernel/sysctl.c | 2 +- |
| 2 files changed, 8 insertions(+), 9 deletions(-) |
| |
| --- a/Documentation/sysctl/kernel.txt |
| +++ b/Documentation/sysctl/kernel.txt |
| @@ -775,14 +775,13 @@ via the /proc/sys interface: |
| Each write syscall must fully contain the sysctl value to be |
| written, and multiple writes on the same sysctl file descriptor |
| will rewrite the sysctl value, regardless of file position. |
| - 0 - (default) Same behavior as above, but warn about processes that |
| - perform writes to a sysctl file descriptor when the file position |
| - is not 0. |
| - 1 - Respect file position when writing sysctl strings. Multiple writes |
| - will append to the sysctl value buffer. Anything past the max length |
| - of the sysctl value buffer will be ignored. Writes to numeric sysctl |
| - entries must always be at file position 0 and the value must be |
| - fully contained in the buffer sent in the write syscall. |
| + 0 - Same behavior as above, but warn about processes that perform writes |
| + to a sysctl file descriptor when the file position is not 0. |
| + 1 - (default) Respect file position when writing sysctl strings. Multiple |
| + writes will append to the sysctl value buffer. Anything past the max |
| + length of the sysctl value buffer will be ignored. Writes to numeric |
| + sysctl entries must always be at file position 0 and the value must |
| + be fully contained in the buffer sent in the write syscall. |
| |
| ============================================================== |
| |
| --- a/kernel/sysctl.c |
| +++ b/kernel/sysctl.c |
| @@ -173,7 +173,7 @@ extern int no_unaligned_warning; |
| #define SYSCTL_WRITES_WARN 0 |
| #define SYSCTL_WRITES_STRICT 1 |
| |
| -static int sysctl_writes_strict = SYSCTL_WRITES_WARN; |
| +static int sysctl_writes_strict = SYSCTL_WRITES_STRICT; |
| |
| static int proc_do_cad_pid(struct ctl_table *table, int write, |
| void __user *buffer, size_t *lenp, loff_t *ppos); |