]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Apr 2019 13:52:33 +0000 (15:52 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Apr 2019 13:52:33 +0000 (15:52 +0200)
added patches:
device_cgroup-fix-rcu-imbalance-in-error-case.patch

queue-3.18/device_cgroup-fix-rcu-imbalance-in-error-case.patch [new file with mode: 0644]
queue-3.18/series

diff --git a/queue-3.18/device_cgroup-fix-rcu-imbalance-in-error-case.patch b/queue-3.18/device_cgroup-fix-rcu-imbalance-in-error-case.patch
new file mode 100644 (file)
index 0000000..90c833e
--- /dev/null
@@ -0,0 +1,42 @@
+From 0fcc4c8c044e117ac126ab6df4138ea9a67fa2a9 Mon Sep 17 00:00:00 2001
+From: Jann Horn <jannh@google.com>
+Date: Tue, 19 Mar 2019 02:36:59 +0100
+Subject: device_cgroup: fix RCU imbalance in error case
+
+From: Jann Horn <jannh@google.com>
+
+commit 0fcc4c8c044e117ac126ab6df4138ea9a67fa2a9 upstream.
+
+When dev_exception_add() returns an error (due to a failed memory
+allocation), make sure that we move the RCU preemption count back to where
+it was before we were called. We dropped the RCU read lock inside the loop
+body, so we can't just "break".
+
+sparse complains about this, too:
+
+$ make -s C=2 security/device_cgroup.o
+./include/linux/rcupdate.h:647:9: warning: context imbalance in
+'propagate_exception' - unexpected unlock
+
+Fixes: d591fb56618f ("device_cgroup: simplify cgroup tree walk in propagate_exception()")
+Cc: stable@vger.kernel.org
+Signed-off-by: Jann Horn <jannh@google.com>
+Acked-by: Michal Hocko <mhocko@suse.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ security/device_cgroup.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/security/device_cgroup.c
++++ b/security/device_cgroup.c
+@@ -568,7 +568,7 @@ static int propagate_exception(struct de
+                   devcg->behavior == DEVCG_DEFAULT_ALLOW) {
+                       rc = dev_exception_add(devcg, ex);
+                       if (rc)
+-                              break;
++                              return rc;
+               } else {
+                       /*
+                        * in the other possible cases:
index f21f6435ea1c3d9156dd625e2c6366d116117b0b..04ca2e4c037db113babd145d45df3c88e89179ff 100644 (file)
@@ -102,3 +102,4 @@ x86-kprobes-verify-stack-frame-on-kretprobe.patch
 kprobes-fix-error-check-when-reusing-optimized-probes.patch
 mac80211-do-not-call-driver-wake_tx_queue-op-during-reconfig.patch
 sched-fair-limit-sched_cfs_period_timer-loop-to-avoi.patch
+device_cgroup-fix-rcu-imbalance-in-error-case.patch