* Adrian Hunter <adrian.hun...@intel.com> wrote: > On 30/01/14 10:59, Ingo Molnar wrote: > > > > * Adrian Hunter <adrian.hun...@intel.com> wrote: > > > >> On 29/01/14 20:57, Arnaldo Carvalho de Melo wrote: > >>> Em Wed, Jan 29, 2014 at 04:14:36PM +0200, Adrian Hunter escreveu: > >>>> Kernel maps map memory addresses to file offsets. > >>>> For symbol annotation, objdump needs the object VMA > >>>> addresses. For an unrelocated kernel, that is the > >>>> same as the memory address. > >>>> > >>>> The addresses passed to objdump for symbol annotation > >>>> did not take into account kernel relocation. This > >>>> patch fixes that. > >>> > >>> Question: To fix the problem reported by Linus, i.e. the very minimal > >>> fix, we only need this patch, right? > >> > >> Yes but the other fixes are needed too. > > > > So, for the specific case of kernel address layout randomization, how > > does this fix Linus's bug with KASLR enabled? How does the code > > recover the random, runtime offset of the relocated kernel, which > > varies from boot to boot? > > By comparing the address of a symbol ("_text" or "_stext") > in /proc/kallsyms (or perf.data - see below) with the same > symbol in vmlinux. > > perf tools call this the ref_reloc_sym and stores it in > perf.data hidden in the synthesized kernel mmap record. > e.g. > > 0xd8 [0x50]: event: 1 > . > . ... raw event: size 80 bytes > . 0000: 01 00 00 00 01 00 50 00 ff ff ff ff 00 00 00 00 ......P......... > . 0010: 00 00 00 17 00 00 00 00 ff ff ff a8 ff ff ff ff ................ > . 0020: c8 01 00 98 ff ff ff ff 5b 6b 65 72 6e 65 6c 2e ........[kernel. > . 0030: 6b 61 6c 6c 73 79 6d 73 5d 5f 73 74 65 78 74 00 kallsyms]_stext. > . 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > . > 0 0xd8 [0x50]: PERF_RECORD_MMAP -1/0: [0x17000000(0xffffffffa8ffffff) @ > 0xffffffff980001c8]: x [kernel.kallsyms]_stext > > That tells perf tools that _stext was 0xffffffff980001c8. > Compare to vmlinux: > > $ objdump -t vmlinux | grep _stext > ffffffff810001c8 g .text 0000000000000000 _stext > > So the relocation is 0xffffffff980001c8 - 0xffffffff810001c8 > = 0x17000000
Ok, cool, thanks! I'd suggest the whole fix series if perf/urgent material. Thanks, Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/