Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Nov 2025 17:32:32 +0100
From:      FreeBSD User <freebsd@walstatt-de.de>
To:        dev-commits-src-main@freebsd.org
Subject:   Re: git: 9562994a7aac - main - kernel linker: Disable local sym resolution by default
Message-ID:  <20251125173232.7da258c1@hermann>
In-Reply-To: <6925b3f4.2c48c.61345a6b@gitrepo.freebsd.org>
References:  <6925b3f4.2c48c.61345a6b@gitrepo.freebsd.org>

index | next in thread | previous in thread | raw e-mail

On Tue, 25 Nov 2025 13:49:40 +0000
Ed Maste <emaste@FreeBSD.org> wrote:

> The branch main has been updated by emaste:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=9562994a7aacee2baae6ddee1a7b558b48ae39ef
> 
> commit 9562994a7aacee2baae6ddee1a7b558b48ae39ef
> Author:     Ed Maste <emaste@FreeBSD.org>
> AuthorDate: 2024-11-25 19:05:54 +0000
> Commit:     Ed Maste <emaste@FreeBSD.org>
> CommitDate: 2025-11-25 13:49:20 +0000
> 
>     kernel linker: Disable local sym resolution by default
>     
>     In 95c20faf11a1 and ecd8245e0d77 kib introduced support to have the
>     kernel linker stop resolving local symbols from other files, but did
>     not enable it by default to avoid surprises.  Flip the default now,
>     before FreeBSD 16.0.
>     
>     The debug.link_elf_leak_locals and debug.link_elf_obj_leak_locals
>     sysctls are available to revert to the previous behaviour if necessary.
>     
>     PR:             207898
>     Reviewed by:    bz
>     Relnotes:       Yes
>     Sponsored by:   The FreeBSD Foundation
>     Differential Revision: https://reviews.freebsd.org/D47742
> ---
>  UPDATING                | 9 +++++++++
>  sys/kern/link_elf.c     | 2 +-
>  sys/kern/link_elf_obj.c | 2 +-
>  3 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/UPDATING b/UPDATING
> index aaef0e5b4cd3..7f0cb44181d3 100644
> --- a/UPDATING
> +++ b/UPDATING
> @@ -27,6 +27,15 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 16.x IS SLOW:
>  	world, or to merely disable the most expensive debugging functionality
>  	at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
>  
> +20251125:
> +	The `debug.link_elf_leak_locals` and `debug.link_elf_obj_leak_locals`
> +	sysctls now default to 0, so the kernel module linker no longer
> +	performs symbol resolution against local symbols from other modules.
> +
> +	If a kernel module now fails to load because of an unresolved symbol,
> +	set these sysctls to 1 and file a bug report including details about
> +	the affected module.
> +
>  20251115:
>  	The FreeBSD-base repository is now defined in /etc/pkg/FreeBSD.conf,
>  	disabled by default.  In -CURRENT and -STABLE this points at nightly
> diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c
> index ebd203858b66..f910fc3d5df5 100644
> --- a/sys/kern/link_elf.c
> +++ b/sys/kern/link_elf.c
> @@ -203,7 +203,7 @@ static struct linker_class link_elf_class = {
>  	link_elf_methods, sizeof(struct elf_file)
>  };
>  
> -static bool link_elf_leak_locals = true;
> +static bool link_elf_leak_locals = false;
>  SYSCTL_BOOL(_debug, OID_AUTO, link_elf_leak_locals,
>      CTLFLAG_RWTUN, &link_elf_leak_locals, 0,
>      "Allow local symbols to participate in global module symbol resolution");
> diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c
> index a3a53a39bfd6..759cd75cba31 100644
> --- a/sys/kern/link_elf_obj.c
> +++ b/sys/kern/link_elf_obj.c
> @@ -192,7 +192,7 @@ static struct linker_class link_elf_class = {
>  	link_elf_methods, sizeof(struct elf_file)
>  };
>  
> -static bool link_elf_obj_leak_locals = true;
> +static bool link_elf_obj_leak_locals = false;
>  SYSCTL_BOOL(_debug, OID_AUTO, link_elf_obj_leak_locals,
>      CTLFLAG_RWTUN, &link_elf_obj_leak_locals, 0,
>      "Allow local symbols to participate in global module symbol resolution");
> 
After updating recent CURRENT, x11/nvidia-driver (nvidia-modeset) fails to load.

Setting both
debug.link_elf_leak_locals=1
debug.link_elf_obj_leak_locals=1

in /etc/sysctl.conf results in a stuck system: No graphics, stuck keyboard (no change to
console possible). Shutting down the box leaves me with a stuck system (need to shutoff
power the hard way, no reboot).

Regards,
oliver


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20251125173232.7da258c1>