All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <david.laight.linux@gmail.com>
To: sashiko-bot@kernel.org
Cc: sashiko-reviews@lists.linux.dev, "Petr Mladek" <pmladek@suse.com>,
	"Kees Cook" <kees@kernel.org>,
	linux-kbuild@vger.kernel.org, bpf@vger.kernel.org,
	"Jim Cromie" <jim.cromie@gmail.com>,
	"Lorenzo Stoakes" <ljs@kernel.org>,
	"Luis Chamberlain" <mcgrof@kernel.org>,
	"Andrey Grodzovsky" <andrey.grodzovsky@crowdstrike.com>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	"Andrii Nakryiko" <andrii@kernel.org>,
	"Samuel Wu" <wusamuel@google.com>,
	nathan@kernel.org, nsc@kernel.org
Subject: Re: [PATCH v3 next 04/13] scripts/kallsyms: make use of binary data output optional
Date: Sat, 14 Nov 2026 14:32:11 +0000	[thread overview]
Message-ID: <20261114143211.753aaba7@pumpkin> (raw)
In-Reply-To: <sashiko-outbox-208980@kernel.org>

On Wed, 11 Nov 2026 12:32:07 +0000
sashiko-bot@kernel.org wrote:

> Thank you for your contribution! Sashiko AI review found 3 potential
> issues to consider:
> - [Medium] scripts/kallsyms: wrong variable negated for negative offsets
>   in write_src()

Will fix in v4 - all the symbols offsets in my build are positive.

> - [Medium] scripts/kallsyms: 9-digit buffer in write_src() clobbers sign
>   on large offsets

I can't count! Only affects kernels that are larger that 1G.

> - [Low] scripts/kallsyms: missing endian.h include for htobe32() and
>   htole32()

Will change since v4 is needed,

David

