Commit fc3501d4 authored by Sven Wegener's avatar Sven Wegener Committed by Linus Torvalds
Browse files

mm: fix dirty_bytes/dirty_background_bytes sysctls on 64bit arches



We need to pass an unsigned long as the minimum, because it gets casted
to an unsigned long in the sysctl handler. If we pass an int, we'll
access four more bytes on 64bit arches, resulting in a random minimum
value.

[rientjes@google.com: fix type of `old_bytes']
Signed-off-by: default avatarSven Wegener <sven.wegener@stealer.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Christoph Lameter <cl@linux-foundation.org>
Cc: David Rientjes <rientjes@google.com>
Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 35887b1c
...@@ -101,6 +101,7 @@ static int two = 2; ...@@ -101,6 +101,7 @@ static int two = 2;
static int zero; static int zero;
static int one = 1; static int one = 1;
static unsigned long one_ul = 1;
static int one_hundred = 100; static int one_hundred = 100;
/* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
...@@ -974,7 +975,7 @@ static struct ctl_table vm_table[] = { ...@@ -974,7 +975,7 @@ static struct ctl_table vm_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = &dirty_background_bytes_handler, .proc_handler = &dirty_background_bytes_handler,
.strategy = &sysctl_intvec, .strategy = &sysctl_intvec,
.extra1 = &one, .extra1 = &one_ul,
}, },
{ {
.ctl_name = VM_DIRTY_RATIO, .ctl_name = VM_DIRTY_RATIO,
...@@ -995,7 +996,7 @@ static struct ctl_table vm_table[] = { ...@@ -995,7 +996,7 @@ static struct ctl_table vm_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = &dirty_bytes_handler, .proc_handler = &dirty_bytes_handler,
.strategy = &sysctl_intvec, .strategy = &sysctl_intvec,
.extra1 = &one, .extra1 = &one_ul,
}, },
{ {
.procname = "dirty_writeback_centisecs", .procname = "dirty_writeback_centisecs",
......
...@@ -209,7 +209,7 @@ int dirty_bytes_handler(struct ctl_table *table, int write, ...@@ -209,7 +209,7 @@ int dirty_bytes_handler(struct ctl_table *table, int write,
struct file *filp, void __user *buffer, size_t *lenp, struct file *filp, void __user *buffer, size_t *lenp,
loff_t *ppos) loff_t *ppos)
{ {
int old_bytes = vm_dirty_bytes; unsigned long old_bytes = vm_dirty_bytes;
int ret; int ret;
ret = proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos); ret = proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment