aboutsummaryrefslogtreecommitdiff
path: root/tools/testing
diff options
context:
space:
mode:
authorGravatar Beau Belgrave <beaub@linux.microsoft.com> 2023-04-25 15:51:05 -0700
committerGravatar Steven Rostedt (Google) <rostedt@goodmis.org> 2023-04-25 21:04:16 -0400
commit17b439db21d5dbe70c419e982262621e5e6aba7f (patch)
tree20e77f8a2a91e04fbfdb30355df7eb5fbb03643d /tools/testing
parenttracing/user_events: Ensure write index cannot be negative (diff)
downloadlinux-17b439db21d5dbe70c419e982262621e5e6aba7f.tar.gz
linux-17b439db21d5dbe70c419e982262621e5e6aba7f.tar.bz2
linux-17b439db21d5dbe70c419e982262621e5e6aba7f.zip
tracing/user_events: Ensure bit is cleared on unregister
If an event is enabled and a user process unregisters user_events, the bit is left set. Fix this by always clearing the bit in the user process if unregister is successful. Update abi self-test to ensure this occurs properly. Link: https://lkml.kernel.org/r/20230425225107.8525-3-beaub@linux.microsoft.com Suggested-by: Doug Cook <dcook@linux.microsoft.com> Signed-off-by: Beau Belgrave <beaub@linux.microsoft.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Diffstat (limited to 'tools/testing')
-rw-r--r--tools/testing/selftests/user_events/abi_test.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/tools/testing/selftests/user_events/abi_test.c b/tools/testing/selftests/user_events/abi_test.c
index e0323d3777a7..5125c42efe65 100644
--- a/tools/testing/selftests/user_events/abi_test.c
+++ b/tools/testing/selftests/user_events/abi_test.c
@@ -109,13 +109,16 @@ TEST_F(user, enablement) {
ASSERT_EQ(0, change_event(false));
ASSERT_EQ(0, self->check);
- /* Should not change after disable */
+ /* Ensure kernel clears bit after disable */
ASSERT_EQ(0, change_event(true));
ASSERT_EQ(1, self->check);
ASSERT_EQ(0, reg_disable(&self->check, 0));
+ ASSERT_EQ(0, self->check);
+
+ /* Ensure doesn't change after unreg */
+ ASSERT_EQ(0, change_event(true));
+ ASSERT_EQ(0, self->check);
ASSERT_EQ(0, change_event(false));
- ASSERT_EQ(1, self->check);
- self->check = 0;
}
TEST_F(user, bit_sizes) {