[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 0/2] tools/symbols: fix oversized names and token expansion


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Mykola Kvach <xakep.amatop@xxxxxxxxx>
  • Date: Mon, 9 Nov 2026 13:38:17 +0200
  • Arc-authentication-results: i=1; mx.google.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=sLJ0xQ2H2oUZAxE0i0Djcbh0RdCztIeWeMhcv3iqtVY=; fh=Mv3hG8hx3DTeEik7nXu79ZB59syOS+U84gOHQLKxW4g=; b=p1HSY7dD4Is8H8hM4/mmTbWhT7iAKdCbPPUBBIutHiwKjcdHw4MUfRrOvz+idKWNEl 3A1EZB63EMTg60xi0FVwBFPI3pg9Xm3Ff91GhpWZOs6hpkNyLJBqhnNr3w5lo+y64k6h 04yRkwM7U+nFo8GJ1ajS8tlXz+aYlgXgl97yErduj0vjZOMWAltRKqapFcz7mWLizGIU FKaFw8t03xFP+d/jgm6p+mM9mJs1KpV10/YEBrhaWG/5yRMkQNeBK6i6lCFv9LRhzzjx yXbrvcFmMIJDfeLmx5iLwNu+m+wei5gQS5LzfEgEQ3el8sHZhRlOp37ksUFMIfaGk/mZ aMrA==; darn=lists.xenproject.org
  • Arc-seal: i=1; a=rsa-sha256; t=1794224308; cv=none; d=google.com; s=arc-20260327; b=GbGK+oDRtdJ+1vPG07R3074Um72HE0dZl76r3eDHqxo5mij9LGucbSmYg+K7mJdL80 5yupvEs6zjRc65iamhwo5np5xwFYgl/RMThoVNqBNp1BGqq0zxEBtEUisDJWqKuGhCNn 8NSQpZpph/7jBa7ZX1pQP1M343FMLrmJztuJhm/LM0cN4MubHbGZLvh2PdwPImLaaUdS Gs2o5+JrAHPM+RNaiHTBXW/S4wZsgFWKDmNl3FoJwxXIlctazFmg0qfYoYYqEgdSmBEw 4xBwATKnM9dVYBRnYq2J/DtGCm3PmWDti8D66y9XjD23UcZ2LWcsvOckWJSNAMMO4zzP 2nxA==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=20260707 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version"
  • Cc: Mykola Kvach <mykola_kvach@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger@xxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Mon, 09 Nov 2026 11:38:31 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

Hi Jan,

Thank you for the review.
Sorry for the late reply.

On Thu, Oct 8, 2026 at 10:35 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>
> On 07.10.2026 20:11, Mykola Kvach wrote:
> > Patch 1 fixes the first bug. In SYSV input, local symbols are prefixed
> > with the source file name ("filename#symbol"). A long absolute build
> > path can therefore create a name longer than 127 bytes, even when the
> > symbol itself is short. A debug Xen build on an Orange Pi 5 (RK3588S)
> > crashed during the boot self-tests: symbols_lookup_by_name() expanded
> > such a name into its 128-byte buffer and overwrote the saved frame
> > pointer and return address. The patch rejects retained names longer than
> > KSYM_NAME_LEN during the build and prints the offending name.
> > Readable --xensyms maps are not restricted. Nothing changes for names
> > of at most 127 bytes.
> >
> > A build from a long absolute source path can now fail at link time.
>
> This isn't acceptable imo. Omitting such a symbol is a far less severe
> action (see below for another option).
>
> As a more general remark: We've inherited this tool from Linux. Any
> issues we find want cross checking there. If fixed there, taking their
> change is often preferable over making our own. To cover overly long
> symbols names, they have a check in read_symbol(). As we add the
> filename for static symbols there as well, I don't see why we couldn't
> similarly have the check there.

Agreed. v2 will report the name and skip the symbol, as Linux does,
and the check is in read_symbol().

>
> Furthermore, if the main issue is with long filenames, for static
> symbols an option would be to replace the filename prefix with some
> surrogate (either a shortened form of the path, or something like
> "...#").

I'd prefer to skip the symbol here. A surrogate such as "...#" makes
different static symbols look the same, and --error-dup can then fail
in livepatch builds.

>
> Yet further, the problem of (long or not) absolute path names is to
> be solved differently anyway. Not just for reproducible builds we want
> to omit them altogether. There are two separate proposals [1], [2];
> what's missing is a decision which way to go. (Both are pending a
> resubmission, yet perhaps not just me but also Marek is hesitant to
> do so when the decision which route to go is still pending.)

Agreed, both proposals address the absolute-path problem.
In my arm64 assembly test, both remove the absolute path from
the file symbol. With -fdebug-prefix-map alone, the path stays.

>
> > On x86, in-tree builds use relative paths and are not affected. An
> > out-of-tree build with the default config fails if the absolute path of
> > xen/ is longer than 78 bytes; the longest such name is
> > kexec_reloc.S#compatibility_mode.
> >
> > Patch 2 fixes the second bug. In the compressed stream, each symbol is
> > stored as [type][name]. A compression token can therefore expand to
> > the type byte plus a full 127-byte name (128 bytes), and write_src()
> > adds a terminating NUL. Its local buffer was 128 bytes, one byte too
> > small. The patch allocates KSYM_NAME_LEN + 2 bytes (type + name +
> > NUL). This bug can trigger with fully valid names, but only with a very
> > small symbol table; real symbol tables do not hit it. The new size
> > relies on the name limit from patch 1.
>
> Linux'es write_src() doesn't even add 1 to KSYM_NAME_LEN. The +1 there
> went away in 2.6.23, commit 9281acea6a36 ("kallsyms: make KSYM_NAME_LEN
> include space for trailing '\0'"). (Later KSYM_NAME_LEN was bumped to
> 512, btw.) Might we not want to follow that approach? (There then still
> looks to be an off-by-one due to the type that's being prefixed to all
> symbols. If that's indeed the case, a patch may want sending also for
> Linux.)

Yes. v2 will make KSYM_NAME_LEN include the trailing NUL.
Names are still limited to 127 bytes. The token buffer has
one extra byte for the type.

I also reproduced the overflow in Linux 7.4-rc2 with ASan.
Expanding the type, a 511-byte name and the NUL needs 513 bytes,
but the buffer has 512. I have not prepared a Linux patch.

Best regards,
Mykola



>
> Jan
>
> [1] https://lists.xen.org/archives/html/xen-devel/2025-09/msg00311.html
> [2] https://lists.xen.org/archives/html/xen-devel/2025-09/msg00362.html
>



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.