On Wed, 15 Mar 2023 at 04:45, Muchun Song <songmuchun@xxxxxxxxxxxxx> wrote: > > The variable kfence_metadata is initialized in kfence_init_pool(), then, it is > not initialized if kfence is disabled after booting. In this case, kfence_metadata > will be used (e.g. ->lock and ->state fields) without initialization when reading > /sys/kernel/debug/kfence/objects. There will be a warning if you enable > CONFIG_DEBUG_SPINLOCK. Fix it by creating debugfs files when necessary. > > Fixes: 0ce20dd84089 ("mm: add Kernel Electric-Fence infrastructure") > Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx> Tested-by: Marco Elver <elver@xxxxxxxxxx> Reviewed-by: Marco Elver <elver@xxxxxxxxxx> Good catch! > --- > mm/kfence/core.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/mm/kfence/core.c b/mm/kfence/core.c > index 5349c37a5dac..79c94ee55f97 100644 > --- a/mm/kfence/core.c > +++ b/mm/kfence/core.c > @@ -726,10 +726,14 @@ static const struct seq_operations objects_sops = { > }; > DEFINE_SEQ_ATTRIBUTE(objects); > > -static int __init kfence_debugfs_init(void) > +static int kfence_debugfs_init(void) > { > - struct dentry *kfence_dir = debugfs_create_dir("kfence", NULL); > + struct dentry *kfence_dir; > > + if (!READ_ONCE(kfence_enabled)) > + return 0; > + > + kfence_dir = debugfs_create_dir("kfence", NULL); > debugfs_create_file("stats", 0444, kfence_dir, NULL, &stats_fops); > debugfs_create_file("objects", 0400, kfence_dir, NULL, &objects_fops); > return 0; > @@ -883,6 +887,8 @@ static int kfence_init_late(void) > } > > kfence_init_enable(); > + kfence_debugfs_init(); > + > return 0; > } > > -- > 2.11.0 >