aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/fork.c9
-rw-r--r--kernel/perf_counter.c29
2 files changed, 21 insertions, 17 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 467746b3f0aa..4812d60b29f8 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1408,14 +1408,11 @@ long do_fork(unsigned long clone_flags,
1408 if (clone_flags & CLONE_VFORK) { 1408 if (clone_flags & CLONE_VFORK) {
1409 p->vfork_done = &vfork; 1409 p->vfork_done = &vfork;
1410 init_completion(&vfork); 1410 init_completion(&vfork);
1411 } else if (!(clone_flags & CLONE_VM)) {
1412 /*
1413 * vfork will do an exec which will call
1414 * set_task_comm()
1415 */
1416 perf_counter_fork(p);
1417 } 1411 }
1418 1412
1413 if (!(clone_flags & CLONE_THREAD))
1414 perf_counter_fork(p);
1415
1419 audit_finish_fork(p); 1416 audit_finish_fork(p);
1420 tracehook_report_clone(regs, clone_flags, nr, p); 1417 tracehook_report_clone(regs, clone_flags, nr, p);
1421 1418
diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c
index 8bf997d86bf4..5c6fae4f43d8 100644
--- a/kernel/perf_counter.c
+++ b/kernel/perf_counter.c
@@ -2969,8 +2969,10 @@ static void perf_counter_comm_event(struct perf_comm_event *comm_event)
2969 struct perf_cpu_context *cpuctx; 2969 struct perf_cpu_context *cpuctx;
2970 struct perf_counter_context *ctx; 2970 struct perf_counter_context *ctx;
2971 unsigned int size; 2971 unsigned int size;
2972 char *comm = comm_event->task->comm; 2972 char comm[TASK_COMM_LEN];
2973 2973
2974 memset(comm, 0, sizeof(comm));
2975 strncpy(comm, comm_event->task->comm, sizeof(comm));
2974 size = ALIGN(strlen(comm)+1, sizeof(u64)); 2976 size = ALIGN(strlen(comm)+1, sizeof(u64));
2975 2977
2976 comm_event->comm = comm; 2978 comm_event->comm = comm;
@@ -3089,8 +3091,15 @@ static void perf_counter_mmap_event(struct perf_mmap_event *mmap_event)
3089 char *buf = NULL; 3091 char *buf = NULL;
3090 const char *name; 3092 const char *name;
3091 3093
3094 memset(tmp, 0, sizeof(tmp));
3095
3092 if (file) { 3096 if (file) {
3093 buf = kzalloc(PATH_MAX, GFP_KERNEL); 3097 /*
3098 * d_path works from the end of the buffer backwards, so we
3099 * need to add enough zero bytes after the string to handle
3100 * the 64bit alignment we do later.
3101 */
3102 buf = kzalloc(PATH_MAX + sizeof(u64), GFP_KERNEL);
3094 if (!buf) { 3103 if (!buf) {
3095 name = strncpy(tmp, "//enomem", sizeof(tmp)); 3104 name = strncpy(tmp, "//enomem", sizeof(tmp));
3096 goto got_name; 3105 goto got_name;
@@ -3101,9 +3110,11 @@ static void perf_counter_mmap_event(struct perf_mmap_event *mmap_event)
3101 goto got_name; 3110 goto got_name;
3102 } 3111 }
3103 } else { 3112 } else {
3104 name = arch_vma_name(mmap_event->vma); 3113 if (arch_vma_name(mmap_event->vma)) {
3105 if (name) 3114 name = strncpy(tmp, arch_vma_name(mmap_event->vma),
3115 sizeof(tmp));
3106 goto got_name; 3116 goto got_name;
3117 }
3107 3118
3108 if (!vma->vm_mm) { 3119 if (!vma->vm_mm) {
3109 name = strncpy(tmp, "[vdso]", sizeof(tmp)); 3120 name = strncpy(tmp, "[vdso]", sizeof(tmp));
@@ -3672,7 +3683,7 @@ static const struct pmu perf_ops_task_clock = {
3672void perf_tpcounter_event(int event_id) 3683void perf_tpcounter_event(int event_id)
3673{ 3684{
3674 struct perf_sample_data data = { 3685 struct perf_sample_data data = {
3675 .regs = get_irq_regs(); 3686 .regs = get_irq_regs(),
3676 .addr = 0, 3687 .addr = 0,
3677 }; 3688 };
3678 3689
@@ -3688,16 +3699,12 @@ extern void ftrace_profile_disable(int);
3688 3699
3689static void tp_perf_counter_destroy(struct perf_counter *counter) 3700static void tp_perf_counter_destroy(struct perf_counter *counter)
3690{ 3701{
3691 ftrace_profile_disable(perf_event_id(&counter->attr)); 3702 ftrace_profile_disable(counter->attr.config);
3692} 3703}
3693 3704
3694static const struct pmu *tp_perf_counter_init(struct perf_counter *counter) 3705static const struct pmu *tp_perf_counter_init(struct perf_counter *counter)
3695{ 3706{
3696 int event_id = perf_event_id(&counter->attr); 3707 if (ftrace_profile_enable(counter->attr.config))
3697 int ret;
3698
3699 ret = ftrace_profile_enable(event_id);
3700 if (ret)
3701 return NULL; 3708 return NULL;
3702 3709
3703 counter->destroy = tp_perf_counter_destroy; 3710 counter->destroy = tp_perf_counter_destroy;