diff options
| -rw-r--r-- | kernel/trace/trace.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 06c69a260328..305c562dae2a 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -738,8 +738,7 @@ void trace_stop_cmdline_recording(void); | |||
| 738 | 738 | ||
| 739 | static void trace_save_cmdline(struct task_struct *tsk) | 739 | static void trace_save_cmdline(struct task_struct *tsk) |
| 740 | { | 740 | { |
| 741 | unsigned map; | 741 | unsigned pid, idx; |
| 742 | unsigned idx; | ||
| 743 | 742 | ||
| 744 | if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT)) | 743 | if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT)) |
| 745 | return; | 744 | return; |
| @@ -757,10 +756,17 @@ static void trace_save_cmdline(struct task_struct *tsk) | |||
| 757 | if (idx == NO_CMDLINE_MAP) { | 756 | if (idx == NO_CMDLINE_MAP) { |
| 758 | idx = (cmdline_idx + 1) % SAVED_CMDLINES; | 757 | idx = (cmdline_idx + 1) % SAVED_CMDLINES; |
| 759 | 758 | ||
| 760 | map = map_cmdline_to_pid[idx]; | 759 | /* |
| 761 | if (map != NO_CMDLINE_MAP) | 760 | * Check whether the cmdline buffer at idx has a pid |
| 762 | map_pid_to_cmdline[map] = NO_CMDLINE_MAP; | 761 | * mapped. We are going to overwrite that entry so we |
| 762 | * need to clear the map_pid_to_cmdline. Otherwise we | ||
| 763 | * would read the new comm for the old pid. | ||
| 764 | */ | ||
| 765 | pid = map_cmdline_to_pid[idx]; | ||
| 766 | if (pid != NO_CMDLINE_MAP) | ||
| 767 | map_pid_to_cmdline[pid] = NO_CMDLINE_MAP; | ||
| 763 | 768 | ||
| 769 | map_cmdline_to_pid[idx] = tsk->pid; | ||
| 764 | map_pid_to_cmdline[tsk->pid] = idx; | 770 | map_pid_to_cmdline[tsk->pid] = idx; |
| 765 | 771 | ||
| 766 | cmdline_idx = idx; | 772 | cmdline_idx = idx; |
