Message ID | 20220124025205.329752-4-liupeng256@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add a module parameter to adjust kfence objects | expand |
On Mon, 24 Jan 2022 at 03:37, 'Peng Liu' via kasan-dev <kasan-dev@googlegroups.com> wrote: > > The parameter kfence_sample_interval can be set via boot parameter > and late shell command. However, KFENCE test case just use compile > time CONFIG_KFENCE_SAMPLE_INTERVAL, this will make KFENCE test case > not run as user desired. This patch will make KFENCE test case > compatible with run-time-set sample interval. > > Signed-off-by: Peng Liu <liupeng256@huawei.com> > --- > include/linux/kfence.h | 2 ++ > mm/kfence/core.c | 3 ++- > mm/kfence/kfence_test.c | 8 ++++---- > 3 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/include/linux/kfence.h b/include/linux/kfence.h > index bf91b76b87ee..0fc913a7f017 100644 > --- a/include/linux/kfence.h > +++ b/include/linux/kfence.h > @@ -19,6 +19,8 @@ > > extern bool kfence_enabled; > extern unsigned long kfence_num_objects; > +extern unsigned long kfence_sample_interval; > + > /* > * We allocate an even number of pages, as it simplifies calculations to map > * address to metadata indices; effectively, the very first page serves as an > diff --git a/mm/kfence/core.c b/mm/kfence/core.c > index 2301923182b8..e2fcae34cc84 100644 > --- a/mm/kfence/core.c > +++ b/mm/kfence/core.c > @@ -50,7 +50,8 @@ > > bool kfence_enabled __read_mostly; > > -static unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL; > +unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL; > +EXPORT_SYMBOL(kfence_sample_interval); /* Export for test modules. */ While it would make some situations more convenient, I've wanted to avoid exporting a new symbol just for the test. And in most cases it only makes sense to run the test on a custom debug kernel. Why do you need this? Should you really need this, I suggest at least using EXPORT_SYMBOL_GPL. Should you want it, you can resend this patch standalone detached from the rest. Thanks, -- Marco
On 2022/1/24 16:25, Marco Elver wrote: > On Mon, 24 Jan 2022 at 03:37, 'Peng Liu' via kasan-dev > <kasan-dev@googlegroups.com> wrote: >> The parameter kfence_sample_interval can be set via boot parameter >> and late shell command. However, KFENCE test case just use compile >> time CONFIG_KFENCE_SAMPLE_INTERVAL, this will make KFENCE test case >> not run as user desired. This patch will make KFENCE test case >> compatible with run-time-set sample interval. >> >> Signed-off-by: Peng Liu<liupeng256@huawei.com> >> --- >> include/linux/kfence.h | 2 ++ >> mm/kfence/core.c | 3 ++- >> mm/kfence/kfence_test.c | 8 ++++---- >> 3 files changed, 8 insertions(+), 5 deletions(-) >> >> diff --git a/include/linux/kfence.h b/include/linux/kfence.h >> index bf91b76b87ee..0fc913a7f017 100644 >> --- a/include/linux/kfence.h >> +++ b/include/linux/kfence.h >> @@ -19,6 +19,8 @@ >> >> extern bool kfence_enabled; >> extern unsigned long kfence_num_objects; >> +extern unsigned long kfence_sample_interval; >> + >> /* >> * We allocate an even number of pages, as it simplifies calculations to map >> * address to metadata indices; effectively, the very first page serves as an >> diff --git a/mm/kfence/core.c b/mm/kfence/core.c >> index 2301923182b8..e2fcae34cc84 100644 >> --- a/mm/kfence/core.c >> +++ b/mm/kfence/core.c >> @@ -50,7 +50,8 @@ >> >> bool kfence_enabled __read_mostly; >> >> -static unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL; >> +unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL; >> +EXPORT_SYMBOL(kfence_sample_interval); /* Export for test modules. */ > While it would make some situations more convenient, I've wanted to > avoid exporting a new symbol just for the test. And in most cases it > only makes sense to run the test on a custom debug kernel. > > Why do you need this? To automatically do more tests. > > Should you really need this, I suggest at least using > EXPORT_SYMBOL_GPL. Should you want it, you can resend this patch > standalone detached from the rest. > > Thanks, > -- Marco > . When KFENCE pool size can be adjusted by boot parameters(assumption), automatically test and train KFENCE may be useful. So far, exporting kfence.sample_interval is not necessary. Thanks, -- Peng Liu .
On Mon, 24 Jan 2022 at 13:19, liupeng (DM) <liupeng256@huawei.com> wrote: [...] > When KFENCE pool size can be adjusted by boot parameters(assumption), > automatically test and train KFENCE may be useful. So far, exporting > kfence.sample_interval is not necessary. I'm not opposed to the patch (I've also run into this issue, but not too frequently) - feel free to just send it with EXPORT_SYMBOL_GPL. Thanks, -- Marco
On 2022/1/24 20:21, Marco Elver wrote: > On Mon, 24 Jan 2022 at 13:19, liupeng (DM)<liupeng256@huawei.com> wrote: > [...] >> When KFENCE pool size can be adjusted by boot parameters(assumption), >> automatically test and train KFENCE may be useful. So far, exporting >> kfence.sample_interval is not necessary. > I'm not opposed to the patch (I've also run into this issue, but not > too frequently) - feel free to just send it with EXPORT_SYMBOL_GPL. > > Thanks, > -- Marco > . Good, I will send a revised patch latter. Thanks, -- Peng Liu .
diff --git a/include/linux/kfence.h b/include/linux/kfence.h index bf91b76b87ee..0fc913a7f017 100644 --- a/include/linux/kfence.h +++ b/include/linux/kfence.h @@ -19,6 +19,8 @@ extern bool kfence_enabled; extern unsigned long kfence_num_objects; +extern unsigned long kfence_sample_interval; + /* * We allocate an even number of pages, as it simplifies calculations to map * address to metadata indices; effectively, the very first page serves as an diff --git a/mm/kfence/core.c b/mm/kfence/core.c index 2301923182b8..e2fcae34cc84 100644 --- a/mm/kfence/core.c +++ b/mm/kfence/core.c @@ -50,7 +50,8 @@ bool kfence_enabled __read_mostly; -static unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL; +unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL; +EXPORT_SYMBOL(kfence_sample_interval); /* Export for test modules. */ #ifdef MODULE_PARAM_PREFIX #undef MODULE_PARAM_PREFIX diff --git a/mm/kfence/kfence_test.c b/mm/kfence/kfence_test.c index 084e3a55aebb..97ff3a133f11 100644 --- a/mm/kfence/kfence_test.c +++ b/mm/kfence/kfence_test.c @@ -268,13 +268,13 @@ static void *test_alloc(struct kunit *test, size_t size, gfp_t gfp, enum allocat * 100x the sample interval should be more than enough to ensure we get * a KFENCE allocation eventually. */ - timeout = jiffies + msecs_to_jiffies(100 * CONFIG_KFENCE_SAMPLE_INTERVAL); + timeout = jiffies + msecs_to_jiffies(100 * kfence_sample_interval); /* * Especially for non-preemption kernels, ensure the allocation-gate * timer can catch up: after @resched_after, every failed allocation * attempt yields, to ensure the allocation-gate timer is scheduled. */ - resched_after = jiffies + msecs_to_jiffies(CONFIG_KFENCE_SAMPLE_INTERVAL); + resched_after = jiffies + msecs_to_jiffies(kfence_sample_interval); do { if (test_cache) alloc = kmem_cache_alloc(test_cache, gfp); @@ -608,7 +608,7 @@ static void test_gfpzero(struct kunit *test) int i; /* Skip if we think it'd take too long. */ - KFENCE_TEST_REQUIRES(test, CONFIG_KFENCE_SAMPLE_INTERVAL <= 100); + KFENCE_TEST_REQUIRES(test, kfence_sample_interval <= 100); setup_test_cache(test, size, 0, NULL); buf1 = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY); @@ -739,7 +739,7 @@ static void test_memcache_alloc_bulk(struct kunit *test) * 100x the sample interval should be more than enough to ensure we get * a KFENCE allocation eventually. */ - timeout = jiffies + msecs_to_jiffies(100 * CONFIG_KFENCE_SAMPLE_INTERVAL); + timeout = jiffies + msecs_to_jiffies(100 * kfence_sample_interval); do { void *objects[100]; int i, num = kmem_cache_alloc_bulk(test_cache, GFP_ATOMIC, ARRAY_SIZE(objects),
The parameter kfence_sample_interval can be set via boot parameter and late shell command. However, KFENCE test case just use compile time CONFIG_KFENCE_SAMPLE_INTERVAL, this will make KFENCE test case not run as user desired. This patch will make KFENCE test case compatible with run-time-set sample interval. Signed-off-by: Peng Liu <liupeng256@huawei.com> --- include/linux/kfence.h | 2 ++ mm/kfence/core.c | 3 ++- mm/kfence/kfence_test.c | 8 ++++---- 3 files changed, 8 insertions(+), 5 deletions(-)