aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/trace/trace.c16
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
739static void trace_save_cmdline(struct task_struct *tsk) 739static 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;