* [PATCH 0/4 -next] fault-injection: make stacktrace filter works with others
@ 2022-08-17 8:03 Wei Yongjun
2022-08-17 8:03 ` [PATCH 1/4 -next] fault-injection: allow stacktrace filter for x86-64 Wei Yongjun
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Wei Yongjun @ 2022-08-17 8:03 UTC (permalink / raw)
To: Akinobu Mita, Andrew Morton, Nathan Chancellor, Peter Zijlstra,
Kees Cook, Nick Desaulniers, Josh Poimboeuf, Dan Williams,
Miguel Ojeda, Isabella Basso, Vlastimil Babka, Rasmus Villemoes
Cc: Wei Yongjun, linux-kernel
This patchset allow fault injection run on x86_64, and make stacktrace
filter works as expected. With this, we can test device driver module by
fault injecting more easy.
*** BLURB HERE ***
Wei Yongjun (4):
fault-injection: allow stacktrace filter for x86-64
fault-injection: skip stacktrace filtering by default
fault-injection: make some stack filter attrs more readable
fault-injection: make stacktrace filter works as expected
lib/Kconfig.debug | 1 -
lib/fault-inject.c | 30 ++++++++++++++++++++++--------
2 files changed, 22 insertions(+), 9 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/4 -next] fault-injection: allow stacktrace filter for x86-64
2022-08-17 8:03 [PATCH 0/4 -next] fault-injection: make stacktrace filter works with others Wei Yongjun
@ 2022-08-17 8:03 ` Wei Yongjun
2022-08-17 8:03 ` [PATCH 2/4 -next] fault-injection: skip stacktrace filtering by default Wei Yongjun
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Wei Yongjun @ 2022-08-17 8:03 UTC (permalink / raw)
To: Akinobu Mita, Andrew Morton, Nathan Chancellor, Peter Zijlstra,
Kees Cook, Nick Desaulniers, Josh Poimboeuf, Dan Williams,
Miguel Ojeda, Isabella Basso, Vlastimil Babka, Rasmus Villemoes
Cc: Wei Yongjun, linux-kernel
FAULT_INJECTION_STACKTRACE_FILTER option was apparently disallowed on
x86_64 because of problems with the stack unwinder:
commit 6d690dcac92a84f98fd774862628ff871b713660
Author: Akinobu Mita <akinobu.mita@gmail.com>
Date: Sat May 12 10:36:53 2007 -0700
fault injection: disable stacktrace filter for x86-64
However, there is no problems whatsoever with this today. Let's allow
it again.
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
---
lib/Kconfig.debug | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 38d259b1d262..c6795f4656d7 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1944,7 +1944,6 @@ config FAIL_SUNRPC
config FAULT_INJECTION_STACKTRACE_FILTER
bool "stacktrace filter for fault-injection capabilities"
depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
- depends on !X86_64
select STACKTRACE
depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86
help
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/4 -next] fault-injection: skip stacktrace filtering by default
2022-08-17 8:03 [PATCH 0/4 -next] fault-injection: make stacktrace filter works with others Wei Yongjun
2022-08-17 8:03 ` [PATCH 1/4 -next] fault-injection: allow stacktrace filter for x86-64 Wei Yongjun
@ 2022-08-17 8:03 ` Wei Yongjun
2022-08-17 8:03 ` [PATCH 3/4 -next] fault-injection: make some stack filter attrs more readable Wei Yongjun
2022-08-17 8:03 ` [PATCH 4/4 -next] fault-injection: make stacktrace filter works as expected Wei Yongjun
3 siblings, 0 replies; 7+ messages in thread
From: Wei Yongjun @ 2022-08-17 8:03 UTC (permalink / raw)
To: Akinobu Mita, Andrew Morton, Nathan Chancellor, Peter Zijlstra,
Kees Cook, Nick Desaulniers, Josh Poimboeuf, Dan Williams,
Miguel Ojeda, Isabella Basso, Vlastimil Babka, Rasmus Villemoes
Cc: Wei Yongjun, linux-kernel
If FAULT_INJECTION_STACKTRACE_FILTER is enabled, the depth is default
to 32. This means fail_stacktrace() will iter each entry's stacktrace,
even if filter is not configured.
This patch change to quick return from fail_stacktrace() if stacktrace
filter is not set.
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
---
lib/fault-inject.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/fault-inject.c b/lib/fault-inject.c
index 423784d9c058..515fc5aaf032 100644
--- a/lib/fault-inject.c
+++ b/lib/fault-inject.c
@@ -74,7 +74,7 @@ static bool fail_stacktrace(struct fault_attr *attr)
int n, nr_entries;
bool found = (attr->require_start == 0 && attr->require_end == ULONG_MAX);
- if (depth == 0)
+ if (depth == 0 || (found && !attr->reject_start && !attr->reject_end))
return found;
nr_entries = stack_trace_save(entries, depth, 1);
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/4 -next] fault-injection: make some stack filter attrs more readable
2022-08-17 8:03 [PATCH 0/4 -next] fault-injection: make stacktrace filter works with others Wei Yongjun
2022-08-17 8:03 ` [PATCH 1/4 -next] fault-injection: allow stacktrace filter for x86-64 Wei Yongjun
2022-08-17 8:03 ` [PATCH 2/4 -next] fault-injection: skip stacktrace filtering by default Wei Yongjun
@ 2022-08-17 8:03 ` Wei Yongjun
2022-08-19 13:24 ` Akinobu Mita
2022-08-17 8:03 ` [PATCH 4/4 -next] fault-injection: make stacktrace filter works as expected Wei Yongjun
3 siblings, 1 reply; 7+ messages in thread
From: Wei Yongjun @ 2022-08-17 8:03 UTC (permalink / raw)
To: Akinobu Mita, Andrew Morton, Nathan Chancellor, Peter Zijlstra,
Kees Cook, Nick Desaulniers, Josh Poimboeuf, Dan Williams,
Miguel Ojeda, Isabella Basso, Vlastimil Babka, Rasmus Villemoes
Cc: Wei Yongjun, linux-kernel
Attributes of stack filter are show as unsigned decimal, such
as 'require-start', 'require-end'. This patch change to
show them as unsigned hexadecimal for more readable.
Before:
$ echo 0xffffffffc0257000 > /sys/kernel/debug/failslab/require-start
$ cat /sys/kernel/debug/failslab/require-start
18446744072638263296
After:
$ echo 0xffffffffc0257000 > /sys/kernel/debug/failslab/require-start
$ cat /sys/kernel/debug/failslab/require-start
0xffffffffc0257000
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
---
lib/fault-inject.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/lib/fault-inject.c b/lib/fault-inject.c
index 515fc5aaf032..deca05e7c9b3 100644
--- a/lib/fault-inject.c
+++ b/lib/fault-inject.c
@@ -179,6 +179,14 @@ static void debugfs_create_ul(const char *name, umode_t mode,
#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
+DEFINE_SIMPLE_ATTRIBUTE(fops_xl, debugfs_ul_get, debugfs_ul_set, "0x%llx\n");
+
+static void debugfs_create_xl(const char *name, umode_t mode,
+ struct dentry *parent, unsigned long *value)
+{
+ debugfs_create_file(name, mode, parent, value, &fops_xl);
+}
+
static int debugfs_stacktrace_depth_set(void *data, u64 val)
{
*(unsigned long *)data =
@@ -223,10 +231,10 @@ struct dentry *fault_create_debugfs_attr(const char *name,
#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
debugfs_create_stacktrace_depth("stacktrace-depth", mode, dir,
&attr->stacktrace_depth);
- debugfs_create_ul("require-start", mode, dir, &attr->require_start);
- debugfs_create_ul("require-end", mode, dir, &attr->require_end);
- debugfs_create_ul("reject-start", mode, dir, &attr->reject_start);
- debugfs_create_ul("reject-end", mode, dir, &attr->reject_end);
+ debugfs_create_xl("require-start", mode, dir, &attr->require_start);
+ debugfs_create_xl("require-end", mode, dir, &attr->require_end);
+ debugfs_create_xl("reject-start", mode, dir, &attr->reject_start);
+ debugfs_create_xl("reject-end", mode, dir, &attr->reject_end);
#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
attr->dname = dget(dir);
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/4 -next] fault-injection: make stacktrace filter works as expected
2022-08-17 8:03 [PATCH 0/4 -next] fault-injection: make stacktrace filter works with others Wei Yongjun
` (2 preceding siblings ...)
2022-08-17 8:03 ` [PATCH 3/4 -next] fault-injection: make some stack filter attrs more readable Wei Yongjun
@ 2022-08-17 8:03 ` Wei Yongjun
3 siblings, 0 replies; 7+ messages in thread
From: Wei Yongjun @ 2022-08-17 8:03 UTC (permalink / raw)
To: Akinobu Mita, Andrew Morton, Nathan Chancellor, Peter Zijlstra,
Kees Cook, Nick Desaulniers, Josh Poimboeuf, Dan Williams,
Miguel Ojeda, Isabella Basso, Vlastimil Babka, Rasmus Villemoes
Cc: Wei Yongjun, linux-kernel
stacktrace filter is checked after others, such as fail-nth,
interval and probability. This make it doesn't work well as
expected.
Fix to running stacktrace filter before other filters. It will
speed up fault inject testing for driver modules.
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
---
lib/fault-inject.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/lib/fault-inject.c b/lib/fault-inject.c
index deca05e7c9b3..9dd1dd1d2610 100644
--- a/lib/fault-inject.c
+++ b/lib/fault-inject.c
@@ -105,10 +105,16 @@ static inline bool fail_stacktrace(struct fault_attr *attr)
bool should_fail(struct fault_attr *attr, ssize_t size)
{
+ bool stack_checked = false;
+
if (in_task()) {
unsigned int fail_nth = READ_ONCE(current->fail_nth);
if (fail_nth) {
+ if (!fail_stacktrace(attr))
+ return false;
+
+ stack_checked = true;
fail_nth--;
WRITE_ONCE(current->fail_nth, fail_nth);
if (!fail_nth)
@@ -128,6 +134,9 @@ bool should_fail(struct fault_attr *attr, ssize_t size)
if (atomic_read(&attr->times) == 0)
return false;
+ if (!stack_checked && !fail_stacktrace(attr))
+ return false;
+
if (atomic_read(&attr->space) > size) {
atomic_sub(size, &attr->space);
return false;
@@ -142,9 +151,6 @@ bool should_fail(struct fault_attr *attr, ssize_t size)
if (attr->probability <= prandom_u32() % 100)
return false;
- if (!fail_stacktrace(attr))
- return false;
-
fail:
fail_dump(attr);
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 3/4 -next] fault-injection: make some stack filter attrs more readable
2022-08-17 8:03 ` [PATCH 3/4 -next] fault-injection: make some stack filter attrs more readable Wei Yongjun
@ 2022-08-19 13:24 ` Akinobu Mita
2022-10-03 21:17 ` Andrew Morton
0 siblings, 1 reply; 7+ messages in thread
From: Akinobu Mita @ 2022-08-19 13:24 UTC (permalink / raw)
To: Wei Yongjun
Cc: Andrew Morton, Nathan Chancellor, Peter Zijlstra, Kees Cook,
Nick Desaulniers, Josh Poimboeuf, Dan Williams, Miguel Ojeda,
Isabella Basso, Vlastimil Babka, Rasmus Villemoes, LKML
2022年8月17日(水) 16:45 Wei Yongjun <weiyongjun1@huawei.com>:
>
> Attributes of stack filter are show as unsigned decimal, such
> as 'require-start', 'require-end'. This patch change to
> show them as unsigned hexadecimal for more readable.
>
> Before:
> $ echo 0xffffffffc0257000 > /sys/kernel/debug/failslab/require-start
> $ cat /sys/kernel/debug/failslab/require-start
> 18446744072638263296
>
> After:
> $ echo 0xffffffffc0257000 > /sys/kernel/debug/failslab/require-start
> $ cat /sys/kernel/debug/failslab/require-start
> 0xffffffffc0257000
>
> Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
> ---
> lib/fault-inject.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/lib/fault-inject.c b/lib/fault-inject.c
> index 515fc5aaf032..deca05e7c9b3 100644
> --- a/lib/fault-inject.c
> +++ b/lib/fault-inject.c
> @@ -179,6 +179,14 @@ static void debugfs_create_ul(const char *name, umode_t mode,
>
> #ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
>
> +DEFINE_SIMPLE_ATTRIBUTE(fops_xl, debugfs_ul_get, debugfs_ul_set, "0x%llx\n");
> +
> +static void debugfs_create_xl(const char *name, umode_t mode,
> + struct dentry *parent, unsigned long *value)
> +{
> + debugfs_create_file(name, mode, parent, value, &fops_xl);
> +}
How about using an existing `debugfs_create_xul()` instead of defining
a local helper function?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 3/4 -next] fault-injection: make some stack filter attrs more readable
2022-08-19 13:24 ` Akinobu Mita
@ 2022-10-03 21:17 ` Andrew Morton
0 siblings, 0 replies; 7+ messages in thread
From: Andrew Morton @ 2022-10-03 21:17 UTC (permalink / raw)
To: Akinobu Mita
Cc: Wei Yongjun, Nathan Chancellor, Peter Zijlstra, Kees Cook,
Nick Desaulniers, Josh Poimboeuf, Dan Williams, Miguel Ojeda,
Isabella Basso, Vlastimil Babka, Rasmus Villemoes, LKML
On Fri, 19 Aug 2022 22:24:10 +0900 Akinobu Mita <akinobu.mita@gmail.com> wrote:
> 2022年8月17日(水) 16:45 Wei Yongjun <weiyongjun1@huawei.com>:
> >
> > Attributes of stack filter are show as unsigned decimal, such
> > as 'require-start', 'require-end'. This patch change to
> > show them as unsigned hexadecimal for more readable.
> >
> > Before:
> > $ echo 0xffffffffc0257000 > /sys/kernel/debug/failslab/require-start
> > $ cat /sys/kernel/debug/failslab/require-start
> > 18446744072638263296
> >
> > After:
> > $ echo 0xffffffffc0257000 > /sys/kernel/debug/failslab/require-start
> > $ cat /sys/kernel/debug/failslab/require-start
> > 0xffffffffc0257000
> >
> > Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
> > ---
> > lib/fault-inject.c | 16 ++++++++++++----
> > 1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > diff --git a/lib/fault-inject.c b/lib/fault-inject.c
> > index 515fc5aaf032..deca05e7c9b3 100644
> > --- a/lib/fault-inject.c
> > +++ b/lib/fault-inject.c
> > @@ -179,6 +179,14 @@ static void debugfs_create_ul(const char *name, umode_t mode,
> >
> > #ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
> >
> > +DEFINE_SIMPLE_ATTRIBUTE(fops_xl, debugfs_ul_get, debugfs_ul_set, "0x%llx\n");
> > +
> > +static void debugfs_create_xl(const char *name, umode_t mode,
> > + struct dentry *parent, unsigned long *value)
> > +{
> > + debugfs_create_file(name, mode, parent, value, &fops_xl);
> > +}
>
> How about using an existing `debugfs_create_xul()` instead of defining
> a local helper function?
Could we please have a response to this?
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-10-03 21:27 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-17 8:03 [PATCH 0/4 -next] fault-injection: make stacktrace filter works with others Wei Yongjun
2022-08-17 8:03 ` [PATCH 1/4 -next] fault-injection: allow stacktrace filter for x86-64 Wei Yongjun
2022-08-17 8:03 ` [PATCH 2/4 -next] fault-injection: skip stacktrace filtering by default Wei Yongjun
2022-08-17 8:03 ` [PATCH 3/4 -next] fault-injection: make some stack filter attrs more readable Wei Yongjun
2022-08-19 13:24 ` Akinobu Mita
2022-10-03 21:17 ` Andrew Morton
2022-08-17 8:03 ` [PATCH 4/4 -next] fault-injection: make stacktrace filter works as expected Wei Yongjun
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).