lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Thu, 24 Nov 2022 09:55:13 -0300
From:   Arnaldo Carvalho de Melo <acme@...nel.org>
To:     Leo Yan <leo.yan@...aro.org>
Cc:     Ajay Kaher <akaher@...are.com>, peterz@...radead.org,
        mingo@...hat.com, mark.rutland@....com,
        alexander.shishkin@...ux.intel.com, jolsa@...nel.org,
        namhyung@...nel.org, rostedt@...dmis.org,
        linux-perf-users@...r.kernel.org, linux-kernel@...r.kernel.org,
        srivatsab@...are.com, srivatsa@...il.mit.edu, amakhalov@...are.com,
        vsirnapalli@...are.com
Subject: Re: [PATCH] perf symbol: correction while adjusting symbol

Em Thu, Nov 24, 2022 at 05:50:23PM +0800, Leo Yan escreveu:
> Hi Ajay,
> 
> On Wed, Nov 23, 2022 at 03:48:16PM +0530, Ajay Kaher wrote:
> > perf doesn't provide proper symbol information for specially crafted
> > .debug files.
> > 
> > Sometimes .debug file may not have similar program header as runtime
> > ELF file. For example if we generate .debug file using objcopy
> > --only-keep-debug resulting file will not contain .text, .data and
> > other runtime sections. That means corresponding program headers will
> > have zero FileSiz and modified Offset.
> > 
> > Example: program header of text section of libxxx.so:
> > 
> > Type           Offset             VirtAddr           PhysAddr
> >                FileSiz            MemSiz              Flags  Align
> > LOAD        0x00000000003d3000 0x00000000003d3000 0x00000000003d3000
> >             0x000000000055ae80 0x000000000055ae80  R E    0x1000
> > 
> > Same program header after executing:
> > objcopy --only-keep-debug libxxx.so libxxx.so.debug
> > 
> > LOAD        0x0000000000001000 0x00000000003d3000 0x00000000003d3000
> >             0x0000000000000000 0x000000000055ae80  R E    0x1000
> > 
> > Offset and FileSiz have been changed. 
> > 
> > Following formula will not provide correct value, if program header
> > taken from .debug file (syms_ss):
> > 
> >     sym.st_value -= phdr.p_vaddr - phdr.p_offset;
> > 
> > Correct program header information is located inside runtime ELF
> > file (runtime_ss).
> > 
> > Fixes: 2d86612aacb7 ("perf symbol: Correct address for bss symbols")
> > Signed-off-by: Ajay Kaher <akaher@...are.com>
> 
> 
> Just curious how you can produce this issue?  IIUC, the runtime symbol
> files are copied into .debug folder and they can be found by perf tool
> by matching build ID.  Seems to me, you manully use
> "objcopy --only-keep-debug" command to strip runtime info from elf files
> under .debug folder.  Do I understand correctly?
> 
> Though I have above question, this patch itself looks good to me,
> thanks for the fixing!
> 
> Reviewed-by: Leo Yan <leo.yan@...aro.org>

Had to apply it manually, as it was done on a codebase older than this:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6d518ac7be6223811ab947897273b1bbef846180

author	Ian Rogers <irogers@...gle.com>	2022-07-31 09:49:23 -0700
committer	Arnaldo Carvalho de Melo <acme@...hat.com>	2022-08-01 09:30:36 -0300

@@ -1305,16 +1305,29 @@ dso__load_sym_internal(struct dso *dso, struct map *map, struct symsrc *syms_ss,

 			if (elf_read_program_header(syms_ss->elf,
 						    (u64)sym.st_value, &phdr)) {
-				pr_warning("%s: failed to find program header for "
+				pr_debug4("%s: failed to find program header for "
 					   "symbol: %s st_value: %#" PRIx64 "\n",
 					   __func__, elf_name, (u64)sym.st_value);

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