Revert "trace: Add an option to show tgids in trace output"

This reverts commit 0438cf86ad89 ("trace: Add an option to
show tgids in trace output").

Reverting this patch because array overflow can occur to
array saved_tgids[] when user sets the saved_cmdlines_size
from debugfs to more than size of saved_tgids[] that is 128.

Change-Id: I4ac838e19eec1870bea16dccaac648e34cb40ef1
[spathi@codeaurora.org: resolved trivial merge conflicts]
Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
This commit is contained in:
Srinivasarao P 2016-12-22 16:30:36 +05:30 committed by Gerrit - the friendly Code Review server
parent 03b5ba7768
commit ac123e9141
3 changed files with 5 additions and 114 deletions

View File

@ -735,7 +735,6 @@ static const char *trace_options[] = {
"irq-info",
"markers",
"function-trace",
"print-tgid",
NULL
};
@ -1248,7 +1247,6 @@ void tracing_reset_all_online_cpus(void)
static unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1];
static unsigned map_cmdline_to_pid[SAVED_CMDLINES];
static char saved_cmdlines[SAVED_CMDLINES][TASK_COMM_LEN];
static unsigned saved_tgids[SAVED_CMDLINES];
static int cmdline_idx;
static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED;
@ -1450,7 +1448,6 @@ static int trace_save_cmdline(struct task_struct *tsk)
}
memcpy(&saved_cmdlines[idx], tsk->comm, TASK_COMM_LEN);
saved_tgids[idx] = tsk->tgid;
arch_spin_unlock(&trace_cmdline_lock);
@ -1488,25 +1485,6 @@ void trace_find_cmdline(int pid, char comm[])
preempt_enable();
}
int trace_find_tgid(int pid)
{
unsigned map;
int tgid;
preempt_disable();
arch_spin_lock(&trace_cmdline_lock);
map = map_pid_to_cmdline[pid];
if (map != NO_CMDLINE_MAP)
tgid = saved_tgids[map];
else
tgid = -1;
arch_spin_unlock(&trace_cmdline_lock);
preempt_enable();
return tgid;
}
void tracing_record_cmdline(struct task_struct *tsk)
{
if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on())
@ -2463,13 +2441,6 @@ static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m)
seq_puts(m, "# | | | | |\n");
}
static void print_func_help_header_tgid(struct trace_buffer *buf, struct seq_file *m)
{
print_event_info(buf, m);
seq_puts(m, "# TASK-PID TGID CPU# TIMESTAMP FUNCTION\n");
seq_puts(m, "# | | | | | |\n");
}
static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m)
{
print_event_info(buf, m);
@ -2482,18 +2453,6 @@ static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file
seq_puts(m, "# | | | |||| | |\n");
}
static void print_func_help_header_irq_tgid(struct trace_buffer *buf, struct seq_file *m)
{
print_event_info(buf, m);
seq_puts(m, "# _-----=> irqs-off\n");
seq_puts(m, "# / _----=> need-resched\n");
seq_puts(m, "# | / _---=> hardirq/softirq\n");
seq_puts(m, "# || / _--=> preempt-depth\n");
seq_puts(m, "# ||| / delay\n");
seq_puts(m, "# TASK-PID TGID CPU# |||| TIMESTAMP FUNCTION\n");
seq_puts(m, "# | | | | |||| | |\n");
}
void
print_trace_header(struct seq_file *m, struct trace_iterator *iter)
{
@ -2794,15 +2753,10 @@ void trace_default_header(struct seq_file *m)
} else {
if (!(trace_flags & TRACE_ITER_VERBOSE)) {
if (trace_flags & TRACE_ITER_IRQ_INFO)
if (trace_flags & TRACE_ITER_TGID)
print_func_help_header_irq_tgid(iter->trace_buffer, m);
else
print_func_help_header_irq(iter->trace_buffer, m);
print_func_help_header_irq(iter->trace_buffer,
m);
else
if (trace_flags & TRACE_ITER_TGID)
print_func_help_header_tgid(iter->trace_buffer, m);
else
print_func_help_header(iter->trace_buffer, m);
print_func_help_header(iter->trace_buffer, m);
}
}
}
@ -3659,50 +3613,6 @@ static const struct file_operations tracing_saved_cmdlines_fops = {
.llseek = generic_file_llseek,
};
static ssize_t
tracing_saved_tgids_read(struct file *file, char __user *ubuf,
size_t cnt, loff_t *ppos)
{
char *file_buf;
char *buf;
int len = 0;
int pid;
int i;
file_buf = kmalloc(SAVED_CMDLINES*(16+1+16), GFP_KERNEL);
if (!file_buf)
return -ENOMEM;
buf = file_buf;
for (i = 0; i < SAVED_CMDLINES; i++) {
int tgid;
int r;
pid = map_cmdline_to_pid[i];
if (pid == -1 || pid == NO_CMDLINE_MAP)
continue;
tgid = trace_find_tgid(pid);
r = sprintf(buf, "%d %d\n", pid, tgid);
buf += r;
len += r;
}
len = simple_read_from_buffer(ubuf, cnt, ppos,
file_buf, len);
kfree(file_buf);
return len;
}
static const struct file_operations tracing_saved_tgids_fops = {
.open = tracing_open_generic,
.read = tracing_saved_tgids_read,
.llseek = generic_file_llseek,
};
static ssize_t
tracing_set_trace_read(struct file *filp, char __user *ubuf,
size_t cnt, loff_t *ppos)
@ -6257,9 +6167,6 @@ init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer)
trace_create_file("trace_marker", 0220, d_tracer,
tr, &tracing_mark_fops);
trace_create_file("saved_tgids", 0444, d_tracer,
tr, &tracing_saved_tgids_fops);
trace_create_file("trace_clock", 0644, d_tracer, tr,
&trace_clock_fops);

View File

@ -653,7 +653,6 @@ static inline void __trace_stack(struct trace_array *tr, unsigned long flags,
extern cycle_t ftrace_now(int cpu);
extern void trace_find_cmdline(int pid, char comm[]);
extern int trace_find_tgid(int pid);
#ifdef CONFIG_DYNAMIC_FTRACE
extern unsigned long ftrace_update_tot_cnt;
@ -867,7 +866,6 @@ enum trace_iterator_flags {
TRACE_ITER_IRQ_INFO = 0x800000,
TRACE_ITER_MARKERS = 0x1000000,
TRACE_ITER_FUNCTION = 0x2000000,
TRACE_ITER_TGID = 0x4000000,
};
/*

View File

@ -702,25 +702,11 @@ int trace_print_context(struct trace_iterator *iter)
unsigned long secs, usec_rem;
char comm[TASK_COMM_LEN];
int ret;
int tgid;
trace_find_cmdline(entry->pid, comm);
ret = trace_seq_printf(s, "%16s-%-5d ", comm, entry->pid);
if (!ret)
return 0;
if (trace_flags & TRACE_ITER_TGID) {
tgid = trace_find_tgid(entry->pid);
if (tgid < 0)
ret = trace_seq_puts(s, "(-----) ");
else
ret = trace_seq_printf(s, "(%5d) ", tgid);
if (!ret)
return 0;
}
ret = trace_seq_printf(s, "[%03d] ", iter->cpu);
ret = trace_seq_printf(s, "%16s-%-5d [%03d] ",
comm, entry->pid, iter->cpu);
if (!ret)
return 0;