Skip to content

Commit 5b5baba

Browse files
leitaoKAGA-KOKO
authored andcommitted
debugobjects: Annotate racy debug variables
KCSAN has identified a potential data race in debugobjects, where the global variable debug_objects_maxchain is accessed for both reading and writing simultaneously in separate and parallel data paths. This results in the following splat printed by KCSAN: BUG: KCSAN: data-race in debug_check_no_obj_freed / debug_object_activate write to 0xffffffff847ccfc8 of 4 bytes by task 734 on cpu 41: debug_object_activate (lib/debugobjects.c:199 lib/debugobjects.c:564 lib/debugobjects.c:710) call_rcu (kernel/rcu/rcu.h:227 kernel/rcu/tree.c:2719 kernel/rcu/tree.c:2838) security_inode_free (security/security.c:1626) __destroy_inode (./include/linux/fsnotify.h:222 fs/inode.c:287) ... read to 0xffffffff847ccfc8 of 4 bytes by task 384 on cpu 31: debug_check_no_obj_freed (lib/debugobjects.c:1000 lib/debugobjects.c:1019) kfree (mm/slub.c:2081 mm/slub.c:4280 mm/slub.c:4390) percpu_ref_exit (lib/percpu-refcount.c:147) css_free_rwork_fn (kernel/cgroup/cgroup.c:5357) ... value changed: 0x00000070 -> 0x00000071 The data race is actually harmless as this is just used for debugfs statistics, as all other debug variables. Annotate all debug variables as racy explicitly, since these variables are known to be racy and harmless. Signed-off-by: Breno Leitao <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 6ba59ff commit 5b5baba

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

lib/debugobjects.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,17 @@ static bool obj_freeing;
7878
/* The number of objs on the global free list */
7979
static int obj_nr_tofree;
8080

81-
static int debug_objects_maxchain __read_mostly;
82-
static int __maybe_unused debug_objects_maxchecked __read_mostly;
83-
static int debug_objects_fixups __read_mostly;
84-
static int debug_objects_warnings __read_mostly;
85-
static int debug_objects_enabled __read_mostly
86-
= CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT;
87-
static int debug_objects_pool_size __read_mostly
88-
= ODEBUG_POOL_SIZE;
89-
static int debug_objects_pool_min_level __read_mostly
90-
= ODEBUG_POOL_MIN_LEVEL;
81+
static int __data_racy debug_objects_maxchain __read_mostly;
82+
static int __data_racy __maybe_unused debug_objects_maxchecked __read_mostly;
83+
static int __data_racy debug_objects_fixups __read_mostly;
84+
static int __data_racy debug_objects_warnings __read_mostly;
85+
static int __data_racy debug_objects_enabled __read_mostly
86+
= CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT;
87+
static int __data_racy debug_objects_pool_size __read_mostly
88+
= ODEBUG_POOL_SIZE;
89+
static int __data_racy debug_objects_pool_min_level __read_mostly
90+
= ODEBUG_POOL_MIN_LEVEL;
91+
9192
static const struct debug_obj_descr *descr_test __read_mostly;
9293
static struct kmem_cache *obj_cache __ro_after_init;
9394

0 commit comments

Comments
 (0)