blktrace: fix integer parse
authorShaohua Li <shli@fb.com>
Fri, 19 May 2017 15:04:59 +0000 (08:04 -0700)
committerJens Axboe <axboe@fb.com>
Fri, 19 May 2017 15:21:15 +0000 (09:21 -0600)
sscanf is a very poor way to parse integer. For example, I input
"discard" for act_mask, it gets 0xd and completely messes up. Using
correct API to do integer parse.

This patch also makes attributes accept any base of integer.

Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
kernel/trace/blktrace.c

index bd8ae8d..193c5f5 100644 (file)
@@ -1662,14 +1662,14 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
                goto out;
 
        if (attr == &dev_attr_act_mask) {
                goto out;
 
        if (attr == &dev_attr_act_mask) {
-               if (sscanf(buf, "%llx", &value) != 1) {
+               if (kstrtoull(buf, 0, &value)) {
                        /* Assume it is a list of trace category names */
                        ret = blk_trace_str2mask(buf);
                        if (ret < 0)
                                goto out;
                        value = ret;
                }
                        /* Assume it is a list of trace category names */
                        ret = blk_trace_str2mask(buf);
                        if (ret < 0)
                                goto out;
                        value = ret;
                }
-       } else if (sscanf(buf, "%llu", &value) != 1)
+       } else if (kstrtoull(buf, 0, &value))
                goto out;
 
        ret = -ENXIO;
                goto out;
 
        ret = -ENXIO;