]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
tracing/filters: operand can be negative
authorLi Zefan <lizf@cn.fujitsu.com>
Mon, 15 Jun 2009 02:58:39 +0000 (10:58 +0800)
committerSteven Rostedt <rostedt@goodmis.org>
Mon, 15 Jun 2009 15:37:16 +0000 (11:37 -0400)
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>
kernel/trace/trace_events_filter.c

index db6e54bdb596d90b07fef8fed03520157ecf4390..1d8192304842fdbccb5fc9ecb1af40d8855a5a2e 100644 (file)
@@ -546,6 +546,7 @@ static int filter_add_pred(struct filter_parse_state *ps,
        filter_pred_fn_t fn;
        unsigned long long val;
        int string_type;
+       int ret;
 
        pred->fn = filter_pred_none;
 
@@ -581,7 +582,11 @@ static int filter_add_pred(struct filter_parse_state *ps,
                        pred->not = 1;
                return filter_add_pred_fn(ps, call, pred, fn);
        } 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);
                        return -EINVAL;
                }