diff options
author | Shaohua Li <shli@fb.com> | 2017-05-19 11:04:59 -0400 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-05-19 11:21:15 -0400 |
commit | 5f3394530fbe90d3bcd1c204618960bc50236578 (patch) | |
tree | fb7425b6f00ef9186ab270bb13149c2d8881434f | |
parent | 69c8ebf83213e6165b13d94ec599b861467ee2dc (diff) |
blktrace: fix integer parse
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>
-rw-r--r-- | kernel/trace/blktrace.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index bd8ae8d5ae9c..193c5f5e3f79 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c | |||
@@ -1662,14 +1662,14 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev, | |||
1662 | goto out; | 1662 | goto out; |
1663 | 1663 | ||
1664 | if (attr == &dev_attr_act_mask) { | 1664 | if (attr == &dev_attr_act_mask) { |
1665 | if (sscanf(buf, "%llx", &value) != 1) { | 1665 | if (kstrtoull(buf, 0, &value)) { |
1666 | /* Assume it is a list of trace category names */ | 1666 | /* Assume it is a list of trace category names */ |
1667 | ret = blk_trace_str2mask(buf); | 1667 | ret = blk_trace_str2mask(buf); |
1668 | if (ret < 0) | 1668 | if (ret < 0) |
1669 | goto out; | 1669 | goto out; |
1670 | value = ret; | 1670 | value = ret; |
1671 | } | 1671 | } |
1672 | } else if (sscanf(buf, "%llu", &value) != 1) | 1672 | } else if (kstrtoull(buf, 0, &value)) |
1673 | goto out; | 1673 | goto out; |
1674 | 1674 | ||
1675 | ret = -ENXIO; | 1675 | ret = -ENXIO; |