Commit 7dee5d77 authored by Kuniyuki Iwashima's avatar Kuniyuki Iwashima Committed by David S. Miller

sysctl: Fix data-races in proc_dou8vec_minmax().

A sysctl variable is accessed concurrently, and there is always a chance
of data-race.  So, all readers and writers need some basic protection to
avoid load/store-tearing.

This patch changes proc_dou8vec_minmax() to use READ_ONCE() and
WRITE_ONCE() internally to fix data-races on the sysctl side.  For now,
proc_dou8vec_minmax() itself is tolerant to a data-race, but we still
need to add annotations on the other subsystem's side.

Fixes: cb944413 ("sysctl: add proc_dou8vec_minmax()")
Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 22b9c41a
...@@ -1007,13 +1007,13 @@ int proc_dou8vec_minmax(struct ctl_table *table, int write, ...@@ -1007,13 +1007,13 @@ int proc_dou8vec_minmax(struct ctl_table *table, int write,
tmp.maxlen = sizeof(val); tmp.maxlen = sizeof(val);
tmp.data = &val; tmp.data = &val;
val = *data; val = READ_ONCE(*data);
res = do_proc_douintvec(&tmp, write, buffer, lenp, ppos, res = do_proc_douintvec(&tmp, write, buffer, lenp, ppos,
do_proc_douintvec_minmax_conv, &param); do_proc_douintvec_minmax_conv, &param);
if (res) if (res)
return res; return res;
if (write) if (write)
*data = val; WRITE_ONCE(*data, val);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(proc_dou8vec_minmax); EXPORT_SYMBOL_GPL(proc_dou8vec_minmax);
......
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