diff options
Diffstat (limited to 'kernel/trace/trace.c')
| -rw-r--r-- | kernel/trace/trace.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 4f3a8e24b426..56608538a4ad 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -530,8 +530,6 @@ int trace_pid_write(struct trace_pid_list *filtered_pids, | |||
| 530 | ubuf += ret; | 530 | ubuf += ret; |
| 531 | cnt -= ret; | 531 | cnt -= ret; |
| 532 | 532 | ||
| 533 | parser.buffer[parser.idx] = 0; | ||
| 534 | |||
| 535 | ret = -EINVAL; | 533 | ret = -EINVAL; |
| 536 | if (kstrtoul(parser.buffer, 0, &val)) | 534 | if (kstrtoul(parser.buffer, 0, &val)) |
| 537 | break; | 535 | break; |
| @@ -1236,18 +1234,18 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf, | |||
| 1236 | cnt--; | 1234 | cnt--; |
| 1237 | } | 1235 | } |
| 1238 | 1236 | ||
| 1237 | parser->idx = 0; | ||
| 1238 | |||
| 1239 | /* only spaces were written */ | 1239 | /* only spaces were written */ |
| 1240 | if (isspace(ch)) { | 1240 | if (isspace(ch) || !ch) { |
| 1241 | *ppos += read; | 1241 | *ppos += read; |
| 1242 | ret = read; | 1242 | ret = read; |
| 1243 | goto out; | 1243 | goto out; |
| 1244 | } | 1244 | } |
| 1245 | |||
| 1246 | parser->idx = 0; | ||
| 1247 | } | 1245 | } |
| 1248 | 1246 | ||
| 1249 | /* read the non-space input */ | 1247 | /* read the non-space input */ |
| 1250 | while (cnt && !isspace(ch)) { | 1248 | while (cnt && !isspace(ch) && ch) { |
| 1251 | if (parser->idx < parser->size - 1) | 1249 | if (parser->idx < parser->size - 1) |
| 1252 | parser->buffer[parser->idx++] = ch; | 1250 | parser->buffer[parser->idx++] = ch; |
| 1253 | else { | 1251 | else { |
| @@ -1262,12 +1260,14 @@ int trace_get_user(struct trace_parser *parser, const char __user *ubuf, | |||
| 1262 | } | 1260 | } |
| 1263 | 1261 | ||
| 1264 | /* We either got finished input or we have to wait for another call. */ | 1262 | /* We either got finished input or we have to wait for another call. */ |
| 1265 | if (isspace(ch)) { | 1263 | if (isspace(ch) || !ch) { |
| 1266 | parser->buffer[parser->idx] = 0; | 1264 | parser->buffer[parser->idx] = 0; |
| 1267 | parser->cont = false; | 1265 | parser->cont = false; |
| 1268 | } else if (parser->idx < parser->size - 1) { | 1266 | } else if (parser->idx < parser->size - 1) { |
| 1269 | parser->cont = true; | 1267 | parser->cont = true; |
| 1270 | parser->buffer[parser->idx++] = ch; | 1268 | parser->buffer[parser->idx++] = ch; |
| 1269 | /* Make sure the parsed string always terminates with '\0'. */ | ||
| 1270 | parser->buffer[parser->idx] = 0; | ||
| 1271 | } else { | 1271 | } else { |
| 1272 | ret = -EINVAL; | 1272 | ret = -EINVAL; |
| 1273 | goto out; | 1273 | goto out; |
| @@ -5616,7 +5616,7 @@ static int tracing_release_pipe(struct inode *inode, struct file *file) | |||
| 5616 | return 0; | 5616 | return 0; |
| 5617 | } | 5617 | } |
| 5618 | 5618 | ||
| 5619 | static unsigned int | 5619 | static __poll_t |
| 5620 | trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table) | 5620 | trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table) |
| 5621 | { | 5621 | { |
| 5622 | struct trace_array *tr = iter->tr; | 5622 | struct trace_array *tr = iter->tr; |
| @@ -5635,7 +5635,7 @@ trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_tabl | |||
| 5635 | filp, poll_table); | 5635 | filp, poll_table); |
| 5636 | } | 5636 | } |
| 5637 | 5637 | ||
| 5638 | static unsigned int | 5638 | static __poll_t |
| 5639 | tracing_poll_pipe(struct file *filp, poll_table *poll_table) | 5639 | tracing_poll_pipe(struct file *filp, poll_table *poll_table) |
| 5640 | { | 5640 | { |
| 5641 | struct trace_iterator *iter = filp->private_data; | 5641 | struct trace_iterator *iter = filp->private_data; |
| @@ -6589,7 +6589,7 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp) | |||
| 6589 | return ret; | 6589 | return ret; |
| 6590 | } | 6590 | } |
| 6591 | 6591 | ||
| 6592 | static unsigned int | 6592 | static __poll_t |
| 6593 | tracing_buffers_poll(struct file *filp, poll_table *poll_table) | 6593 | tracing_buffers_poll(struct file *filp, poll_table *poll_table) |
| 6594 | { | 6594 | { |
| 6595 | struct ftrace_buffer_info *info = filp->private_data; | 6595 | struct ftrace_buffer_info *info = filp->private_data; |
