On Tue, 25 Nov 2025 13:49:40 +0000
Ed Maste <[email protected]> wrote:

> The branch main has been updated by emaste:
> 
> URL: 
> https://cgit.FreeBSD.org/src/commit/?id=9562994a7aacee2baae6ddee1a7b558b48ae39ef
> 
> commit 9562994a7aacee2baae6ddee1a7b558b48ae39ef
> Author:     Ed Maste <[email protected]>
> AuthorDate: 2024-11-25 19:05:54 +0000
> Commit:     Ed Maste <[email protected]>
> 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

Reply via email to