From: Matthew Wilcox <matthew.r.wilcox@intel.com> To: Andrew Morton <akpm@linux-foundation.org>, Hugh Dickins <hughd@google.com>, Ohad Ben-Cohen <ohad@wizery.com> Cc: Matthew Wilcox <willy@linux.intel.com>, Konstantin Khlebnikov <khlebnikov@openvz.org>, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, stable@vger.kernel.org Subject: [PATCH 2/5] hwspinlock: Fix race between radix tree insertion and lookup Date: Wed, 27 Jan 2016 16:17:49 -0500 [thread overview] Message-ID: <1453929472-25566-3-git-send-email-matthew.r.wilcox@intel.com> (raw) In-Reply-To: <1453929472-25566-1-git-send-email-matthew.r.wilcox@intel.com> From: Matthew Wilcox <willy@linux.intel.com> of_hwspin_lock_get_id() is protected by the RCU lock, which means that insertions can occur simultaneously with the lookup. If the radix tree transitions from a height of 0, we can see a slot with the indirect_ptr bit set, which will cause us to at least read random memory, and could cause other havoc. Fix this by using the newly introduced radix_tree_iter_retry(). Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Cc: stable@vger.kernel.org --- drivers/hwspinlock/hwspinlock_core.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c index 52f708bcf77f..d50c701b19d6 100644 --- a/drivers/hwspinlock/hwspinlock_core.c +++ b/drivers/hwspinlock/hwspinlock_core.c @@ -313,6 +313,10 @@ int of_hwspin_lock_get_id(struct device_node *np, int index) hwlock = radix_tree_deref_slot(slot); if (unlikely(!hwlock)) continue; + if (radix_tree_is_indirect_ptr(hwlock)) { + slot = radix_tree_iter_retry(&iter); + continue; + } if (hwlock->bank->dev->of_node == args.np) { ret = 0; -- 2.7.0.rc3
WARNING: multiple messages have this Message-ID (diff)
From: Matthew Wilcox <matthew.r.wilcox@intel.com> To: Andrew Morton <akpm@linux-foundation.org>, Hugh Dickins <hughd@google.com>, Ohad Ben-Cohen <ohad@wizery.com> Cc: Matthew Wilcox <willy@linux.intel.com>, Konstantin Khlebnikov <khlebnikov@openvz.org>, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, stable@vger.kernel.org Subject: [PATCH 2/5] hwspinlock: Fix race between radix tree insertion and lookup Date: Wed, 27 Jan 2016 16:17:49 -0500 [thread overview] Message-ID: <1453929472-25566-3-git-send-email-matthew.r.wilcox@intel.com> (raw) In-Reply-To: <1453929472-25566-1-git-send-email-matthew.r.wilcox@intel.com> From: Matthew Wilcox <willy@linux.intel.com> of_hwspin_lock_get_id() is protected by the RCU lock, which means that insertions can occur simultaneously with the lookup. If the radix tree transitions from a height of 0, we can see a slot with the indirect_ptr bit set, which will cause us to at least read random memory, and could cause other havoc. Fix this by using the newly introduced radix_tree_iter_retry(). Signed-off-by: Matthew Wilcox <willy@linux.intel.com> Cc: stable@vger.kernel.org --- drivers/hwspinlock/hwspinlock_core.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c index 52f708bcf77f..d50c701b19d6 100644 --- a/drivers/hwspinlock/hwspinlock_core.c +++ b/drivers/hwspinlock/hwspinlock_core.c @@ -313,6 +313,10 @@ int of_hwspin_lock_get_id(struct device_node *np, int index) hwlock = radix_tree_deref_slot(slot); if (unlikely(!hwlock)) continue; + if (radix_tree_is_indirect_ptr(hwlock)) { + slot = radix_tree_iter_retry(&iter); + continue; + } if (hwlock->bank->dev->of_node == args.np) { ret = 0; -- 2.7.0.rc3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2016-01-27 21:18 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-01-27 21:17 [PATCH 0/5] Fix races & improve the radix tree iterator patterns Matthew Wilcox 2016-01-27 21:17 ` Matthew Wilcox 2016-01-27 21:17 ` [PATCH 1/5] radix-tree: Fix race in gang lookup Matthew Wilcox 2016-01-27 21:17 ` Matthew Wilcox 2016-02-03 21:37 ` Konstantin Khlebnikov 2016-02-03 21:37 ` Konstantin Khlebnikov 2016-02-04 8:44 ` Konstantin Khlebnikov 2016-03-04 13:21 ` zhong jiang 2016-03-04 13:21 ` zhong jiang 2016-01-27 21:17 ` Matthew Wilcox [this message] 2016-01-27 21:17 ` [PATCH 2/5] hwspinlock: Fix race between radix tree insertion and lookup Matthew Wilcox 2016-01-27 21:17 ` [PATCH 3/5] btrfs: Use radix_tree_iter_retry() Matthew Wilcox 2016-01-27 21:17 ` Matthew Wilcox 2016-02-01 14:34 ` David Sterba 2016-02-01 14:34 ` David Sterba 2016-01-27 21:17 ` [PATCH 4/5] mm: " Matthew Wilcox 2016-01-27 21:17 ` Matthew Wilcox 2016-01-29 14:45 ` Vlastimil Babka 2016-01-29 14:45 ` Vlastimil Babka 2016-01-29 14:45 ` Vlastimil Babka 2016-01-29 14:50 ` Matthew Wilcox 2016-01-29 14:50 ` Matthew Wilcox 2016-02-19 18:02 ` Sasha Levin 2016-02-19 18:02 ` Sasha Levin 2016-01-27 21:17 ` [PATCH 5/5] radix-tree,shmem: Introduce radix_tree_iter_next() Matthew Wilcox 2016-01-27 21:17 ` Matthew Wilcox 2016-02-04 8:50 ` Konstantin Khlebnikov 2016-02-04 8:50 ` Konstantin Khlebnikov 2016-01-28 7:17 ` [PATCH 0/5] Fix races & improve the radix tree iterator patterns Konstantin Khlebnikov 2016-01-28 7:17 ` Konstantin Khlebnikov 2016-02-03 6:27 ` Konstantin Khlebnikov 2016-02-03 6:27 ` Konstantin Khlebnikov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1453929472-25566-3-git-send-email-matthew.r.wilcox@intel.com \ --to=matthew.r.wilcox@intel.com \ --cc=akpm@linux-foundation.org \ --cc=hughd@google.com \ --cc=khlebnikov@openvz.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=ohad@wizery.com \ --cc=stable@vger.kernel.org \ --cc=willy@linux.intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.