perf symbols: Handle /proc/sys/kernel/kptr_restrict
[firefly-linux-kernel-4.4.55.git] / tools / perf / util / event.c
index 6635fcd11ca558e1831d331a500474c8908a58d1..0fe9adf76379ecc02895cfbb46f35dcc8666dcbd 100644 (file)
@@ -553,9 +553,18 @@ static int perf_event__process_kernel_mmap(union perf_event *event,
                        goto out_problem;
 
                perf_event__set_kernel_mmap_len(event, machine->vmlinux_maps);
-               perf_session__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps,
-                                                        symbol_name,
-                                                        event->mmap.pgoff);
+
+               /*
+                * Avoid using a zero address (kptr_restrict) for the ref reloc
+                * symbol. Effectively having zero here means that at record
+                * time /proc/sys/kernel/kptr_restrict was non zero.
+                */
+               if (event->mmap.pgoff != 0) {
+                       perf_session__set_kallsyms_ref_reloc_sym(machine->vmlinux_maps,
+                                                                symbol_name,
+                                                                event->mmap.pgoff);
+               }
+
                if (machine__is_default_guest(machine)) {
                        /*
                         * preload dso of guest kernel and modules