From: Greg Kroah-Hartman Date: Tue, 18 Apr 2023 10:52:19 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v4.14.313~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5a26a78c3323acd587400f182da6bc3ed2efc99c;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: sysctl-fix-data-races-in-proc_dou8vec_minmax.patch --- diff --git a/queue-5.10/series b/queue-5.10/series index 24702d5c946..bbb555096bd 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -121,3 +121,4 @@ riscv-handle-zicsr-zifencei-issues-between-clang-and-binutils.patch kexec-move-locking-into-do_kexec_load.patch kexec-turn-all-kexec_mutex-acquisitions-into-trylocks.patch panic-kexec-make-__crash_kexec-nmi-safe.patch +sysctl-fix-data-races-in-proc_dou8vec_minmax.patch diff --git a/queue-5.10/sysctl-fix-data-races-in-proc_dou8vec_minmax.patch b/queue-5.10/sysctl-fix-data-races-in-proc_dou8vec_minmax.patch new file mode 100644 index 00000000000..d3502add0cf --- /dev/null +++ b/queue-5.10/sysctl-fix-data-races-in-proc_dou8vec_minmax.patch @@ -0,0 +1,44 @@ +From 7dee5d7747a69aa2be41f04c6a7ecfe3ac8cdf18 Mon Sep 17 00:00:00 2001 +From: Kuniyuki Iwashima +Date: Mon, 11 Jul 2022 17:15:19 -0700 +Subject: sysctl: Fix data-races in proc_dou8vec_minmax(). + +From: Kuniyuki Iwashima + +commit 7dee5d7747a69aa2be41f04c6a7ecfe3ac8cdf18 upstream. + +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: cb9444130662 ("sysctl: add proc_dou8vec_minmax()") +Signed-off-by: Kuniyuki Iwashima +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + kernel/sysctl.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/kernel/sysctl.c ++++ b/kernel/sysctl.c +@@ -1109,13 +1109,13 @@ int proc_dou8vec_minmax(struct ctl_table + + tmp.maxlen = sizeof(val); + tmp.data = &val; +- val = *data; ++ val = READ_ONCE(*data); + res = do_proc_douintvec(&tmp, write, buffer, lenp, ppos, + do_proc_douintvec_minmax_conv, ¶m); + if (res) + return res; + if (write) +- *data = val; ++ WRITE_ONCE(*data, val); + return 0; + } + EXPORT_SYMBOL_GPL(proc_dou8vec_minmax);