aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/events/core.c15
-rw-r--r--kernel/trace/trace.c2
-rw-r--r--kernel/trace/trace_printk.c5
3 files changed, 18 insertions, 4 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index ebaf962af46..1bedd73b0c6 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6520,7 +6520,6 @@ skip_type:
__perf_event_init_context(&cpuctx->ctx);
lockdep_set_class(&cpuctx->ctx.mutex, &cpuctx_mutex);
lockdep_set_class(&cpuctx->ctx.lock, &cpuctx_lock);
- cpuctx->ctx.type = cpu_context;
cpuctx->ctx.pmu = pmu;
cpuctx->jiffies_interval = 1;
INIT_LIST_HEAD(&cpuctx->rotation_list);
@@ -7150,7 +7149,19 @@ SYSCALL_DEFINE5(perf_event_open,
* task or CPU context:
*/
if (move_group) {
- if (group_leader->ctx->type != ctx->type)
+ /*
+ * Make sure we're both on the same task, or both
+ * per-cpu events.
+ */
+ if (group_leader->ctx->task != ctx->task)
+ goto err_context;
+
+ /*
+ * Make sure we're both events for the same CPU;
+ * grouping events for different CPUs is broken; since
+ * you can never concurrently schedule them anyhow.
+ */
+ if (group_leader->cpu != event->cpu)
goto err_context;
} else {
if (group_leader->ctx != ctx)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index d4026630f6d..1859cc4183d 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -1480,7 +1480,7 @@ void trace_find_cmdline(int pid, char comm[])
arch_spin_lock(&trace_cmdline_lock);
map = map_pid_to_cmdline[pid];
if (map != NO_CMDLINE_MAP)
- strcpy(comm, saved_cmdlines[map]);
+ strlcpy(comm, saved_cmdlines[map], TASK_COMM_LEN-1);
else
strcpy(comm, "<...>");
diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c
index a9077c1b4ad..f423e8d551c 100644
--- a/kernel/trace/trace_printk.c
+++ b/kernel/trace/trace_printk.c
@@ -272,7 +272,10 @@ static int t_show(struct seq_file *m, void *v)
const char *str = *fmt;
int i;
- seq_printf(m, "0x%lx : \"", *(unsigned long *)fmt);
+ if (!*fmt)
+ return 0;
+
+ seq_printf(m, "0x%lx : \"", 0L);
/*
* Tabs and new lines need to be converted.