tracing/filters: operand can be negative

This should be a bug:

 # cat format
 name: foo_bar
 ID: 71
 format:
	 ...
         field:int bar;  offset:24;      size:4;
 # echo 'bar < 0' > filter
 # echo 'bar < -1' > filter
 bash: echo: write error: Invalid argument

[ Impact: fix to allow negative operand in filer expr ]

Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <4A35B8DF.60400@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Li Zefan 2009-06-15 10:58:39 +08:00 committed by Steven Rostedt
parent e4f2d10f47
commit 5e4904cb63

View File

@ -546,6 +546,7 @@ static int filter_add_pred(struct filter_parse_state *ps,
filter_pred_fn_t fn; filter_pred_fn_t fn;
unsigned long long val; unsigned long long val;
int string_type; int string_type;
int ret;
pred->fn = filter_pred_none; pred->fn = filter_pred_none;
@ -581,7 +582,11 @@ static int filter_add_pred(struct filter_parse_state *ps,
pred->not = 1; pred->not = 1;
return filter_add_pred_fn(ps, call, pred, fn); return filter_add_pred_fn(ps, call, pred, fn);
} else { } else {
if (strict_strtoull(pred->str_val, 0, &val)) { if (field->is_signed)
ret = strict_strtoll(pred->str_val, 0, &val);
else
ret = strict_strtoull(pred->str_val, 0, &val);
if (ret) {
parse_error(ps, FILT_ERR_ILLEGAL_INTVAL, 0); parse_error(ps, FILT_ERR_ILLEGAL_INTVAL, 0);
return -EINVAL; return -EINVAL;
} }