fopts->step = 0;
}
} else if ((val = STR_STRIP_PREFIX(token, "error=")) != token) {
- if (fopts->rval != INJECT_OPTS_RVAL_DEFAULT)
+ if (fopts->data.rval != INJECT_OPTS_RVAL_DEFAULT)
return false;
intval = string_to_uint_upto(val, MAX_ERRNO_VALUE);
if (intval < 0)
intval = find_errno_by_name(val);
if (intval < 1)
return false;
- fopts->rval = -intval;
+ fopts->data.rval = -intval;
} else if (!fault_tokens_only
&& (val = STR_STRIP_PREFIX(token, "retval=")) != token) {
- if (fopts->rval != INJECT_OPTS_RVAL_DEFAULT)
+ if (fopts->data.rval != INJECT_OPTS_RVAL_DEFAULT)
return false;
intval = string_to_uint(val);
if (intval < 0)
return false;
- fopts->rval = intval;
+ fopts->data.rval = intval;
} else if (!fault_tokens_only
&& (val = STR_STRIP_PREFIX(token, "signal=")) != token) {
intval = sigstr_to_uint(val);
if (intval < 1 || intval > NSIG_BYTES * 8)
return false;
- fopts->signo = intval;
+ fopts->data.signo = intval;
} else {
return false;
}
struct inject_opts opts = {
.first = 1,
.step = 1,
- .rval = INJECT_OPTS_RVAL_DEFAULT,
- .signo = 0
+ .data = {
+ .rval = INJECT_OPTS_RVAL_DEFAULT,
+ .signo = 0
+ }
};
char *buf = NULL;
char *name = parse_inject_expression(str, &buf, &opts, fault_tokens_only);
}
/* If neither of retval, error, or signal is specified, then ... */
- if (opts.rval == INJECT_OPTS_RVAL_DEFAULT && !opts.signo) {
+ if (opts.data.rval == INJECT_OPTS_RVAL_DEFAULT && !opts.data.signo) {
if (fault_tokens_only) {
/* in fault= syntax the default error code is ENOSYS. */
- opts.rval = -ENOSYS;
+ opts.data.rval = -ENOSYS;
} else {
/* in inject= syntax this is not allowed. */
error_msg_and_die("invalid %s '%s'", description, str);
opts->first = opts->step;
- if (opts->signo > 0)
- *signo = opts->signo;
- if (opts->rval != INJECT_OPTS_RVAL_DEFAULT && !arch_set_scno(tcp, -1))
+ if (opts->data.signo > 0)
+ *signo = opts->data.signo;
+ if (opts->data.rval != INJECT_OPTS_RVAL_DEFAULT && !arch_set_scno(tcp, -1))
tcp->flags |= TCB_TAMPERED;
return 0;
if (!opts)
return 0;
- if (opts->rval >= 0) {
+ if (opts->data.rval >= 0) {
kernel_long_t u_rval = tcp->u_rval;
- tcp->u_rval = opts->rval;
+ tcp->u_rval = opts->data.rval;
if (arch_set_success(tcp)) {
tcp->u_rval = u_rval;
} else {
tcp->u_error = 0;
}
} else {
- unsigned long new_error = -opts->rval;
+ unsigned long new_error = -opts->data.rval;
if (new_error != tcp->u_error && new_error <= MAX_ERRNO_VALUE) {
unsigned long u_error = tcp->u_error;