ring-buffer: Fix recursion protection transitions between interrupt context
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Mon, 2 Nov 2020 20:31:27 +0000 (15:31 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Nov 2020 17:27:52 +0000 (18:27 +0100)
commitf97472014d600720a56a99e9904e329bbf3bddc5
treed12e7c56f32706aa1be425e52c83dca1af43314b
parentf31e8dea41926ca67f7c9ebb180bf6082d9707c5
ring-buffer: Fix recursion protection transitions between interrupt context

[ Upstream commit b02414c8f045ab3b9afc816c3735bc98c5c3d262 ]

The recursion protection of the ring buffer depends on preempt_count() to be
correct. But it is possible that the ring buffer gets called after an
interrupt comes in but before it updates the preempt_count(). This will
trigger a false positive in the recursion code.

Use the same trick from the ftrace function callback recursion code which
uses a "transition" bit that gets set, to allow for a single recursion for
to handle transitions between contexts.

Cc: stable@vger.kernel.org
Fixes: 567cd4da54ff4 ("ring-buffer: User context bit recursion checking")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
kernel/trace/ring_buffer.c