> --
> 
> commit b5cbf4ceba792715bcee0dd6d58ce67f9542a5ad
> Author: David Laight <david.laight.linux@gmail.com>
> 
> scripts/kallsyms: make use of binary data output optional
> 
> This commit makes the binary output file and input ELF file optional in
> scripts/kallsyms, writes the markers table in target endianness when using
> binary output, and formats pc-relative offsets into a buffer for fwrite().
> 
> > diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
> > index aa3a8ec83fbb8..74db751600b4f 100644
> > --- a/scripts/kallsyms.c
> > +++ b/scripts/kallsyms.c  
> [ ... ]
> > @@ -406,51 +417,105 @@ static void write_src(FILE *out_bin_file, const char *out_bin_name)  
> [ ... ]
> > +		if (out_bin_file) {
> > +			if ((i & 0xFF) == 0)
> > +				markers[i >> 8] = big_endian ? htobe32(off) : htole32(off);  
> 
> [Severity: Low]
> Does scripts/kallsyms.c need to include <endian.h> for htobe32() and
> htole32()?  Glibc pulls it in transitively through <stdlib.h>, but on
> musl libc hosts neither scripts/kallsyms.c nor its included headers
> declare these functions, breaking the host tool build.
> 
> [ ... ]
> 
> > @@ -458,31 +523,15 @@ static void write_src(FILE *out_bin_file, const char *out_bin_name)  
> [ ... ]
> >  	output_label("kallsyms_offsets");
> >  
> >  	for (i = 0; i < table_cnt; i++) {
> >  		if (pc_relative) {
> > +			/* All 64 bit builds and (at least) relocatable 32 bit ones */
> > +			static char line[] = "\t.long\t_text - . +123456789";
> > +			char *end = line + sizeof(line) - 1;
> >  			long long offset = table[i]->addr - _text;
> > +			int off32;
> >  
> >  			if (offset < INT_MIN || offset > INT_MAX) {
> >  				errx(EXIT_FAILURE, "kallsyms failure: "
> > @@ -490,12 +539,28 @@ static void write_src(FILE *out_bin_file, const char *out_bin_name)
> >  					table[i]->addr);
> >  				exit(EXIT_FAILURE);
> >  			}
> > -			printf("\t.long\t_text - . + (%d)\t/* %s */\n",
> > -			       (int)offset, table[i]->sym);
> > +
> > +			/* Build the line so the the faster fwrite() can be used */
> > +			*end-- = out_bin_file ? '\n' : '\t';
> > +			memset(end - 8, ' ', 8);
> > +			off32 = offset;
> > +			if (off32 < 0) {
> > +				end[-9] = '-';
> > +				offset = -off32;
> > +			} else {
> > +				end[-9] = '+';
> > +			}  
> 
> [Severity: Medium]
> Should this negate off32 (or an unsigned magnitude) instead of assigning
> -off32 back to offset?  Because offset is not used after this point,
> off32 stays negative when a symbol lies below _text, so off32 % 10 in the
> digit loop below yields negative remainders and writes non-digit ASCII
> characters into the assembly output (and -off32 overflows if off32 is
> INT_MIN).
> 
> > +			do
> > +				*end-- = '0' + off32 % 10;
> > +			while (off32 /= 10);  
> 
> [Severity: Medium]
> Can a 10-digit offset in [INT_MIN, INT_MAX] overwrite the '+' or '-' sign
> in line[]?  The template only reserves 9 digit slots after end[-9], so any
> symbol at least 1,000,000,000 bytes from _text runs 10 iterations of the
> loop and clobbers end[-9], emitting invalid assembly syntax.
> 


  reply	other threads:[~2026-11-14 14:32 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-11 11:58 [PATCH v3 next 00/13] kallsyms: optimise symbol search by name David Laight
2026-11-11 11:58 ` [PATCH v3 next 01/13] scripts/kallsyms: Avoid overrunning on-stack buffer David Laight
2026-11-11 11:59 ` [PATCH v3 next 02/13] scripts/kallsyms: Improve error reporting David Laight
2026-11-11 12:14   ` sashiko-bot
2026-11-14 14:28     ` David Laight
2026-11-11 23:33   ` bot+bpf-ci
2026-11-14 14:29     ` David Laight
2026-11-11 11:59 ` [PATCH v3 next 03/13] scripts/elf-parse: add elf_map_big_endian() helper David Laight
2026-11-11 11:59 ` [PATCH v3 next 04/13] scripts/kallsyms: make use of binary data output optional David Laight
2026-11-11 12:32   ` sashiko-bot
2026-11-14 14:32     ` David Laight [this message]
2026-11-11 23:34   ` bot+bpf-ci
2026-11-11 11:59 ` [PATCH v3 next 05/13] kallsyms: Fix selftest startup delay David Laight
2026-11-11 12:36   ` sashiko-bot
2026-11-14 14:33     ` David Laight
2026-11-11 11:59 ` [PATCH v3 next 06/13] kallsyms: Improve selftest test_perf_kallsyms_lookup_name() output David Laight
2026-11-11 23:17   ` bot+bpf-ci
2026-11-11 11:59 ` [PATCH v3 next 07/13] kallsyms: Match compressed tokens on the fly during binary search David Laight
2026-11-11 12:46   ` sashiko-bot
2026-11-13 23:39   ` Samuel Wu
2026-11-11 11:59 ` [PATCH v3 next 08/13] kallsyms: Optimise symbol name search David Laight
2026-11-11 12:59   ` sashiko-bot
2026-11-14  0:45   ` Samuel Wu
2026-11-14 12:20     ` David Laight
2026-11-11 11:59 ` [PATCH v3 next 09/13] kallsyms: Add a kernel parameter to change the kallsyms_markers[] density David Laight
2026-11-11 13:07   ` sashiko-bot
2026-11-11 23:33   ` bot+bpf-ci
2026-11-14  1:01   ` Samuel Wu
2026-11-14 12:23     ` David Laight
2026-11-11 11:59 ` [PATCH v3 next 10/13] scripts/kallsyms: Keep full expansion of tokens David Laight
2026-11-11 11:59 ` [PATCH v3 next 11/13] scripts/kallsyms: Optimise compress_symbols() David Laight
2026-11-11 11:59 ` [PATCH v3 next 12/13] scripts/kallsyms: Reuse tokens that have no references David Laight
2026-11-11 23:34   ` bot+bpf-ci
2026-11-11 11:59 ` [PATCH v3 next 13/13] scripts/kallsyms: Reuse little-used compression tokens David Laight
2026-11-11 13:37   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261114143211.753aaba7@pumpkin \
    --to=david.laight.linux@gmail.com \
    --cc=andrey.grodzovsky@crowdstrike.com \
    --cc=andrii@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=jim.cromie@gmail.com \
    --cc=kees@kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=ljs@kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=nathan@kernel.org \
    --cc=nsc@kernel.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=sashiko-bot@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=wusamuel@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.