From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
To: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>, Will Deacon <will@kernel.org>
Cc: linux-kernel@vger.kernel.org, Dmitry Vyukov <dvyukov@google.com>,
Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
syzbot <syzbot+62ebe501c1ce9a91f68c@syzkaller.appspotmail.com>,
syzbot <syzbot+91fd909b6e62ebe06131@syzkaller.appspotmail.com>,
syzbot <syzbot+cd0ec5211ac07c18c049@syzkaller.appspotmail.com>
Subject: [PATCH] lockdep: Introduce CONFIG_LOCKDEP_LARGE
Date: Sat, 25 Jul 2020 10:30:39 +0900 [thread overview]
Message-ID: <1595640639-9310-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp> (raw)
Since syzkaller continues various test cases until the kernel crashes,
syzkaller tends to examine more locking dependencies than normal systems.
As a result, syzbot is reporting that the fuzz testing was terminated
due to hitting upper limits lockdep can track [1] [2] [3].
Like CONFIG_LOCKDEP_SMALL which halves the upper limits, let's introduce
CONFIG_LOCKDEP_LARGE which doubles the upper limits.
[1] https://syzkaller.appspot.com/bug?id=3d97ba93fb3566000c1c59691ea427370d33ea1b
[2] https://syzkaller.appspot.com/bug?id=381cb436fe60dc03d7fd2a092b46d7f09542a72a
[3] https://syzkaller.appspot.com/bug?id=a588183ac34c1437fc0785e8f220e88282e5a29f
Reported-by: syzbot <syzbot+cd0ec5211ac07c18c049@syzkaller.appspotmail.com>
Reported-by: syzbot <syzbot+91fd909b6e62ebe06131@syzkaller.appspotmail.com>
Reported-by: syzbot <syzbot+62ebe501c1ce9a91f68c@syzkaller.appspotmail.com>
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
---
kernel/locking/lockdep.c | 4 ++++
kernel/locking/lockdep_internals.h | 5 +++++
lib/Kconfig.debug | 8 ++++++++
3 files changed, 17 insertions(+)
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 29a8de4..85ba7eb 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -1349,7 +1349,11 @@ static int add_lock_to_list(struct lock_class *this,
/*
* For good efficiency of modular, we use power of 2
*/
+#ifdef CONFIG_LOCKDEP_LARGE
+#define MAX_CIRCULAR_QUEUE_SIZE 8192UL
+#else
#define MAX_CIRCULAR_QUEUE_SIZE 4096UL
+#endif
#define CQ_MASK (MAX_CIRCULAR_QUEUE_SIZE-1)
/*
diff --git a/kernel/locking/lockdep_internals.h b/kernel/locking/lockdep_internals.h
index baca699..00a3ec3 100644
--- a/kernel/locking/lockdep_internals.h
+++ b/kernel/locking/lockdep_internals.h
@@ -93,6 +93,11 @@ enum {
#define MAX_LOCKDEP_CHAINS_BITS 15
#define MAX_STACK_TRACE_ENTRIES 262144UL
#define STACK_TRACE_HASH_SIZE 8192
+#elif defined(CONFIG_LOCKDEP_LARGE)
+#define MAX_LOCKDEP_ENTRIES 65536UL
+#define MAX_LOCKDEP_CHAINS_BITS 17
+#define MAX_STACK_TRACE_ENTRIES 1048576UL
+#define STACK_TRACE_HASH_SIZE 32768
#else
#define MAX_LOCKDEP_ENTRIES 32768UL
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 9ad9210..69ba624 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1266,6 +1266,14 @@ config LOCKDEP
config LOCKDEP_SMALL
bool
+config LOCKDEP_LARGE
+ bool "Use larger buffer for tracking more locking dependencies"
+ depends on LOCKDEP && !LOCKDEP_SMALL
+ help
+ If you say Y here, the upper limits the lock dependency engine uses will
+ be doubled. Useful for fuzz testing which tends to test many complecated
+ dependencies than normal systems.
+
config DEBUG_LOCKDEP
bool "Lock dependency engine debugging"
depends on DEBUG_KERNEL && LOCKDEP
--
1.8.3.1
next reply other threads:[~2020-07-25 1:30 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-25 1:30 Tetsuo Handa [this message]
2020-07-25 4:48 ` [PATCH] lockdep: Introduce CONFIG_LOCKDEP_LARGE Dmitry Vyukov
2020-07-25 5:23 ` Tetsuo Handa
2020-08-04 2:36 ` Tetsuo Handa
2020-08-18 9:57 ` Dmitry Vyukov
2020-08-18 11:07 ` Tetsuo Handa
2020-08-18 12:02 ` Dmitry Vyukov
2020-08-18 12:59 ` Tetsuo Handa
2020-08-27 15:20 ` [PATCH v2] lockdep: Allow tuning tracing capacity constants Tetsuo Handa
2020-09-04 16:05 ` Tetsuo Handa
2020-09-16 11:28 ` Dmitry Vyukov
2020-09-16 11:50 ` peterz
2020-09-16 12:14 ` Dmitry Vyukov
2020-09-28 0:24 ` Tetsuo Handa
2020-09-28 5:12 ` Dmitry Vyukov
2020-10-10 12:58 ` [PATCH v3] " Tetsuo Handa
2020-10-18 13:02 ` Tetsuo Handa
2020-11-18 13:57 ` Tetsuo Handa
2020-11-18 14:23 ` Peter Zijlstra
2020-11-18 14:30 ` Tetsuo Handa
2020-11-18 15:10 ` Peter Zijlstra
2020-11-18 15:31 ` Tetsuo Handa
2020-11-19 12:33 ` Dmitry Vyukov
2020-11-19 12:43 ` Dmitry Vyukov
2020-11-19 12:49 ` Dmitry Vyukov
2020-11-19 13:06 ` Dmitry Vyukov
2020-11-19 13:45 ` Tetsuo Handa
2020-11-19 14:05 ` Dmitry Vyukov
[not found] ` <CACT4Y+aNJmuhk0KicX4FzKW6PhawFBgvrC2gSJcWwUkR8VSSmg@mail.gmail.com>
2020-11-19 14:36 ` Dmitry Vyukov
2020-11-19 18:08 ` Dmitry Vyukov
2020-11-20 9:22 ` Dmitry Vyukov
2020-11-20 9:27 ` Dmitry Vyukov
2020-11-22 1:56 ` Tetsuo Handa
2020-11-27 9:00 ` Dmitry Vyukov
2020-12-03 13:47 ` Tetsuo Handa
2020-12-04 14:35 ` Tetsuo Handa
2020-11-19 14:57 ` Tetsuo Handa
2021-01-01 8:09 ` [PATCH v4] " Tetsuo Handa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1595640639-9310-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp \
--to=penguin-kernel@i-love.sakura.ne.jp \
--cc=dvyukov@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=syzbot+62ebe501c1ce9a91f68c@syzkaller.appspotmail.com \
--cc=syzbot+91fd909b6e62ebe06131@syzkaller.appspotmail.com \
--cc=syzbot+cd0ec5211ac07c18c049@syzkaller.appspotmail.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).