Fix to make the type of $comm "string". If we set the other type to $comm argument, it shows meaningless value or wrong data. Currently probe events allow us to set string array type (e.g. ":string[2]"), or other digit types like x8 on $comm. But since clearly $comm is just a string data, it should not be fetched by other types including array. Link: http://lkml.kernel.org/r/155723736241.9149.14582064184468574539.stgit@devnote2
Unified · Split
| @@ -533,13 +533,14 @@ static int traceprobe_parse_probe_arg_body(char *arg, ssize_t *size, · 532 unmodified lines | |||
| 533 | } | 533 | } |
| 534 | } | 534 | } |
| 535 | } | 535 | } |
| 536 | /* | 536 | |
| 537 | * The default type of $comm should be "string", and it can't be | 537 | /* Since $comm can not be dereferred, we can find $comm by strcmp */ |
| 538 | * dereferenced. | 538 | if (strcmp(arg, "$comm") == 0) { |
| 539 | */ | 539 | /* The type of $comm must be "string", and not an array. */ |
| 540 | if (!t && strcmp(arg, "$comm") == 0) | 540 | if (parg->count || (t && strcmp(t, "string"))) |
| 541 | return -EINVAL; | ||
| 541 | parg->type = find_fetch_type("string"); | 542 | parg->type = find_fetch_type("string"); |
| 542 | else | 543 | } else |
| 543 | parg->type = find_fetch_type(t); | 544 | parg->type = find_fetch_type(t); |
| 544 | if (!parg->type) { | 545 | if (!parg->type) { |
| 545 | trace_probe_log_err(offset + (t ? (t - arg) : 0), BAD_TYPE); | 546 | trace_probe_log_err(offset + (t ? (t - arg) : 0), BAD_TYPE); |