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; |