From ed9faa2e27f3d1d65a18752d5aba7380b0f51204 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Mon, 28 Aug 2017 23:38:43 +0000 Subject: [PATCH] Disallow more than one signal= specification in an injection expression Specifying several signal= specifications in an injection expressions makes no sense. * filter_qualify.c (parse_inject_token): Disallow second signal= specification. * strace.1.in: Document it. * tests/qual_inject-syntax.test: Check it. --- filter_qualify.c | 2 ++ strace.1.in | 5 +++-- tests/qual_inject-syntax.test | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/filter_qualify.c b/filter_qualify.c index f77ceed8..5b0ef28c 100644 --- a/filter_qualify.c +++ b/filter_qualify.c @@ -140,6 +140,8 @@ parse_inject_token(const char *const token, struct inject_opts *const fopts, fopts->data.flags |= INJECT_F_RETVAL; } else if (!fault_tokens_only && (val = STR_STRIP_PREFIX(token, "signal=")) != token) { + if (fopts->data.flags & INJECT_F_SIGNAL) + return false; intval = sigstr_to_uint(val); if (intval < 1 || intval > NSIG_BYTES * 8) return false; diff --git a/strace.1.in b/strace.1.in index dc830086..61293cfa 100644 --- a/strace.1.in +++ b/strace.1.in @@ -654,8 +654,9 @@ An injection expression can contain only one .BR error = or .BR retval = -specification. -If an injection expression contains multiple +specification, and only one +.BR signal = +specification. If an injection expression contains multiple .BR when = specifications, the last one takes precedence. diff --git a/tests/qual_inject-syntax.test b/tests/qual_inject-syntax.test index a9e44d74..7aa61809 100755 --- a/tests/qual_inject-syntax.test +++ b/tests/qual_inject-syntax.test @@ -103,6 +103,8 @@ for arg in '' , ,, ,,, : :: ::: \! \!, \!: \ chdir:retval=-1 \ chdir:signal=0 \ chdir:signal=129 \ + chdir:signal=1:signal=2 \ + chdir:signal=1:retval=0:signal=2 \ chdir:retval=0:retval=1 \ chdir:error=1:error=2 \ chdir:retval=0:error=1 \ -- 2.40.0