diff options
author | Thorsten Leemhuis <fedora@leemhuis.info> | 2020-04-24 05:31:22 +0200 |
---|---|---|
committer | Thorsten Leemhuis <fedora@leemhuis.info> | 2020-04-24 05:56:43 +0200 |
commit | 837cd03f031f1daaa2dda23d584cda25b0dfd51e (patch) | |
tree | 5a62f9127c7daa3d8f96e1394ef74421a7fb53e7 /0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch | |
parent | 536dec0b3393550051e61fc345aede447477bf94 (diff) | |
parent | d1b6f8c7af0eb9a0a44b2d4723e58dde5eafa236 (diff) | |
download | kernel-837cd03f031f1daaa2dda23d584cda25b0dfd51e.tar.gz kernel-837cd03f031f1daaa2dda23d584cda25b0dfd51e.tar.xz kernel-837cd03f031f1daaa2dda23d584cda25b0dfd51e.zip |
merge masterkernel-5.7.0-0.rc2.20200423git7adc4b399952.1.vanilla.1.fc33kernel-5.7.0-0.rc2.20200423git7adc4b399952.1.vanilla.1.fc32kernel-5.7.0-0.rc2.20200423git7adc4b399952.1.vanilla.1.fc31kernel-5.7.0-0.rc2.20200423git7adc4b399952.1.vanilla.1.fc30
Diffstat (limited to '0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch')
-rw-r--r-- | 0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch b/0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch new file mode 100644 index 000000000..568dafb7c --- /dev/null +++ b/0001-mm-kmemleak-skip-late_init-if-not-skip-disable.patch @@ -0,0 +1,71 @@ +From c781d5feeecf6dff4e0d424df5d88660e00aeb8d Mon Sep 17 00:00:00 2001 +From: Murphy Zhou <jencce.kernel@gmail.com> +Date: Sun, 29 Sep 2019 17:56:59 +0800 +Subject: [PATCH] mm/kmemleak: skip late_init if not skip disable + +Now if DEFAULT_OFF set to y, kmemleak_init will start the cleanup_work +workqueue. Then late_init call will set kmemleak_initialized to 1, the +cleaup workqueue will try to do cleanup, triggering: + +[24.738773] ================================================================== +[24.742784] BUG: KASAN: global-out-of-bounds in __kmemleak_do_cleanup+0x166/0x180 +[24.744144] Key type ._fscrypt registered +[24.745680] Read of size 8 at addr ffffffff88746c90 by task kworker/3:1/171 +[24.745687] +[24.745697] CPU: 3 PID: 171 Comm: kworker/3:1 Not tainted 5.3.0-v5.3-12475-gcbafe18 #1 +[24.745701] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011 +[24.745710] Workqueue: events kmemleak_do_cleanup +[24.745717] Call Trace: +[24.745736] dump_stack+0x7c/0xc0 +[24.745755] print_address_description.constprop.4+0x1f/0x300 +[24.751562] Key type .fscrypt registered +[24.754370] __kasan_report.cold.8+0x76/0xb2 +[24.754388] ? __kmemleak_do_cleanup+0x166/0x180 +[24.754407] kasan_report+0xe/0x20 +[24.778543] __kmemleak_do_cleanup+0x166/0x180 +[24.780795] process_one_work+0x919/0x17d0 +[24.782929] ? pwq_dec_nr_in_flight+0x320/0x320 +[24.785092] worker_thread+0x87/0xb40 +[24.786948] ? __kthread_parkme+0xc3/0x190 +[24.789217] ? process_one_work+0x17d0/0x17d0 +[24.791414] kthread+0x333/0x3f0 +[24.793031] ? kthread_create_worker_on_cpu+0xc0/0xc0 +[24.795473] ret_from_fork+0x3a/0x50 +[24.797303] +[24.798091] The buggy address belongs to the variable: +[24.800634] mem_pool_free_count+0x10/0x40 +[24.802656] +[24.803434] Memory state around the buggy address: +[24.805793] ffffffff88746b80: 04 fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 +[24.809177] ffffffff88746c00: 00 fa fa fa fa fa fa fa 00 00 fa fa fa fa fa fa +[24.812407] >ffffffff88746c80: 04 fa fa fa fa fa fa fa 00 00 fa fa fa fa fa fa +[24.815638] ^ +[24.817372] ffffffff88746d00: 00 00 fa fa fa fa fa fa 00 00 00 00 00 00 00 00 +[24.820740] ffffffff88746d80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +[24.824021] ================================================================== + +Fixes: c5665868183f ("mm: kmemleak: use the memory pool for early allocations") +Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com> +--- + mm/kmemleak.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/mm/kmemleak.c b/mm/kmemleak.c +index e362dc3d2028..0c3dfb8eef67 100644 +--- a/mm/kmemleak.c ++++ b/mm/kmemleak.c +@@ -1958,6 +1958,11 @@ void __init kmemleak_init(void) + */ + static int __init kmemleak_late_init(void) + { ++ if (!kmemleak_skip_disable) { ++ kmemleak_disable(); ++ return 0; ++ } ++ + kmemleak_initialized = 1; + + debugfs_create_file("kmemleak", 0644, NULL, NULL, &kmemleak_fops); +-- +2.26.0 + |