public inbox for ipfire-scm@lists.ipfire.org
 help / color / mirror / Atom feed
* [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 17f2e792aa0aa2271d121cd4590c042805862dcf
@ 2026-01-28 11:37 Michael Tremer
  0 siblings, 0 replies; only message in thread
From: Michael Tremer @ 2026-01-28 11:37 UTC (permalink / raw)
  To: ipfire-scm

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 142170 bytes --]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".

The branch, next has been updated
       via  17f2e792aa0aa2271d121cd4590c042805862dcf (commit)
       via  37e09a052707ac60f9267a5635aacfb556433816 (commit)
       via  35a37d4459cde7003204cf5501c407e3be3d1985 (commit)
       via  664489f7729ec06e5344144917bb340aa1c484b5 (commit)
       via  4242903bc61b5587dcccd10b63d3e2d7dbd92068 (commit)
       via  2e24021dabc7f9884e5a034263836f4bd6800b88 (commit)
       via  2ac8da749dbbcb6cd2ae6b84ead4fac68b090b24 (commit)
       via  ab514d410ef223c58d83d92e47860e6d655081ef (commit)
       via  9a64e079e26d46c191a11a2753a626ba4439b878 (commit)
       via  4f796249bd7c82b1266486b0a1e771ce3b8e30e5 (commit)
       via  d358d10c0788bf8eb09f0afba711c4e5cb4ed224 (commit)
       via  2b1aed32fa23e94f34c514d9e78a56386ae82d86 (commit)
       via  a7454ce9383b139282326fd3e28e2d89c895281f (commit)
       via  ebbf705e257cd51e8d45075f483bab3cfc2eddf0 (commit)
       via  0a28da94e0d91440b74858f06ae6359182a9a776 (commit)
       via  e775c34b62fb2a90750634217a8bf47b9cfa5f83 (commit)
       via  4510441e47ec8fb728ce945e25d1309c7f7582eb (commit)
       via  7d2f78674585653a4171cdac20d34cd1a64e08f8 (commit)
       via  b0c6dc6bc879c7d56310a99077631677c0bff008 (commit)
       via  42204886e0a10528d33a04337dddee4665406349 (commit)
       via  7a8f3d602b0add100b06adaf2ceb264a92e9bb05 (commit)
       via  d8bb4039f2d42ea50214cac969ad38e287a6a804 (commit)
       via  6f164e7aeaaf4fd4c0d3d6cac18cded292eea7e8 (commit)
       via  2a68708020ca23630527567ad9771d1385d91d32 (commit)
       via  ed3faee67cff796eec3e4d9cc0aff16d05d826bb (commit)
      from  643427acc6bf4f87003a5639e242abe80684d953 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 17f2e792aa0aa2271d121cd4590c042805862dcf
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jan 28 11:36:51 2026 +0000

    core201: Ship krb
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 37e09a052707ac60f9267a5635aacfb556433816
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jan 28 11:36:08 2026 +0000

    core201: Ship binutils
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 35a37d4459cde7003204cf5501c407e3be3d1985
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jan 28 11:34:38 2026 +0000

    core201: Ship glibc
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 664489f7729ec06e5344144917bb340aa1c484b5
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Wed Jan 28 11:33:07 2026 +0000

    Start Core Update 201
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 4242903bc61b5587dcccd10b63d3e2d7dbd92068
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Jan 27 17:02:51 2026 +0000

    oath-toolkit: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 2e24021dabc7f9884e5a034263836f4bd6800b88
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Jan 27 16:45:07 2026 +0000

    flashrom: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 2ac8da749dbbcb6cd2ae6b84ead4fac68b090b24
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Jan 27 16:20:05 2026 +0000

    libtpms: Fix build agsinst glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit ab514d410ef223c58d83d92e47860e6d655081ef
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Jan 27 16:19:44 2026 +0000

    socat: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 9a64e079e26d46c191a11a2753a626ba4439b878
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Jan 27 16:19:21 2026 +0000

    tor: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 4f796249bd7c82b1266486b0a1e771ce3b8e30e5
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Tue Jan 27 11:10:57 2026 +0000

    openvmtools: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit d358d10c0788bf8eb09f0afba711c4e5cb4ed224
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Jan 26 17:49:46 2026 +0000

    mpd: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 2b1aed32fa23e94f34c514d9e78a56386ae82d86
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Jan 26 16:46:26 2026 +0000

    krb5: Update to 1.22.1
    
    This also fixes a build against glibc >= 2.43.
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit a7454ce9383b139282326fd3e28e2d89c895281f
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Jan 26 15:55:27 2026 +0000

    ntp: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit ebbf705e257cd51e8d45075f483bab3cfc2eddf0
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Jan 26 11:44:41 2026 +0000

    nano: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 0a28da94e0d91440b74858f06ae6359182a9a776
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sun Jan 25 15:06:36 2026 +0000

    systemd: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit e775c34b62fb2a90750634217a8bf47b9cfa5f83
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sun Jan 25 14:31:35 2026 +0000

    elfutils: Fix build with glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 4510441e47ec8fb728ce945e25d1309c7f7582eb
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 15:46:42 2026 +0000

    util-linux: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 7d2f78674585653a4171cdac20d34cd1a64e08f8
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 15:03:40 2026 +0000

    gettext: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit b0c6dc6bc879c7d56310a99077631677c0bff008
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 14:41:45 2026 +0000

    glibc: Update to 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 42204886e0a10528d33a04337dddee4665406349
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 14:38:22 2026 +0000

    m4: Fix build with glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 7a8f3d602b0add100b06adaf2ceb264a92e9bb05
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 14:28:13 2026 +0000

    coreutils: Fix build against glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit d8bb4039f2d42ea50214cac969ad38e287a6a804
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 14:08:33 2026 +0000

    gcc: Fix FTBS with glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 6f164e7aeaaf4fd4c0d3d6cac18cded292eea7e8
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 13:12:38 2026 +0000

    libxcrypt: Fix FTBFS with glibc >= 2.43
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 2a68708020ca23630527567ad9771d1385d91d32
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Jan 24 13:09:06 2026 +0000

    binutils: Update to 2.45.1
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

-----------------------------------------------------------------------

Summary of changes:
 config/rootfiles/common/aarch64/binutils           |   4 +-
 config/rootfiles/common/aarch64/glibc              |  20 +-
 config/rootfiles/common/riscv64/binutils           |   4 +-
 config/rootfiles/common/riscv64/glibc              |  18 +
 config/rootfiles/common/suricata-reporter          |   3 +-
 config/rootfiles/common/x86_64/binutils            |   4 +-
 config/rootfiles/common/x86_64/glibc               |  20 +-
 config/rootfiles/core/{200 => 201}/exclude         |   0
 .../133 => core/201}/filelists/aarch64/binutils    |   0
 .../core/{200 => 201}/filelists/aarch64/glibc      |   0
 .../core/{200 => 201}/filelists/core-files         |   0
 .../{oldcore/163 => core/201/filelists}/files      |   0
 .../{oldcore/169 => core/201}/filelists/krb5       |   0
 .../180 => core/201}/filelists/riscv64/binutils    |   0
 .../core/{200 => 201}/filelists/riscv64/glibc      |   0
 .../100 => core/201}/filelists/x86_64/binutils     |   0
 .../core/{200 => 201}/filelists/x86_64/glibc       |   0
 .../rootfiles/{oldcore/152 => core/201}/update.sh  |  14 +-
 config/rootfiles/{core => oldcore}/200/exclude     |   0
 .../{core => oldcore}/200/filelists/aarch64/glibc  |   0
 .../{core => oldcore}/200/filelists/aarch64/linux  |   0
 .../{core => oldcore}/200/filelists/apache2        |   0
 .../rootfiles/{core => oldcore}/200/filelists/bash |   0
 .../rootfiles/{core => oldcore}/200/filelists/bind |   0
 .../{core => oldcore}/200/filelists/core-files     |   0
 .../{core => oldcore}/200/filelists/coreutils      |   0
 .../rootfiles/{core => oldcore}/200/filelists/curl |   0
 .../{core => oldcore}/200/filelists/dhcpcd         |   0
 .../{core => oldcore}/200/filelists/dracut-ng      |   0
 .../{core => oldcore}/200/filelists/elinks         |   0
 .../{core => oldcore}/200/filelists/files          |   0
 .../rootfiles/{core => oldcore}/200/filelists/fuse |   0
 .../rootfiles/{core => oldcore}/200/filelists/gdb  |   0
 .../rootfiles/{core => oldcore}/200/filelists/glib |   0
 .../{core => oldcore}/200/filelists/gnupg          |   0
 .../{core => oldcore}/200/filelists/gnutls         |   0
 .../{core => oldcore}/200/filelists/harfbuzz       |   0
 .../{core => oldcore}/200/filelists/hwdata         |   0
 .../{core => oldcore}/200/filelists/iana-etc       |   0
 .../200/filelists/ids-ruleset-sources              |   0
 .../{core => oldcore}/200/filelists/iptables       |   0
 .../{core => oldcore}/200/filelists/libarchive     |   0
 .../{core => oldcore}/200/filelists/libassuan      |   0
 .../{core => oldcore}/200/filelists/libcap-ng      |   0
 .../{core => oldcore}/200/filelists/libgpg-error   |   0
 .../{core => oldcore}/200/filelists/libidn2        |   0
 .../{core => oldcore}/200/filelists/libjpeg        |   0
 .../{core => oldcore}/200/filelists/libksba        |   0
 .../{core => oldcore}/200/filelists/libpcap        |   0
 .../{core => oldcore}/200/filelists/libpng         |   0
 .../{core => oldcore}/200/filelists/libtasn1       |   0
 .../{core => oldcore}/200/filelists/liburcu        |   0
 .../{core => oldcore}/200/filelists/libxcrypt      |   0
 .../rootfiles/{core => oldcore}/200/filelists/lvm2 |   0
 .../{core => oldcore}/200/filelists/mdadm          |   0
 .../{core => oldcore}/200/filelists/meson          |   0
 .../rootfiles/{core => oldcore}/200/filelists/newt |   0
 .../{core => oldcore}/200/filelists/ninja          |   0
 .../rootfiles/{core => oldcore}/200/filelists/npth |   0
 .../{core => oldcore}/200/filelists/oath-toolkit   |   0
 .../{core => oldcore}/200/filelists/openvpn        |   0
 .../{core => oldcore}/200/filelists/readline       |   0
 .../{core => oldcore}/200/filelists/riscv64/glibc  |   0
 .../{core => oldcore}/200/filelists/riscv64/linux  |   0
 .../{core => oldcore}/200/filelists/sqlite         |   0
 .../{core => oldcore}/200/filelists/strongswan     |   0
 .../{core => oldcore}/200/filelists/suricata       |   0
 .../200/filelists/suricata-reporter                |   0
 .../{core => oldcore}/200/filelists/tzdata         |   0
 .../{core => oldcore}/200/filelists/unbound        |   0
 .../rootfiles/{core => oldcore}/200/filelists/vim  |   0
 .../{core => oldcore}/200/filelists/wireless-regdb |   0
 .../{core => oldcore}/200/filelists/x86_64/glibc   |   0
 .../200/filelists/x86_64/intel-microcode           |   0
 .../{core => oldcore}/200/filelists/x86_64/linux   |   0
 .../rootfiles/{core => oldcore}/200/filelists/xz   |   0
 config/rootfiles/{core => oldcore}/200/update.sh   |   0
 lfs/binutils                                       |   6 +-
 lfs/coreutils                                      |   4 +-
 lfs/elfutils                                       |   1 +
 lfs/flashrom                                       |   1 +
 lfs/gcc                                            |   2 +
 lfs/gettext                                        |   4 +
 lfs/glibc                                          |   7 +-
 lfs/krb5                                           |   8 +-
 lfs/libtpms                                        |   1 +
 lfs/libxcrypt                                      |   1 +
 lfs/m4                                             |   3 +
 lfs/mpd                                            |   3 +-
 lfs/nano                                           |   2 +
 lfs/ntp                                            |   2 +
 lfs/oath-toolkit                                   |   2 +
 lfs/openvmtools                                    |   7 +-
 lfs/socat                                          |   1 +
 lfs/systemd                                        |   2 +
 lfs/tor                                            |   2 +
 lfs/util-linux                                     |   1 +
 make.sh                                            |   2 +-
 src/patches/binutils-2.45.1-gprofng-FTBFS.patch    |  31 +
 src/patches/elfutils-0.194-FTBFS.patch             | 301 +++++++++
 ...-9c9d3aef2f66625d9cb03ef4baee10ed6648e681.patch |  73 ++
 src/patches/glibc-2.42-CVE-2025-15281.patch        | 175 -----
 src/patches/glibc-2.42-CVE-2026-0861.patch         |  88 ---
 src/patches/glibc-2.42-CVE-2026-0915.patch         |  77 ---
 src/patches/krb5-1.12.3-FTBFS.patch                | 188 ++++++
 src/patches/libtmps-0.10.2-FTBFS.patch             |  33 +
 ...-174c24d6e87aeae631bc0a7bb1ba983cf8def4de.patch |  38 ++
 src/patches/mpd-0.24.5-openat2.patch               |  60 ++
 src/patches/socat-1.8.1.0-printtime.patch          |  13 +
 src/patches/systemd-258-FTBFS.patch                | 744 +++++++++++++++++++++
 src/patches/util-linux-2.41.2-FTBFS-bsearch.patch  |  40 ++
 111 files changed, 1638 insertions(+), 372 deletions(-)
 copy config/rootfiles/core/{200 => 201}/exclude (100%)
 copy config/rootfiles/{oldcore/133 => core/201}/filelists/aarch64/binutils (100%)
 copy config/rootfiles/core/{200 => 201}/filelists/aarch64/glibc (100%)
 copy config/rootfiles/core/{200 => 201}/filelists/core-files (100%)
 copy config/rootfiles/{oldcore/163 => core/201/filelists}/files (100%)
 copy config/rootfiles/{oldcore/169 => core/201}/filelists/krb5 (100%)
 copy config/rootfiles/{oldcore/180 => core/201}/filelists/riscv64/binutils (100%)
 copy config/rootfiles/core/{200 => 201}/filelists/riscv64/glibc (100%)
 copy config/rootfiles/{oldcore/100 => core/201}/filelists/x86_64/binutils (100%)
 copy config/rootfiles/core/{200 => 201}/filelists/x86_64/glibc (100%)
 copy config/rootfiles/{oldcore/152 => core/201}/update.sh (93%)
 rename config/rootfiles/{core => oldcore}/200/exclude (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/aarch64/glibc (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/aarch64/linux (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/apache2 (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/bash (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/bind (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/core-files (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/coreutils (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/curl (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/dhcpcd (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/dracut-ng (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/elinks (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/files (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/fuse (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/gdb (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/glib (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/gnupg (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/gnutls (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/harfbuzz (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/hwdata (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/iana-etc (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/ids-ruleset-sources (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/iptables (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libarchive (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libassuan (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libcap-ng (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libgpg-error (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libidn2 (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libjpeg (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libksba (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libpcap (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libpng (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libtasn1 (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/liburcu (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/libxcrypt (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/lvm2 (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/mdadm (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/meson (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/newt (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/ninja (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/npth (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/oath-toolkit (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/openvpn (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/readline (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/riscv64/glibc (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/riscv64/linux (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/sqlite (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/strongswan (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/suricata (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/suricata-reporter (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/tzdata (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/unbound (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/vim (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/wireless-regdb (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/x86_64/glibc (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/x86_64/intel-microcode (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/x86_64/linux (100%)
 rename config/rootfiles/{core => oldcore}/200/filelists/xz (100%)
 rename config/rootfiles/{core => oldcore}/200/update.sh (100%)
 create mode 100644 src/patches/binutils-2.45.1-gprofng-FTBFS.patch
 create mode 100644 src/patches/elfutils-0.194-FTBFS.patch
 create mode 100644 src/patches/gcc-15.2.0-9c9d3aef2f66625d9cb03ef4baee10ed6648e681.patch
 delete mode 100644 src/patches/glibc-2.42-CVE-2025-15281.patch
 delete mode 100644 src/patches/glibc-2.42-CVE-2026-0861.patch
 delete mode 100644 src/patches/glibc-2.42-CVE-2026-0915.patch
 create mode 100644 src/patches/krb5-1.12.3-FTBFS.patch
 create mode 100644 src/patches/libtmps-0.10.2-FTBFS.patch
 create mode 100644 src/patches/libxcrypt-4.5.1-174c24d6e87aeae631bc0a7bb1ba983cf8def4de.patch
 create mode 100644 src/patches/mpd-0.24.5-openat2.patch
 create mode 100644 src/patches/socat-1.8.1.0-printtime.patch
 create mode 100644 src/patches/systemd-258-FTBFS.patch
 create mode 100644 src/patches/util-linux-2.41.2-FTBFS-bsearch.patch

Difference in files:
diff --git a/config/rootfiles/common/aarch64/binutils b/config/rootfiles/common/aarch64/binutils
index e961f8a887..2e8fcdefea 100644
--- a/config/rootfiles/common/aarch64/binutils
+++ b/config/rootfiles/common/aarch64/binutils
@@ -426,7 +426,7 @@ usr/lib/bfd-plugins/libdep.so
 #usr/lib/ldscripts/armelfb_linux_eabi.xwe
 #usr/lib/ldscripts/armelfb_linux_eabi.xwer
 #usr/lib/ldscripts/stamp
-usr/lib/libbfd-2.45.so
+usr/lib/libbfd-2.45.1.so
 #usr/lib/libbfd.a
 #usr/lib/libbfd.la
 #usr/lib/libbfd.so
@@ -445,7 +445,7 @@ usr/lib/libctf.so.0.0.0
 #usr/lib/libgprofng.so
 usr/lib/libgprofng.so.0
 usr/lib/libgprofng.so.0.0.0
-usr/lib/libopcodes-2.45.so
+usr/lib/libopcodes-2.45.1.so
 #usr/lib/libopcodes.a
 #usr/lib/libopcodes.la
 #usr/lib/libopcodes.so
diff --git a/config/rootfiles/common/aarch64/glibc b/config/rootfiles/common/aarch64/glibc
index e3493dd956..b474a0e40d 100644
--- a/config/rootfiles/common/aarch64/glibc
+++ b/config/rootfiles/common/aarch64/glibc
@@ -77,6 +77,7 @@ usr/bin/locale
 #usr/include/bits/error-ldbl.h
 #usr/include/bits/error.h
 #usr/include/bits/eventfd.h
+#usr/include/bits/fcntl-linux-fortify.h
 #usr/include/bits/fcntl-linux.h
 #usr/include/bits/fcntl.h
 #usr/include/bits/fcntl2.h
@@ -125,6 +126,7 @@ usr/bin/locale
 #usr/include/bits/mqueue2.h
 #usr/include/bits/msq.h
 #usr/include/bits/netdb.h
+#usr/include/bits/openat2.h
 #usr/include/bits/param.h
 #usr/include/bits/poll.h
 #usr/include/bits/poll2.h
@@ -237,6 +239,7 @@ usr/bin/locale
 #usr/include/bits/types/idtype_t.h
 #usr/include/bits/types/locale_t.h
 #usr/include/bits/types/mbstate_t.h
+#usr/include/bits/types/once_flag.h
 #usr/include/bits/types/res_state.h
 #usr/include/bits/types/sig_atomic_t.h
 #usr/include/bits/types/sigevent_t.h
@@ -814,7 +817,7 @@ usr/lib/gconv
 #usr/lib/libc_nonshared.a
 #usr/lib/libdl.a
 #usr/lib/libg.a
-#usr/lib/libm-2.42.a
+#usr/lib/libm-2.43.a
 #usr/lib/libm.a
 #usr/lib/libm.so
 #usr/lib/libmcheck.a
@@ -2958,6 +2961,20 @@ usr/lib/locale
 #usr/lib/locale/en_SC.utf8/LC_PAPER
 #usr/lib/locale/en_SC.utf8/LC_TELEPHONE
 #usr/lib/locale/en_SC.utf8/LC_TIME
+#usr/lib/locale/en_SE.utf8
+#usr/lib/locale/en_SE.utf8/LC_ADDRESS
+#usr/lib/locale/en_SE.utf8/LC_COLLATE
+#usr/lib/locale/en_SE.utf8/LC_CTYPE
+#usr/lib/locale/en_SE.utf8/LC_IDENTIFICATION
+#usr/lib/locale/en_SE.utf8/LC_MEASUREMENT
+#usr/lib/locale/en_SE.utf8/LC_MESSAGES
+#usr/lib/locale/en_SE.utf8/LC_MESSAGES/SYS_LC_MESSAGES
+#usr/lib/locale/en_SE.utf8/LC_MONETARY
+#usr/lib/locale/en_SE.utf8/LC_NAME
+#usr/lib/locale/en_SE.utf8/LC_NUMERIC
+#usr/lib/locale/en_SE.utf8/LC_PAPER
+#usr/lib/locale/en_SE.utf8/LC_TELEPHONE
+#usr/lib/locale/en_SE.utf8/LC_TIME
 #usr/lib/locale/en_SG
 #usr/lib/locale/en_SG.utf8
 #usr/lib/locale/en_SG.utf8/LC_ADDRESS
@@ -8175,6 +8192,7 @@ usr/lib/locale
 #usr/share/i18n/locales/en_NZ
 #usr/share/i18n/locales/en_PH
 #usr/share/i18n/locales/en_SC
+#usr/share/i18n/locales/en_SE
 #usr/share/i18n/locales/en_SG
 #usr/share/i18n/locales/en_US
 #usr/share/i18n/locales/en_ZA
diff --git a/config/rootfiles/common/riscv64/binutils b/config/rootfiles/common/riscv64/binutils
index 06025b088f..aeadbaca9b 100644
--- a/config/rootfiles/common/riscv64/binutils
+++ b/config/rootfiles/common/riscv64/binutils
@@ -426,7 +426,7 @@ usr/bin/strings
 #usr/lib/ldscripts/elf64lriscv_lp64f.xwe
 #usr/lib/ldscripts/elf64lriscv_lp64f.xwer
 #usr/lib/ldscripts/stamp
-usr/lib/libbfd-2.45.so
+usr/lib/libbfd-2.45.1.so
 #usr/lib/libbfd.a
 #usr/lib/libbfd.la
 #usr/lib/libbfd.so
@@ -445,7 +445,7 @@ usr/lib/libctf.so.0.0.0
 #usr/lib/libgprofng.so
 #usr/lib/libgprofng.so.0
 #usr/lib/libgprofng.so.0.0.0
-usr/lib/libopcodes-2.45.so
+usr/lib/libopcodes-2.45.1.so
 #usr/lib/libopcodes.a
 #usr/lib/libopcodes.la
 #usr/lib/libopcodes.so
diff --git a/config/rootfiles/common/riscv64/glibc b/config/rootfiles/common/riscv64/glibc
index 1dbc835fc0..be7a29829d 100644
--- a/config/rootfiles/common/riscv64/glibc
+++ b/config/rootfiles/common/riscv64/glibc
@@ -76,6 +76,7 @@ usr/bin/locale
 #usr/include/bits/error-ldbl.h
 #usr/include/bits/error.h
 #usr/include/bits/eventfd.h
+#usr/include/bits/fcntl-linux-fortify.h
 #usr/include/bits/fcntl-linux.h
 #usr/include/bits/fcntl.h
 #usr/include/bits/fcntl2.h
@@ -124,6 +125,7 @@ usr/bin/locale
 #usr/include/bits/mqueue2.h
 #usr/include/bits/msq.h
 #usr/include/bits/netdb.h
+#usr/include/bits/openat2.h
 #usr/include/bits/param.h
 #usr/include/bits/poll.h
 #usr/include/bits/poll2.h
@@ -236,6 +238,7 @@ usr/bin/locale
 #usr/include/bits/types/idtype_t.h
 #usr/include/bits/types/locale_t.h
 #usr/include/bits/types/mbstate_t.h
+#usr/include/bits/types/once_flag.h
 #usr/include/bits/types/res_state.h
 #usr/include/bits/types/sig_atomic_t.h
 #usr/include/bits/types/sigevent_t.h
@@ -2955,6 +2958,20 @@ usr/lib/locale
 #usr/lib/locale/en_SC.utf8/LC_PAPER
 #usr/lib/locale/en_SC.utf8/LC_TELEPHONE
 #usr/lib/locale/en_SC.utf8/LC_TIME
+#usr/lib/locale/en_SE.utf8
+#usr/lib/locale/en_SE.utf8/LC_ADDRESS
+#usr/lib/locale/en_SE.utf8/LC_COLLATE
+#usr/lib/locale/en_SE.utf8/LC_CTYPE
+#usr/lib/locale/en_SE.utf8/LC_IDENTIFICATION
+#usr/lib/locale/en_SE.utf8/LC_MEASUREMENT
+#usr/lib/locale/en_SE.utf8/LC_MESSAGES
+#usr/lib/locale/en_SE.utf8/LC_MESSAGES/SYS_LC_MESSAGES
+#usr/lib/locale/en_SE.utf8/LC_MONETARY
+#usr/lib/locale/en_SE.utf8/LC_NAME
+#usr/lib/locale/en_SE.utf8/LC_NUMERIC
+#usr/lib/locale/en_SE.utf8/LC_PAPER
+#usr/lib/locale/en_SE.utf8/LC_TELEPHONE
+#usr/lib/locale/en_SE.utf8/LC_TIME
 #usr/lib/locale/en_SG
 #usr/lib/locale/en_SG.utf8
 #usr/lib/locale/en_SG.utf8/LC_ADDRESS
@@ -8172,6 +8189,7 @@ usr/lib/locale
 #usr/share/i18n/locales/en_NZ
 #usr/share/i18n/locales/en_PH
 #usr/share/i18n/locales/en_SC
+#usr/share/i18n/locales/en_SE
 #usr/share/i18n/locales/en_SG
 #usr/share/i18n/locales/en_US
 #usr/share/i18n/locales/en_ZA
diff --git a/config/rootfiles/common/suricata-reporter b/config/rootfiles/common/suricata-reporter
index b2416625f9..cff9a1c569 100644
--- a/config/rootfiles/common/suricata-reporter
+++ b/config/rootfiles/common/suricata-reporter
@@ -1,11 +1,12 @@
 etc/suricata/reporter.conf
-usr/bin/suricata-reporter
 usr/bin/suricata-report-cron
 usr/bin/suricata-report-generator
+usr/bin/suricata-reporter
 #usr/share/doc/suricata-reporter
 #usr/share/doc/suricata-reporter/COPYING
 #usr/share/doc/suricata-reporter/README.md
 usr/share/locale/de_DE
 usr/share/locale/de_DE/LC_MESSAGES
 usr/share/locale/de_DE/LC_MESSAGES/suricata-reporter.mo
+usr/share/locale/es/LC_MESSAGES/suricata-reporter.mo
 var/ipfire/suricata/reporter.conf
diff --git a/config/rootfiles/common/x86_64/binutils b/config/rootfiles/common/x86_64/binutils
index 08f4bea04c..838d1e588d 100644
--- a/config/rootfiles/common/x86_64/binutils
+++ b/config/rootfiles/common/x86_64/binutils
@@ -178,7 +178,7 @@ usr/bin/strings
 #usr/lib/ldscripts/elf_x86_64.xwe
 #usr/lib/ldscripts/elf_x86_64.xwer
 #usr/lib/ldscripts/stamp
-usr/lib/libbfd-2.45.so
+usr/lib/libbfd-2.45.1.so
 #usr/lib/libbfd.a
 #usr/lib/libbfd.la
 #usr/lib/libbfd.so
@@ -197,7 +197,7 @@ usr/lib/libctf.so.0.0.0
 #usr/lib/libgprofng.so
 usr/lib/libgprofng.so.0
 usr/lib/libgprofng.so.0.0.0
-usr/lib/libopcodes-2.45.so
+usr/lib/libopcodes-2.45.1.so
 #usr/lib/libopcodes.a
 #usr/lib/libopcodes.la
 #usr/lib/libopcodes.so
diff --git a/config/rootfiles/common/x86_64/glibc b/config/rootfiles/common/x86_64/glibc
index a4bdd8a8e7..1ea042e20d 100644
--- a/config/rootfiles/common/x86_64/glibc
+++ b/config/rootfiles/common/x86_64/glibc
@@ -77,6 +77,7 @@ usr/bin/locale
 #usr/include/bits/error-ldbl.h
 #usr/include/bits/error.h
 #usr/include/bits/eventfd.h
+#usr/include/bits/fcntl-linux-fortify.h
 #usr/include/bits/fcntl-linux.h
 #usr/include/bits/fcntl.h
 #usr/include/bits/fcntl2.h
@@ -125,6 +126,7 @@ usr/bin/locale
 #usr/include/bits/mqueue2.h
 #usr/include/bits/msq.h
 #usr/include/bits/netdb.h
+#usr/include/bits/openat2.h
 #usr/include/bits/param.h
 #usr/include/bits/platform
 #usr/include/bits/platform/features.h
@@ -240,6 +242,7 @@ usr/bin/locale
 #usr/include/bits/types/idtype_t.h
 #usr/include/bits/types/locale_t.h
 #usr/include/bits/types/mbstate_t.h
+#usr/include/bits/types/once_flag.h
 #usr/include/bits/types/res_state.h
 #usr/include/bits/types/sig_atomic_t.h
 #usr/include/bits/types/sigevent_t.h
@@ -823,7 +826,7 @@ usr/lib/gconv
 #usr/lib/libc_nonshared.a
 #usr/lib/libdl.a
 #usr/lib/libg.a
-#usr/lib/libm-2.42.a
+#usr/lib/libm-2.43.a
 #usr/lib/libm.a
 #usr/lib/libm.so
 #usr/lib/libmcheck.a
@@ -2967,6 +2970,20 @@ usr/lib/locale
 #usr/lib/locale/en_SC.utf8/LC_PAPER
 #usr/lib/locale/en_SC.utf8/LC_TELEPHONE
 #usr/lib/locale/en_SC.utf8/LC_TIME
+#usr/lib/locale/en_SE.utf8
+#usr/lib/locale/en_SE.utf8/LC_ADDRESS
+#usr/lib/locale/en_SE.utf8/LC_COLLATE
+#usr/lib/locale/en_SE.utf8/LC_CTYPE
+#usr/lib/locale/en_SE.utf8/LC_IDENTIFICATION
+#usr/lib/locale/en_SE.utf8/LC_MEASUREMENT
+#usr/lib/locale/en_SE.utf8/LC_MESSAGES
+#usr/lib/locale/en_SE.utf8/LC_MESSAGES/SYS_LC_MESSAGES
+#usr/lib/locale/en_SE.utf8/LC_MONETARY
+#usr/lib/locale/en_SE.utf8/LC_NAME
+#usr/lib/locale/en_SE.utf8/LC_NUMERIC
+#usr/lib/locale/en_SE.utf8/LC_PAPER
+#usr/lib/locale/en_SE.utf8/LC_TELEPHONE
+#usr/lib/locale/en_SE.utf8/LC_TIME
 #usr/lib/locale/en_SG
 #usr/lib/locale/en_SG.utf8
 #usr/lib/locale/en_SG.utf8/LC_ADDRESS
@@ -8184,6 +8201,7 @@ usr/lib/locale
 #usr/share/i18n/locales/en_NZ
 #usr/share/i18n/locales/en_PH
 #usr/share/i18n/locales/en_SC
+#usr/share/i18n/locales/en_SE
 #usr/share/i18n/locales/en_SG
 #usr/share/i18n/locales/en_US
 #usr/share/i18n/locales/en_ZA
diff --git a/config/rootfiles/core/200/exclude b/config/rootfiles/core/201/exclude
similarity index 100%
rename from config/rootfiles/core/200/exclude
rename to config/rootfiles/core/201/exclude
diff --git a/config/rootfiles/core/201/filelists/aarch64/binutils b/config/rootfiles/core/201/filelists/aarch64/binutils
new file mode 120000
index 0000000000..6da9d39e5e
--- /dev/null
+++ b/config/rootfiles/core/201/filelists/aarch64/binutils
@@ -0,0 +1 @@
+../../../../common/aarch64/binutils
\ No newline at end of file
diff --git a/config/rootfiles/core/200/filelists/aarch64/glibc b/config/rootfiles/core/201/filelists/aarch64/glibc
similarity index 100%
rename from config/rootfiles/core/200/filelists/aarch64/glibc
rename to config/rootfiles/core/201/filelists/aarch64/glibc
diff --git a/config/rootfiles/core/200/filelists/core-files b/config/rootfiles/core/201/filelists/core-files
similarity index 100%
rename from config/rootfiles/core/200/filelists/core-files
rename to config/rootfiles/core/201/filelists/core-files
diff --git a/config/rootfiles/core/201/filelists/files b/config/rootfiles/core/201/filelists/files
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/config/rootfiles/core/201/filelists/krb5 b/config/rootfiles/core/201/filelists/krb5
new file mode 120000
index 0000000000..082c3cbcdb
--- /dev/null
+++ b/config/rootfiles/core/201/filelists/krb5
@@ -0,0 +1 @@
+../../../common/krb5
\ No newline at end of file
diff --git a/config/rootfiles/core/201/filelists/riscv64/binutils b/config/rootfiles/core/201/filelists/riscv64/binutils
new file mode 120000
index 0000000000..c5f3990b61
--- /dev/null
+++ b/config/rootfiles/core/201/filelists/riscv64/binutils
@@ -0,0 +1 @@
+../../../../common/riscv64/binutils
\ No newline at end of file
diff --git a/config/rootfiles/core/200/filelists/riscv64/glibc b/config/rootfiles/core/201/filelists/riscv64/glibc
similarity index 100%
rename from config/rootfiles/core/200/filelists/riscv64/glibc
rename to config/rootfiles/core/201/filelists/riscv64/glibc
diff --git a/config/rootfiles/core/201/filelists/x86_64/binutils b/config/rootfiles/core/201/filelists/x86_64/binutils
new file mode 120000
index 0000000000..7d0fda554d
--- /dev/null
+++ b/config/rootfiles/core/201/filelists/x86_64/binutils
@@ -0,0 +1 @@
+../../../../common/x86_64/binutils
\ No newline at end of file
diff --git a/config/rootfiles/core/200/filelists/x86_64/glibc b/config/rootfiles/core/201/filelists/x86_64/glibc
similarity index 100%
rename from config/rootfiles/core/200/filelists/x86_64/glibc
rename to config/rootfiles/core/201/filelists/x86_64/glibc
diff --git a/config/rootfiles/core/201/update.sh b/config/rootfiles/core/201/update.sh
new file mode 100644
index 0000000000..542f18afac
--- /dev/null
+++ b/config/rootfiles/core/201/update.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+############################################################################
+#                                                                          #
+# This file is part of the IPFire Firewall.                                #
+#                                                                          #
+# IPFire is free software; you can redistribute it and/or modify           #
+# it under the terms of the GNU General Public License as published by     #
+# the Free Software Foundation; either version 3 of the License, or        #
+# (at your option) any later version.                                      #
+#                                                                          #
+# IPFire is distributed in the hope that it will be useful,                #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of           #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
+# GNU General Public License for more details.                             #
+#                                                                          #
+# You should have received a copy of the GNU General Public License        #
+# along with IPFire; if not, write to the Free Software                    #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
+#                                                                          #
+# Copyright (C) 2026 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+core=201
+
+# Remove old core updates from pakfire cache to save space...
+for (( i=1; i<=$core; i++ )); do
+	rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+# Remove files
+
+# Extract files
+extract_files
+
+# update linker config
+ldconfig
+
+# Restart init
+telinit u
+
+# Update Language cache
+/usr/local/bin/update-lang-cache
+
+# Filesytem cleanup
+/usr/local/bin/filesystem-cleanup
+
+# Apply SSH configuration
+/usr/local/bin/sshctrl
+
+# Start services
+
+# This update needs a reboot...
+#touch /var/run/need_reboot
+
+# Finish
+/etc/init.d/fireinfo start
+sendprofile
+
+# Update grub config to display new core version
+if [ -e /boot/grub/grub.cfg ]; then
+	grub-mkconfig -o /boot/grub/grub.cfg
+fi
+
+sync
+
+# Don't report the exitcode last command
+exit 0
diff --git a/config/rootfiles/oldcore/200/exclude b/config/rootfiles/oldcore/200/exclude
new file mode 100644
index 0000000000..8ee1c3c2f5
--- /dev/null
+++ b/config/rootfiles/oldcore/200/exclude
@@ -0,0 +1,35 @@
+boot/config.txt
+boot/grub/grub.cfg
+boot/grub/grubenv
+boot/uEnv.txt
+etc/alternatives
+etc/collectd.custom
+etc/default/grub
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/shadow
+etc/snort/snort.conf
+etc/ssl/openssl.cnf
+etc/sudoers
+etc/sysconfig/firewall.local
+etc/sysconfig/rc.local
+etc/udev/rules.d/30-persistent-network.rules
+srv/web/ipfire/html/proxy.pac
+var/ipfire/dma
+var/ipfire/time
+var/ipfire/firewall/locationblock
+var/ipfire/fwhosts/customlocationgrp
+var/ipfire/ovpn
+var/ipfire/urlfilter/blacklist
+var/ipfire/urlfilter/settings
+var/lib/alternatives
+var/lib/location/database.db
+var/lib/location/ipset
+var/log/cache
+var/log/dhcpcd.log
+var/log/messages
+var/state/dhcp/dhcpd.leases
+var/updatecache
diff --git a/config/rootfiles/oldcore/200/filelists/aarch64/glibc b/config/rootfiles/oldcore/200/filelists/aarch64/glibc
new file mode 120000
index 0000000000..d13849ff91
--- /dev/null
+++ b/config/rootfiles/oldcore/200/filelists/aarch64/glibc
@@ -0,0 +1 @@
+../../../../common/aarch64/glibc
\ No newline at end of file
diff --git a/config/rootfiles/core/200/filelists/aarch64/linux b/config/rootfiles/oldcore/200/filelists/aarch64/linux
similarity index 100%
rename from config/rootfiles/core/200/filelists/aarch64/linux
rename to config/rootfiles/oldcore/200/filelists/aarch64/linux
diff --git a/config/rootfiles/core/200/filelists/apache2 b/config/rootfiles/oldcore/200/filelists/apache2
similarity index 100%
rename from config/rootfiles/core/200/filelists/apache2
rename to config/rootfiles/oldcore/200/filelists/apache2
diff --git a/config/rootfiles/core/200/filelists/bash b/config/rootfiles/oldcore/200/filelists/bash
similarity index 100%
rename from config/rootfiles/core/200/filelists/bash
rename to config/rootfiles/oldcore/200/filelists/bash
diff --git a/config/rootfiles/core/200/filelists/bind b/config/rootfiles/oldcore/200/filelists/bind
similarity index 100%
rename from config/rootfiles/core/200/filelists/bind
rename to config/rootfiles/oldcore/200/filelists/bind
diff --git a/config/rootfiles/oldcore/200/filelists/core-files b/config/rootfiles/oldcore/200/filelists/core-files
new file mode 100644
index 0000000000..0dec37e538
--- /dev/null
+++ b/config/rootfiles/oldcore/200/filelists/core-files
@@ -0,0 +1,5 @@
+etc/system-release
+etc/issue
+etc/os-release
+srv/web/ipfire/cgi-bin/credits.cgi
+var/ipfire/langs
diff --git a/config/rootfiles/core/200/filelists/coreutils b/config/rootfiles/oldcore/200/filelists/coreutils
similarity index 100%
rename from config/rootfiles/core/200/filelists/coreutils
rename to config/rootfiles/oldcore/200/filelists/coreutils
diff --git a/config/rootfiles/core/200/filelists/curl b/config/rootfiles/oldcore/200/filelists/curl
similarity index 100%
rename from config/rootfiles/core/200/filelists/curl
rename to config/rootfiles/oldcore/200/filelists/curl
diff --git a/config/rootfiles/core/200/filelists/dhcpcd b/config/rootfiles/oldcore/200/filelists/dhcpcd
similarity index 100%
rename from config/rootfiles/core/200/filelists/dhcpcd
rename to config/rootfiles/oldcore/200/filelists/dhcpcd
diff --git a/config/rootfiles/core/200/filelists/dracut-ng b/config/rootfiles/oldcore/200/filelists/dracut-ng
similarity index 100%
rename from config/rootfiles/core/200/filelists/dracut-ng
rename to config/rootfiles/oldcore/200/filelists/dracut-ng
diff --git a/config/rootfiles/core/200/filelists/elinks b/config/rootfiles/oldcore/200/filelists/elinks
similarity index 100%
rename from config/rootfiles/core/200/filelists/elinks
rename to config/rootfiles/oldcore/200/filelists/elinks
diff --git a/config/rootfiles/core/200/filelists/files b/config/rootfiles/oldcore/200/filelists/files
similarity index 100%
rename from config/rootfiles/core/200/filelists/files
rename to config/rootfiles/oldcore/200/filelists/files
diff --git a/config/rootfiles/core/200/filelists/fuse b/config/rootfiles/oldcore/200/filelists/fuse
similarity index 100%
rename from config/rootfiles/core/200/filelists/fuse
rename to config/rootfiles/oldcore/200/filelists/fuse
diff --git a/config/rootfiles/core/200/filelists/gdb b/config/rootfiles/oldcore/200/filelists/gdb
similarity index 100%
rename from config/rootfiles/core/200/filelists/gdb
rename to config/rootfiles/oldcore/200/filelists/gdb
diff --git a/config/rootfiles/core/200/filelists/glib b/config/rootfiles/oldcore/200/filelists/glib
similarity index 100%
rename from config/rootfiles/core/200/filelists/glib
rename to config/rootfiles/oldcore/200/filelists/glib
diff --git a/config/rootfiles/core/200/filelists/gnupg b/config/rootfiles/oldcore/200/filelists/gnupg
similarity index 100%
rename from config/rootfiles/core/200/filelists/gnupg
rename to config/rootfiles/oldcore/200/filelists/gnupg
diff --git a/config/rootfiles/core/200/filelists/gnutls b/config/rootfiles/oldcore/200/filelists/gnutls
similarity index 100%
rename from config/rootfiles/core/200/filelists/gnutls
rename to config/rootfiles/oldcore/200/filelists/gnutls
diff --git a/config/rootfiles/core/200/filelists/harfbuzz b/config/rootfiles/oldcore/200/filelists/harfbuzz
similarity index 100%
rename from config/rootfiles/core/200/filelists/harfbuzz
rename to config/rootfiles/oldcore/200/filelists/harfbuzz
diff --git a/config/rootfiles/core/200/filelists/hwdata b/config/rootfiles/oldcore/200/filelists/hwdata
similarity index 100%
rename from config/rootfiles/core/200/filelists/hwdata
rename to config/rootfiles/oldcore/200/filelists/hwdata
diff --git a/config/rootfiles/core/200/filelists/iana-etc b/config/rootfiles/oldcore/200/filelists/iana-etc
similarity index 100%
rename from config/rootfiles/core/200/filelists/iana-etc
rename to config/rootfiles/oldcore/200/filelists/iana-etc
diff --git a/config/rootfiles/core/200/filelists/ids-ruleset-sources b/config/rootfiles/oldcore/200/filelists/ids-ruleset-sources
similarity index 100%
rename from config/rootfiles/core/200/filelists/ids-ruleset-sources
rename to config/rootfiles/oldcore/200/filelists/ids-ruleset-sources
diff --git a/config/rootfiles/core/200/filelists/iptables b/config/rootfiles/oldcore/200/filelists/iptables
similarity index 100%
rename from config/rootfiles/core/200/filelists/iptables
rename to config/rootfiles/oldcore/200/filelists/iptables
diff --git a/config/rootfiles/core/200/filelists/libarchive b/config/rootfiles/oldcore/200/filelists/libarchive
similarity index 100%
rename from config/rootfiles/core/200/filelists/libarchive
rename to config/rootfiles/oldcore/200/filelists/libarchive
diff --git a/config/rootfiles/core/200/filelists/libassuan b/config/rootfiles/oldcore/200/filelists/libassuan
similarity index 100%
rename from config/rootfiles/core/200/filelists/libassuan
rename to config/rootfiles/oldcore/200/filelists/libassuan
diff --git a/config/rootfiles/core/200/filelists/libcap-ng b/config/rootfiles/oldcore/200/filelists/libcap-ng
similarity index 100%
rename from config/rootfiles/core/200/filelists/libcap-ng
rename to config/rootfiles/oldcore/200/filelists/libcap-ng
diff --git a/config/rootfiles/core/200/filelists/libgpg-error b/config/rootfiles/oldcore/200/filelists/libgpg-error
similarity index 100%
rename from config/rootfiles/core/200/filelists/libgpg-error
rename to config/rootfiles/oldcore/200/filelists/libgpg-error
diff --git a/config/rootfiles/core/200/filelists/libidn2 b/config/rootfiles/oldcore/200/filelists/libidn2
similarity index 100%
rename from config/rootfiles/core/200/filelists/libidn2
rename to config/rootfiles/oldcore/200/filelists/libidn2
diff --git a/config/rootfiles/core/200/filelists/libjpeg b/config/rootfiles/oldcore/200/filelists/libjpeg
similarity index 100%
rename from config/rootfiles/core/200/filelists/libjpeg
rename to config/rootfiles/oldcore/200/filelists/libjpeg
diff --git a/config/rootfiles/core/200/filelists/libksba b/config/rootfiles/oldcore/200/filelists/libksba
similarity index 100%
rename from config/rootfiles/core/200/filelists/libksba
rename to config/rootfiles/oldcore/200/filelists/libksba
diff --git a/config/rootfiles/core/200/filelists/libpcap b/config/rootfiles/oldcore/200/filelists/libpcap
similarity index 100%
rename from config/rootfiles/core/200/filelists/libpcap
rename to config/rootfiles/oldcore/200/filelists/libpcap
diff --git a/config/rootfiles/core/200/filelists/libpng b/config/rootfiles/oldcore/200/filelists/libpng
similarity index 100%
rename from config/rootfiles/core/200/filelists/libpng
rename to config/rootfiles/oldcore/200/filelists/libpng
diff --git a/config/rootfiles/core/200/filelists/libtasn1 b/config/rootfiles/oldcore/200/filelists/libtasn1
similarity index 100%
rename from config/rootfiles/core/200/filelists/libtasn1
rename to config/rootfiles/oldcore/200/filelists/libtasn1
diff --git a/config/rootfiles/core/200/filelists/liburcu b/config/rootfiles/oldcore/200/filelists/liburcu
similarity index 100%
rename from config/rootfiles/core/200/filelists/liburcu
rename to config/rootfiles/oldcore/200/filelists/liburcu
diff --git a/config/rootfiles/core/200/filelists/libxcrypt b/config/rootfiles/oldcore/200/filelists/libxcrypt
similarity index 100%
rename from config/rootfiles/core/200/filelists/libxcrypt
rename to config/rootfiles/oldcore/200/filelists/libxcrypt
diff --git a/config/rootfiles/core/200/filelists/lvm2 b/config/rootfiles/oldcore/200/filelists/lvm2
similarity index 100%
rename from config/rootfiles/core/200/filelists/lvm2
rename to config/rootfiles/oldcore/200/filelists/lvm2
diff --git a/config/rootfiles/core/200/filelists/mdadm b/config/rootfiles/oldcore/200/filelists/mdadm
similarity index 100%
rename from config/rootfiles/core/200/filelists/mdadm
rename to config/rootfiles/oldcore/200/filelists/mdadm
diff --git a/config/rootfiles/core/200/filelists/meson b/config/rootfiles/oldcore/200/filelists/meson
similarity index 100%
rename from config/rootfiles/core/200/filelists/meson
rename to config/rootfiles/oldcore/200/filelists/meson
diff --git a/config/rootfiles/core/200/filelists/newt b/config/rootfiles/oldcore/200/filelists/newt
similarity index 100%
rename from config/rootfiles/core/200/filelists/newt
rename to config/rootfiles/oldcore/200/filelists/newt
diff --git a/config/rootfiles/core/200/filelists/ninja b/config/rootfiles/oldcore/200/filelists/ninja
similarity index 100%
rename from config/rootfiles/core/200/filelists/ninja
rename to config/rootfiles/oldcore/200/filelists/ninja
diff --git a/config/rootfiles/core/200/filelists/npth b/config/rootfiles/oldcore/200/filelists/npth
similarity index 100%
rename from config/rootfiles/core/200/filelists/npth
rename to config/rootfiles/oldcore/200/filelists/npth
diff --git a/config/rootfiles/core/200/filelists/oath-toolkit b/config/rootfiles/oldcore/200/filelists/oath-toolkit
similarity index 100%
rename from config/rootfiles/core/200/filelists/oath-toolkit
rename to config/rootfiles/oldcore/200/filelists/oath-toolkit
diff --git a/config/rootfiles/core/200/filelists/openvpn b/config/rootfiles/oldcore/200/filelists/openvpn
similarity index 100%
rename from config/rootfiles/core/200/filelists/openvpn
rename to config/rootfiles/oldcore/200/filelists/openvpn
diff --git a/config/rootfiles/core/200/filelists/readline b/config/rootfiles/oldcore/200/filelists/readline
similarity index 100%
rename from config/rootfiles/core/200/filelists/readline
rename to config/rootfiles/oldcore/200/filelists/readline
diff --git a/config/rootfiles/oldcore/200/filelists/riscv64/glibc b/config/rootfiles/oldcore/200/filelists/riscv64/glibc
new file mode 120000
index 0000000000..36b731f7dd
--- /dev/null
+++ b/config/rootfiles/oldcore/200/filelists/riscv64/glibc
@@ -0,0 +1 @@
+../../../../common/riscv64/glibc
\ No newline at end of file
diff --git a/config/rootfiles/core/200/filelists/riscv64/linux b/config/rootfiles/oldcore/200/filelists/riscv64/linux
similarity index 100%
rename from config/rootfiles/core/200/filelists/riscv64/linux
rename to config/rootfiles/oldcore/200/filelists/riscv64/linux
diff --git a/config/rootfiles/core/200/filelists/sqlite b/config/rootfiles/oldcore/200/filelists/sqlite
similarity index 100%
rename from config/rootfiles/core/200/filelists/sqlite
rename to config/rootfiles/oldcore/200/filelists/sqlite
diff --git a/config/rootfiles/core/200/filelists/strongswan b/config/rootfiles/oldcore/200/filelists/strongswan
similarity index 100%
rename from config/rootfiles/core/200/filelists/strongswan
rename to config/rootfiles/oldcore/200/filelists/strongswan
diff --git a/config/rootfiles/core/200/filelists/suricata b/config/rootfiles/oldcore/200/filelists/suricata
similarity index 100%
rename from config/rootfiles/core/200/filelists/suricata
rename to config/rootfiles/oldcore/200/filelists/suricata
diff --git a/config/rootfiles/core/200/filelists/suricata-reporter b/config/rootfiles/oldcore/200/filelists/suricata-reporter
similarity index 100%
rename from config/rootfiles/core/200/filelists/suricata-reporter
rename to config/rootfiles/oldcore/200/filelists/suricata-reporter
diff --git a/config/rootfiles/core/200/filelists/tzdata b/config/rootfiles/oldcore/200/filelists/tzdata
similarity index 100%
rename from config/rootfiles/core/200/filelists/tzdata
rename to config/rootfiles/oldcore/200/filelists/tzdata
diff --git a/config/rootfiles/core/200/filelists/unbound b/config/rootfiles/oldcore/200/filelists/unbound
similarity index 100%
rename from config/rootfiles/core/200/filelists/unbound
rename to config/rootfiles/oldcore/200/filelists/unbound
diff --git a/config/rootfiles/core/200/filelists/vim b/config/rootfiles/oldcore/200/filelists/vim
similarity index 100%
rename from config/rootfiles/core/200/filelists/vim
rename to config/rootfiles/oldcore/200/filelists/vim
diff --git a/config/rootfiles/core/200/filelists/wireless-regdb b/config/rootfiles/oldcore/200/filelists/wireless-regdb
similarity index 100%
rename from config/rootfiles/core/200/filelists/wireless-regdb
rename to config/rootfiles/oldcore/200/filelists/wireless-regdb
diff --git a/config/rootfiles/oldcore/200/filelists/x86_64/glibc b/config/rootfiles/oldcore/200/filelists/x86_64/glibc
new file mode 120000
index 0000000000..1119099669
--- /dev/null
+++ b/config/rootfiles/oldcore/200/filelists/x86_64/glibc
@@ -0,0 +1 @@
+../../../../common/x86_64/glibc
\ No newline at end of file
diff --git a/config/rootfiles/core/200/filelists/x86_64/intel-microcode b/config/rootfiles/oldcore/200/filelists/x86_64/intel-microcode
similarity index 100%
rename from config/rootfiles/core/200/filelists/x86_64/intel-microcode
rename to config/rootfiles/oldcore/200/filelists/x86_64/intel-microcode
diff --git a/config/rootfiles/core/200/filelists/x86_64/linux b/config/rootfiles/oldcore/200/filelists/x86_64/linux
similarity index 100%
rename from config/rootfiles/core/200/filelists/x86_64/linux
rename to config/rootfiles/oldcore/200/filelists/x86_64/linux
diff --git a/config/rootfiles/core/200/filelists/xz b/config/rootfiles/oldcore/200/filelists/xz
similarity index 100%
rename from config/rootfiles/core/200/filelists/xz
rename to config/rootfiles/oldcore/200/filelists/xz
diff --git a/config/rootfiles/core/200/update.sh b/config/rootfiles/oldcore/200/update.sh
similarity index 100%
rename from config/rootfiles/core/200/update.sh
rename to config/rootfiles/oldcore/200/update.sh
diff --git a/lfs/binutils b/lfs/binutils
index 1b2b5f3b3f..efa1ea8558 100644
--- a/lfs/binutils
+++ b/lfs/binutils
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.45
+VER        = 2.45.1
 
 THISAPP    = binutils-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -96,7 +96,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = 1ce72346b1f531c89feb86b407e2c649151b506ffbd1a02d413411d36f7ede98fa9a1adf75dd941c01df5fe7e6bf151828b269eeb7c278315ca8004bff22eb7f
+$(DL_FILE)_BLAKE2 = 1ccab38659ec47f9100b61322627345fe79ebd04ed0b1e872c988edded4d292d7c9ac33d9f6ea47bf265ec823dfba60da0e84374900c15ec89e3aa9280ac020c
 
 install : $(TARGET)
 
@@ -128,6 +128,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@rm -rf $(DIR_APP) $(DIR_SRC)/binutils-build && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	@mkdir $(DIR_SRC)/binutils-build
 
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/binutils-2.45.1-gprofng-FTBFS.patch
+
 	# Prevent installing libiberty to lib64.
 	cd $(DIR_APP) && sed -i 's%\(^MULTIOSDIR = \).*%\1 ../lib%' libiberty/Makefile.in
 
diff --git a/lfs/coreutils b/lfs/coreutils
index 3ab75ac57f..6bedd56c0d 100644
--- a/lfs/coreutils
+++ b/lfs/coreutils
@@ -48,8 +48,6 @@ CONFIGURE_OPTIONS += \
 	--with-tty-group \
 	gl_cv_func_mknod_works=yes
 
-CFLAGS += -fno-strict-aliasing
-
 ###############################################################################
 # Top-level Rules
 ###############################################################################
@@ -88,6 +86,8 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && sed -i 's/^\(_GL_EXTERN_C wchar_t \*\)wmemchr (/\1(wmemchr) (/' lib/wchar.in.h
+	cd $(DIR_APP) && sed -i 's/^\(_GL_EXTERN_C void \*\)bsearch (/\1(bsearch) (/' lib/stdlib.in.h
 	cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS)
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install
diff --git a/lfs/elfutils b/lfs/elfutils
index 02fe5b2bdd..c3af32a69c 100644
--- a/lfs/elfutils
+++ b/lfs/elfutils
@@ -72,6 +72,7 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/elfutils-0.194-FTBFS.patch
 	cd $(DIR_APP) && ./configure \
 				--prefix=/usr \
 				--disable-debuginfod \
diff --git a/lfs/flashrom b/lfs/flashrom
index 6f1aa731f6..f87c42bf9c 100644
--- a/lfs/flashrom
+++ b/lfs/flashrom
@@ -82,6 +82,7 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && sed -i 's/param_pos = strstr/param_pos = (char *)strstr/' flashrom.c
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install PREFIX=/usr
 	@rm -rf $(DIR_APP)
diff --git a/lfs/gcc b/lfs/gcc
index 199adae52d..0d8c75e876 100644
--- a/lfs/gcc
+++ b/lfs/gcc
@@ -216,6 +216,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	@mkdir $(DIR_SRC)/gcc-build
 
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/gcc-15.2.0-9c9d3aef2f66625d9cb03ef4baee10ed6648e681.patch
+
 	cd $(DIR_APP) && sed -i 's/install_to_$$(INSTALL_DEST) //' libiberty/Makefile.in
 	cd $(DIR_APP) && sed -i gcc/Makefile.in \
 		-e 's@\./fixinc\.sh@-c true@' \
diff --git a/lfs/gettext b/lfs/gettext
index 7260af9a03..71c1183f07 100644
--- a/lfs/gettext
+++ b/lfs/gettext
@@ -88,6 +88,10 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	$(UPDATE_AUTOMAKE)
 
+	cd $(DIR_APP) && find . -name string.in.h | xargs sed -i 's/^\(_GL_EXTERN_C void \*\)memchr (/\1(memchr) (/'
+	cd $(DIR_APP) && find . -name wchar.in.h | xargs sed -i 's/^\(_GL_EXTERN_C wchar_t \*\)wmemchr (/\1(wmemchr) (/'
+	cd $(DIR_APP) && find . -name stdlib.in.h | xargs sed -i 's/^\(_GL_EXTERN_C void \*\)bsearch (/\1(bsearch) (/'
+
 	cd $(DIR_APP) && ./configure $(EXTRA_CONFIG)
 	cd $(DIR_APP) && make $(MAKETUNING)
 
diff --git a/lfs/glibc b/lfs/glibc
index 49cce7282e..3dd1cefa2d 100644
--- a/lfs/glibc
+++ b/lfs/glibc
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.42
+VER        = 2.43
 
 THISAPP    = glibc-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -87,7 +87,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = 6ffabfe7942034a5a4fb5097679cb47bc3431eb2a3864af07cea0cb6aa5db63fbaf6f026b3c9299e00268058a6762eb21e92499f012d552ed87d65c7ffbd0bbe
+$(DL_FILE)_BLAKE2 = a764edf3d0d52809aa94cf1a8f73341159d226ecc2a595aa3c9e1d1fd4b2d4eb9a599d70bda8812b73d8ef58b39746efdd34026772e38c0f091fe071d461ea98
 
 install : $(TARGET)
 
@@ -120,9 +120,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@mkdir $(DIR_SRC)/glibc-build
 
 	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-localedef-no-archive.patch
-	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-2.42-CVE-2026-0861.patch
-	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-2.42-CVE-2026-0915.patch
-	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-2.42-CVE-2025-15281.patch
 
 ifneq "$(TOOLCHAIN)" "1"
  ifeq "$(BUILD_ARCH)" "x86_64"
diff --git a/lfs/krb5 b/lfs/krb5
index 7ca5acd568..cdf2d80d61 100644
--- a/lfs/krb5
+++ b/lfs/krb5
@@ -26,7 +26,7 @@ include Config
 
 SUMMARY    = Kerberos
 
-VER        = 1.21.3
+VER        = 1.22.1
 
 THISAPP    = krb5-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -34,9 +34,6 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)/src
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
-# Fix build with GCC 15
-CFLAGS += -std=gnu17
-
 ###############################################################################
 # Top-level Rules
 ###############################################################################
@@ -45,7 +42,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = e909a55eaedab68e5c829bb7bbd26cec5db2d7b8d97f3b034de94d8f957003f16977ac619afee3b862f288e59f05c5e44f41e65b8883961c8b22a26e2f4733bc
+$(DL_FILE)_BLAKE2 = aed6a7f511ae7085a81fa6dc553881ea478bb8bb8aa43ab13e1312ead392fb93173998bfdfc730dca4d715b2ed52da6a12f2417f95525d9ff5c4629e8ca5fedc
 
 install : $(TARGET)
 
@@ -79,6 +76,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_SRC)/$(THISAPP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	cd $(DIR_APP) && patch -Np2 -i $(DIR_SRC)/src/patches/krb5-1.18.3_remove_known_failed_test.patch
+	cd $(DIR_APP) && patch -Np2 < $(DIR_SRC)/src/patches/krb5-1.12.3-FTBFS.patch
 	cd $(DIR_APP) && ./configure \
 		--prefix=/usr \
 		--sysconfdir=/etc \
diff --git a/lfs/libtpms b/lfs/libtpms
index 61cecc20e5..71028b44d0 100644
--- a/lfs/libtpms
+++ b/lfs/libtpms
@@ -82,6 +82,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	-mkdir -pv $(DIR_APP)
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/libtmps-0.10.2-FTBFS.patch
 	cd $(DIR_APP) && autoreconf -vfi
 	cd $(DIR_APP) && ./configure \
 				--prefix=/usr \
diff --git a/lfs/libxcrypt b/lfs/libxcrypt
index 6fdf996bf8..e8f144d28a 100644
--- a/lfs/libxcrypt
+++ b/lfs/libxcrypt
@@ -77,6 +77,7 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/libxcrypt-4.5.1-174c24d6e87aeae631bc0a7bb1ba983cf8def4de.patch
 	cd $(DIR_APP) && autoreconf -vfi
 	cd $(DIR_APP) && \
 		./configure \
diff --git a/lfs/m4 b/lfs/m4
index a6d45cae86..74db5b64ac 100644
--- a/lfs/m4
+++ b/lfs/m4
@@ -80,6 +80,9 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && sed -i 's/^\(_GL_EXTERN_C void \*\)memchr (/\1(memchr) (/' lib/string.in.h
+	cd $(DIR_APP) && sed -i 's/^\(_GL_EXTERN_C wchar_t \*\)wmemchr (/\1(wmemchr) (/' lib/wchar.in.h
+	cd $(DIR_APP) && sed -i 's/^\(_GL_EXTERN_C void \*\)bsearch (/\1(bsearch) (/' lib/stdlib.in.h
 	cd $(DIR_APP) && ./configure --prefix=$(PREFIX)
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install
diff --git a/lfs/mpd b/lfs/mpd
index f78152623b..a5a3cd3577 100644
--- a/lfs/mpd
+++ b/lfs/mpd
@@ -34,7 +34,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/${THISAPP}
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = mpd
-PAK_VER    = 48
+PAK_VER    = 49
 # SUP_ARCH   = aarch64 x86_64
 
 DEPS       = alsa avahi faad2 ffmpeg flac lame libmad libshout libogg libid3tag libvorbis opus soxr fmt
@@ -82,6 +82,7 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mpd-0.24.5-openat2.patch
 	$(UPDATE_AUTOMAKE)
 	cd $(DIR_APP) && meson setup \
 				--prefix=/usr \
diff --git a/lfs/nano b/lfs/nano
index 9d670e589d..d6556f4b82 100644
--- a/lfs/nano
+++ b/lfs/nano
@@ -73,6 +73,8 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && sed -i 's/^\(_GL_EXTERN_C wchar_t \*\)wmemchr (/\1(wmemchr) (/' lib/wchar.in.h
+	cd $(DIR_APP) && sed -i 's/^\(_GL_EXTERN_C void \*\)bsearch (/\1(bsearch) (/' lib/stdlib.in.h
 	cd $(DIR_APP) && ./configure \
 				--prefix=/usr \
 				--sysconfdir=/etc/nano \
diff --git a/lfs/ntp b/lfs/ntp
index 9f45d5564b..9d12a76801 100644
--- a/lfs/ntp
+++ b/lfs/ntp
@@ -72,6 +72,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
 	$(UPDATE_AUTOMAKE)
 	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ntp-4.2.8_p15-configure-clang16.patch
+	cd $(DIR_APP) && sed -i 's/^extern void \*memchr(/extern void *(memchr)(/' include/l_stdlib.h
+	cd $(DIR_APP) && sed -i 's/^extern char \*strchr(/extern char *(strchr)(/' include/l_stdlib.h
 	cd $(DIR_APP) && autoreconf -vfi
 	cd $(DIR_APP) && \
 		./configure \
diff --git a/lfs/oath-toolkit b/lfs/oath-toolkit
index 4465b9f66d..70aa202563 100644
--- a/lfs/oath-toolkit
+++ b/lfs/oath-toolkit
@@ -70,6 +70,8 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && find . -name wchar.in.h | xargs sed -i 's/^\(_GL_EXTERN_C wchar_t \*\)wmemchr (/\1(wmemchr) (/'
+	cd $(DIR_APP) && find . -name stdlib.in.h | xargs sed -i 's/^\(_GL_EXTERN_C void \*\)bsearch (/\1(bsearch) (/'
 	cd $(DIR_APP) && ./configure --prefix=/usr
 	cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
 	cd $(DIR_APP) && make install
diff --git a/lfs/openvmtools b/lfs/openvmtools
index 57acb11480..6134cb4d41 100644
--- a/lfs/openvmtools
+++ b/lfs/openvmtools
@@ -42,7 +42,7 @@ DEPS       =
 SERVICES   = openvmtools
 
 # Fix build with GCC 15
-CFLAGS    += -std=gnu17 -Wno-error=array-bounds
+CFLAGS    += -std=gnu17 -Wno-error=array-bounds -Wno-error=discarded-qualifiers
 
 ###############################################################################
 # Top-level Rules
@@ -84,6 +84,11 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && sed -i '/^void g_free(/i #undef g_free' lib/rpcChannel/glib_stubs.c
+	cd $(DIR_APP) && sed -i '/^void \*g_malloc(/i #undef g_malloc' lib/rpcChannel/glib_stubs.c
+	cd $(DIR_APP) && sed -i '/^void \*g_malloc0(/i #undef g_malloc0' lib/rpcChannel/glib_stubs.c
+	cd $(DIR_APP) && sed -i '/^void \*g_realloc(/i #undef g_realloc' lib/rpcChannel/glib_stubs.c
+	cd $(DIR_APP) && sed -i '/^char \*g_strdup(/i #undef g_strdup' lib/rpcChannel/glib_stubs.c
 	cd $(DIR_APP) && autoreconf -vfi
 	cd $(DIR_APP) && ./configure \
 				--prefix=/usr \
diff --git a/lfs/socat b/lfs/socat
index 66dc2472b3..89a315e380 100644
--- a/lfs/socat
+++ b/lfs/socat
@@ -82,6 +82,7 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar xzf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/socat-1.8.1.0-printtime.patch
 	cd $(DIR_APP) && ./configure --prefix=/usr
 	cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
 	cd $(DIR_APP) && make install
diff --git a/lfs/systemd b/lfs/systemd
index 1e53a4f03a..df2b5346c6 100644
--- a/lfs/systemd
+++ b/lfs/systemd
@@ -95,6 +95,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	cd $(DIR_APP) && \
 		sed -i "/udev_dependencies,/a \                'link_with': udev_link_with," src/udev/meson.build
 
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/systemd-258-FTBFS.patch
+
 	# Prepare udev for build.
 	cd $(DIR_APP) && mkdir -pv build
 	cd $(DIR_APP)/build &&meson setup \
diff --git a/lfs/tor b/lfs/tor
index f77e25bd71..50e469507f 100644
--- a/lfs/tor
+++ b/lfs/tor
@@ -81,6 +81,8 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && sed -i 's/\(slash = \)strchr/\1(char *)strchr/' src/lib/fs/path.c
+	cd $(DIR_APP) && sed -i '/#define SYS_SECCOMP/d' src/lib/sandbox/sandbox.h
 	cd $(DIR_APP) && \
 		./configure \
 			--prefix=/usr \
diff --git a/lfs/util-linux b/lfs/util-linux
index 8c2dc26486..ce00f1a391 100644
--- a/lfs/util-linux
+++ b/lfs/util-linux
@@ -74,6 +74,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@$(PREBUILD)
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	$(UPDATE_AUTOMAKE)
+	cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/util-linux-2.41.2-FTBFS-bsearch.patch
 	cd $(DIR_APP) && ./configure \
 				--docdir=/usr/share/doc/util-linux \
 				--disable-chfn-chsh \
diff --git a/make.sh b/make.sh
index 205aba0570..ace14c5ead 100755
--- a/make.sh
+++ b/make.sh
@@ -23,7 +23,7 @@ NAME="IPFire"							# Software name
 SNAME="ipfire"							# Short name
 # If you update the version don't forget to update backupiso and add it to core update
 VERSION="2.29"							# Version number
-CORE="200"							# Core Level (Filename)
+CORE="201"							# Core Level (Filename)
 SLOGAN="www.ipfire.org"						# Software slogan
 CONFIG_ROOT=/var/ipfire						# Configuration rootdir
 
diff --git a/src/patches/binutils-2.45.1-gprofng-FTBFS.patch b/src/patches/binutils-2.45.1-gprofng-FTBFS.patch
new file mode 100644
index 0000000000..0a89c5c1c9
--- /dev/null
+++ b/src/patches/binutils-2.45.1-gprofng-FTBFS.patch
@@ -0,0 +1,31 @@
+From 5f66aee7f4bec7a2d8378034116f5e5c3dc50f41 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Sat, 22 Nov 2025 11:29:43 +0100
+Subject: [PATCH] gprofng: protect against standard library macros
+
+The CALL_UTIL macro can expand to an unparsable expression of the argument
+is a macro, like with the new const-preserving standard library macros in
+C23.
+
+	* gprofng/src/collector_module.h (CALL_UTIL): Add parens to not
+	expand its argument if it is a function-like macro.
+---
+ gprofng/src/collector_module.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gprofng/src/collector_module.h b/gprofng/src/collector_module.h
+index b64d69c45ab..859a6dd1f7d 100644
+--- a/gprofng/src/collector_module.h
++++ b/gprofng/src/collector_module.h
+@@ -119,7 +119,7 @@ typedef struct CollectorUtilFuncs
+ extern CollectorUtilFuncs __collector_util_funcs;
+ extern int __collector_dlsym_guard;
+ 
+-#define CALL_UTIL(x) __collector_util_funcs.x
++#define CALL_UTIL(x) (__collector_util_funcs.x)
+ 
+ /* The following constants define the meaning of the "void *arg"
+  * argument of getFrameInfo().
+-- 
+2.47.3
+
diff --git a/src/patches/elfutils-0.194-FTBFS.patch b/src/patches/elfutils-0.194-FTBFS.patch
new file mode 100644
index 0000000000..bcb102f2b4
--- /dev/null
+++ b/src/patches/elfutils-0.194-FTBFS.patch
@@ -0,0 +1,301 @@
+From 4a5cf8be906d5991e7527e69e3f2ceaa74811301 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Mon, 24 Nov 2025 13:46:16 +0100
+Subject: [PATCH] Fix const-correctness issues
+
+These were uncovered by the C23 const-preserving library macros.
+---
+ debuginfod/debuginfod-client.c |  2 +-
+ libcpu/riscv_disasm.c          | 52 +++++++++++++++++-----------------
+ libdw/dwarf_getsrclines.c      |  6 ++--
+ src/readelf.c                  |  8 +++---
+ 4 files changed, 34 insertions(+), 34 deletions(-)
+
+diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
+index c0ff5967..c5bc8a4f 100644
+--- a/debuginfod/debuginfod-client.c
++++ b/debuginfod/debuginfod-client.c
+@@ -3104,7 +3104,7 @@ int debuginfod_add_http_header (debuginfod_client *client, const char* header)
+   /* Sanity check header value is of the form Header: Value.
+      It should contain at least one colon that isn't the first or
+      last character.  */
+-  char *colon = strchr (header, ':'); /* first colon */
++  const char *colon = strchr (header, ':'); /* first colon */
+   if (colon == NULL /* present */
+       || colon == header /* not at beginning - i.e., have a header name */
+       || *(colon + 1) == '\0') /* not at end - i.e., have a value */
+diff --git a/libcpu/riscv_disasm.c b/libcpu/riscv_disasm.c
+index 0dee842a..749d4567 100644
+--- a/libcpu/riscv_disasm.c
++++ b/libcpu/riscv_disasm.c
+@@ -77,7 +77,7 @@ static const char *regnames[32] =
+     "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7",
+     "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6"
+   };
+-#define REG(nr) ((char *) regnames[nr])
++#define REG(nr) regnames[nr]
+ #define REGP(nr) REG (8 + (nr))
+ 
+ 
+@@ -88,7 +88,7 @@ static const char *fregnames[32] =
+     "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7",
+     "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11"
+   };
+-#define FREG(nr) ((char *) fregnames[nr])
++#define FREG(nr) fregnames[nr]
+ #define FREGP(nr) FREG (8 + (nr))
+ 
+ 
+@@ -163,12 +163,12 @@ riscv_disasm (Ebl *ebl,
+ 	  break;
+ 	}
+ 
+-      char *mne = NULL;
++      const char *mne = NULL;
+       /* Max length is 24, which is "illegal", so we print it as
+          "0x<48 hex chars>"
+          See: No instruction encodings defined for these sizes yet, below  */
+       char mnebuf[50];
+-      char *op[5] = { NULL, NULL, NULL, NULL, NULL };
++      const char *op[5] = { NULL, NULL, NULL, NULL, NULL };
+       char immbuf[32];
+       size_t len;
+       char *strp = NULL;
+@@ -400,7 +400,7 @@ riscv_disasm (Ebl *ebl,
+ 		    {
+ 		      "sub", "xor", "or", "and", "subw", "addw", NULL, NULL
+ 		    };
+-		  mne = (char *) arithmne[((first >> 10) & 0x4) | ((first >> 5) & 0x3)];
++		  mne = arithmne[((first >> 10) & 0x4) | ((first >> 5) & 0x3)];
+ 		}
+ 		op[0] = op[1] = REGP ((first >> 7) & 0x7);
+ 	      break;
+@@ -572,7 +572,7 @@ riscv_disasm (Ebl *ebl,
+ 		{
+ 		  NULL, NULL, "flw", "fld", "flq", NULL, NULL, NULL
+ 		};
+-	      mne = (char *) (idx == 0x00 ? loadmne[func] : floadmne[func]);
++	      mne = idx == 0x00 ? loadmne[func] : floadmne[func];
+ 	      break;
+ 	    case 0x03:
+ 	      // MISC-MEM
+@@ -595,8 +595,8 @@ riscv_disasm (Ebl *ebl,
+ 		  uint32_t succ = (word >> 24) & 0xf;
+ 		  if (pred != 0xf || succ != 0xf)
+ 		    {
+-		      op[0] = (char *) order[succ];
+-		      op[1] = (char *) order[pred];
++		      op[0] = order[succ];
++		      op[1] = order[pred];
+ 		     }
+ 		   mne = "fence";
+ 		}
+@@ -614,7 +614,7 @@ riscv_disasm (Ebl *ebl,
+ 		  "addi", NULL, "slti", "sltiu", "xori", NULL, "ori", "andi"
+ 		};
+ 	      func = (word >> 12) & 0x7;
+-	      mne = (char *) opimmmne[func];
++	      mne = opimmmne[func];
+ 	      if (mne == NULL)
+ 		{
+ 		  const uint64_t shiftmask = ebl->class == ELFCLASS32 ? 0x1f : 0x3f;
+@@ -697,7 +697,7 @@ riscv_disasm (Ebl *ebl,
+ 		{
+ 		  NULL, NULL, "fsw", "fsd", "fsq", NULL, NULL, NULL
+ 		};
+-	      mne = (char *) (idx == 0x08 ? storemne[func] : fstoremne[func]);
++	      mne = idx == 0x08 ? storemne[func] : fstoremne[func];
+ 	      break;
+ 	    case 0x0b:
+ 	      // AMO
+@@ -778,7 +778,7 @@ riscv_disasm (Ebl *ebl,
+ 		    }
+ 		  else
+ 		    {
+-		      mne = (char *) (idx == 0x0c ? arithmne2[func] : arithmne3[func]);
++		      mne = idx == 0x0c ? arithmne2[func] : arithmne3[func];
+ 		      op[1] = REG (rs1);
+ 		      op[2] = REG (rs2);
+ 		    }
+@@ -811,7 +811,7 @@ riscv_disasm (Ebl *ebl,
+ 		  op[2] = FREG (rs2);
+ 		  op[3] = FREG (rs3);
+ 		  if (rm != 0x7)
+-		    op[4] = (char *) rndmode[rm];
++		    op[4] = rndmode[rm];
+ 		}
+ 	      break;
+ 	    case 0x14:
+@@ -839,7 +839,7 @@ riscv_disasm (Ebl *ebl,
+ 		      op[1] = FREG (rs1);
+ 		      op[2] = FREG (rs2);
+ 		      if (rm != 0x7)
+-			op[3] = (char *) rndmode[rm];
++			op[3] = rndmode[rm];
+ 		    }
+ 		  else if (func == 0x1c && width != 2 && rs2 == 0 && rm <= 1)
+ 		    {
+@@ -950,7 +950,7 @@ riscv_disasm (Ebl *ebl,
+ 			}
+ 		      mne = mnebuf;
+ 		      if (rm != 0x7 && (func == 0x18 || width == 0 || rs2 >= 2))
+-			op[2] = (char *) rndmode[rm];
++			op[2] = rndmode[rm];
+ 		    }
+ 		  else if (func == 0x0b && rs2 == 0)
+ 		    {
+@@ -961,7 +961,7 @@ riscv_disasm (Ebl *ebl,
+ 		      *cp = '\0';
+ 		      mne = mnebuf;
+ 		      if (rm != 0x7)
+-			op[2] = (char *) rndmode[rm];
++			op[2] = rndmode[rm];
+ 		    }
+ 		  else if (func == 0x05 && rm < 2)
+ 		    {
+@@ -1007,7 +1007,7 @@ riscv_disasm (Ebl *ebl,
+ 		  "beq", "bne", NULL, NULL, "blt", "bge", "bltu", "bgeu"
+ 		};
+ 	      func = (word >> 12) & 0x7;
+-	      mne = (char *) branchmne[func];
++	      mne = branchmne[func];
+ 	      if (rs1 == 0 && func == 5)
+ 		{
+ 		  op[0] = op[1];
+@@ -1035,7 +1035,7 @@ riscv_disasm (Ebl *ebl,
+ 	      else if (func == 5 || func == 7)
+ 		{
+ 		  // binutils use these opcodes and the reverse parameter order
+-		  char *tmp = op[0];
++		  const char *tmp = op[0];
+ 		  op[0] = op[1];
+ 		  op[1] = tmp;
+ 		  mne = func == 5 ? "ble" : "bleu";
+@@ -1103,7 +1103,7 @@ riscv_disasm (Ebl *ebl,
+ 			{
+ 			  NULL, "frflags", "frrm", "frsr",
+ 			};
+-		      mne = (char *) unprivrw[csr - 0x000];
++		      mne = unprivrw[csr - 0x000];
+ 		    }
+ 		  else if (csr >= 0xc00 && csr <= 0xc03)
+ 		    {
+@@ -1111,7 +1111,7 @@ riscv_disasm (Ebl *ebl,
+ 			{
+ 			  "rdcycle", "rdtime", "rdinstret"
+ 			};
+-		      mne = (char *) unprivrolow[csr - 0xc00];
++		      mne = unprivrolow[csr - 0xc00];
+ 		    }
+ 		  op[0] = REG ((word >> 7) & 0x1f);
+ 		}
+@@ -1128,7 +1128,7 @@ riscv_disasm (Ebl *ebl,
+ 			{
+ 			  NULL, "fsflagsi", "fsrmi", NULL
+ 			};
+-		      mne = (char *) ((word & 0x4000) == 0 ? unprivrs : unprivrsi)[csr - 0x000];
++		      mne = ((word & 0x4000) == 0 ? unprivrs : unprivrsi)[csr - 0x000];
+ 
+ 		      if ((word & 0x4000) == 0)
+ 			op[0] = REG ((word >> 15) & 0x1f);
+@@ -1259,12 +1259,12 @@ riscv_disasm (Ebl *ebl,
+ 		  if (rd != 0)
+ 		    op[last++] = REG (rd);
+ 		  struct known_csrs key = { csr, NULL };
+-		  struct known_csrs *found = bsearch (&key, known,
+-						      sizeof (known) / sizeof (known[0]),
+-						      sizeof (known[0]),
+-						      compare_csr);
++		  const struct known_csrs *found = bsearch (&key, known,
++							    sizeof (known) / sizeof (known[0]),
++							    sizeof (known[0]),
++							    compare_csr);
+ 		  if (found)
+-		    op[last] = (char *) found->name;
++		    op[last] = found->name;
+ 		  else
+ 		    {
+ 		      snprintf (addrbuf, sizeof (addrbuf), "0x%" PRIx32, csr);
+@@ -1289,7 +1289,7 @@ riscv_disasm (Ebl *ebl,
+ 		  else if (instr == 3 && rd == 0)
+ 		    mne = "csrc";
+ 		  else
+-		    mne = (char *) mnecsr[instr];
++		    mne = mnecsr[instr];
+ 		}
+ 	      break;
+ 	    default:
+diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c
+index be10cdee..76db2929 100644
+--- a/libdw/dwarf_getsrclines.c
++++ b/libdw/dwarf_getsrclines.c
+@@ -364,7 +364,7 @@ read_srcfiles (Dwarf *dbg,
+       const unsigned char *dirp = linep;
+       while (dirp < lineendp && *dirp != 0)
+ 	{
+-	  uint8_t *endp = memchr (dirp, '\0', lineendp - dirp);
++	  const uint8_t *endp = memchr (dirp, '\0', lineendp - dirp);
+ 	  if (endp == NULL)
+ 	    goto invalid_data;
+ 	  ++ndirs;
+@@ -440,7 +440,7 @@ read_srcfiles (Dwarf *dbg,
+       for (unsigned int n = 1; n < ndirlist; n++)
+ 	{
+ 	  dirarray[n].dir = (char *) linep;
+-	  uint8_t *endp = memchr (linep, '\0', lineendp - linep);
++	  const uint8_t *endp = memchr (linep, '\0', lineendp - linep);
+ 	  assert (endp != NULL); // Checked above when calculating ndirlist.
+ 	  dirarray[n].len = endp - linep;
+ 	  linep = endp + 1;
+@@ -927,7 +927,7 @@ read_srclines (Dwarf *dbg,
+ 	    case DW_LNE_define_file:
+ 	      {
+ 		char *fname = (char *) linep;
+-		uint8_t *endp = memchr (linep, '\0', lineendp - linep);
++		const uint8_t *endp = memchr (linep, '\0', lineendp - linep);
+ 		if (endp == NULL)
+ 		  goto invalid_data;
+ 		size_t fnamelen = endp - linep;
+diff --git a/src/readelf.c b/src/readelf.c
+index a2d17358..fbdf8c71 100644
+--- a/src/readelf.c
++++ b/src/readelf.c
+@@ -8269,7 +8269,7 @@ attr_callback (Dwarf_Attribute *attrp, void *arg)
+ 		    valuestr = dwarf_filesrc (files, num, NULL, NULL);
+ 		    if (valuestr != NULL)
+ 		      {
+-			char *filename = strrchr (valuestr, '/');
++			const char *filename = strrchr (valuestr, '/');
+ 			if (filename != NULL)
+ 			  valuestr = filename + 1;
+ 		      }
+@@ -9033,7 +9033,7 @@ print_form_data (Dwarf *dbg, int form, const unsigned char *readp,
+ 		 Dwarf_Off str_offsets_base, FILE *out)
+ {
+   Dwarf_Word val;
+-  unsigned char *endp;
++  const unsigned char *endp;
+   Elf_Data *data;
+   char *str;
+   switch (form)
+@@ -9530,7 +9530,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
+ 	{
+ 	  while (linep < lineendp && *linep != 0)
+ 	    {
+-	      unsigned char *endp = memchr (linep, '\0', lineendp - linep);
++	      const unsigned char *endp = memchr (linep, '\0', lineendp - linep);
+ 	      if (unlikely (endp == NULL))
+ 		goto invalid_unit;
+ 
+@@ -9764,7 +9764,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
+ 		case DW_LNE_define_file:
+ 		  {
+ 		    char *fname = (char *) linep;
+-		    unsigned char *endp = memchr (linep, '\0',
++		    const unsigned char *endp = memchr (linep, '\0',
+ 						  lineendp - linep);
+ 		    if (unlikely (endp == NULL))
+ 		      goto invalid_unit;
+-- 
+2.47.3
+
diff --git a/src/patches/gcc-15.2.0-9c9d3aef2f66625d9cb03ef4baee10ed6648e681.patch b/src/patches/gcc-15.2.0-9c9d3aef2f66625d9cb03ef4baee10ed6648e681.patch
new file mode 100644
index 0000000000..4049c559d5
--- /dev/null
+++ b/src/patches/gcc-15.2.0-9c9d3aef2f66625d9cb03ef4baee10ed6648e681.patch
@@ -0,0 +1,73 @@
+From 9c9d3aef2f66625d9cb03ef4baee10ed6648e681 Mon Sep 17 00:00:00 2001
+From: Frank Scheiner <frank.scheiner@web.de>
+Date: Tue, 25 Nov 2025 16:58:23 -0700
+Subject: [PATCH] [PATCH] libgomp: Fix GCC build after glibc@cd748a6
+
+The toolchain autobuilds for ia64 failed ([1]) yesterday with:
+
+```
+libtool: compile:  /usr/src/t2-src/src.gcc.ia64-toolchain.251121.040147.278918/gcc-16-20251116/objs/gcc/xgcc-wrapper /usr/src/t2-src/src.gcc.ia64-toolchain.251121.040147.278918/gcc-16-20251116/objs/./gcc/xgcc -B/usr/src/t2-src/src.gcc.ia64-toolchain.251121.040147.278918/gcc-16-20251116/objs/./gcc/ -B/usr/src/t2-src/build/ia64-toolchain-24-svn-generic-ia64-itanium2-cross-linux/TOOLCHAIN/cross/usr/ia64-t2-linux-gnu/bin/ -B/usr/src/t2-src/build/ia64-toolchain-24-svn-generic-ia64-itanium2-cross-linux/TOOLCHAIN/cross/usr/ia64-t2-linux-gnu/lib/ -isystem /usr/src/t2-src/build/ia64-toolchain-24-svn-generic-ia64-itanium2-cross-linux/TOOLCHAIN/cross/usr/ia64-t2-linux-gnu/include -isystem /usr/src/t2-src/build/ia64-toolchain-24-svn-generic-ia64-itanium2-cross-linux/TOOLCHAIN/cross/usr/ia64-t2-linux-gnu/sys-include --sysroot=/usr/src/t2-src/build/ia64-toolchain-24-svn-generic-ia64-itanium2-cross-linux -DHAVE_CONFIG_H -I. -I../../../libgomp -I../../../libgomp/config/linux/ia64 -I../../../libgomp
 /config/linux -I../../../libgomp/config/posix -I../../../libgomp -I../../../libgomp/../include -Wall -Werror -ftls-model=initial-exec -pthread -DUSING_INITIAL_EXEC_TLS -g -O2 -MT oacc-cuda.lo -MD -MP -MF .deps/oacc-cuda.Tpo -c ../../../libgomp/oacc-cuda.c -o oacc-cuda.o >/dev/null 2>&1
+../../../libgomp/affinity-fmt.c: In function 'gomp_display_affinity':
+../../../libgomp/affinity-fmt.c:330:25: error: initialization discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
+  330 |               char *q = strchr (p + 1, '}');
+      |                         ^~~~~~
+```
+
+[1]: https://github.com/johnny-mnemonic/toolchain-autobuilds/actions/runs/19559235881
+
+This is not ia64-specific but due to the changes in the recent glibc
+commit "Implement C23 const-preserving standard library macros" (i.e.
+[2]) now requiring "char *q" to be a pointer to a const char to compile
+w/o error because of the return value of strchr() .
+
+[2]: https://sourceware.org/git/?p=glibc.git;a=commit;h=cd748a63ab1a7ae846175c532a3daab341c62690
+
+Also see the related discussion at [3] for details.
+
+[3]: https://sourceware.org/pipermail/libc-alpha/2025-November/172809.html
+
+The GCC build is fixed by the attached patch, see [4] for a successful
+build with the then latest snapshots of binutils, glibc and GCC.
+
+[4]: https://github.com/johnny-mnemonic/toolchain-autobuilds/actions/runs/19585045571
+
+Idea from Tomas, attached patch from me.
+
+Cheers,
+Frank
+
+0001-libgomp-Fix-GCC-build-after-glibc-cd748a6.patch
+
+From 80af9c233c694904174b54a59404d311378f41f8 Mon Sep 17 00:00:00 2001
+From: Frank Scheiner <frank.scheiner@web.de>
+Date: Sat, 22 Nov 2025 14:58:10 +0100
+Subject: [PATCH] libgomp: Fix GCC build after glibc@cd748a6
+
+char *q needs to be a pointer to a const char for the return value of
+strchr() with glibc after "Implement C23 const-preserving standard library
+macros".
+
+[glibc@cd748a6]: https://sourceware.org/git/?p=glibc.git;a=commit;h=cd748a63ab1a7ae846175c532a3daab341c62690
+
+libgomp/ChangeLog:
+	* affinity-fmt.c: Make char *q a pointer to a const char.
+---
+ libgomp/affinity-fmt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgomp/affinity-fmt.c b/libgomp/affinity-fmt.c
+index 1fae893cbaca..8d3df5f1cd55 100644
+--- a/libgomp/affinity-fmt.c
++++ b/libgomp/affinity-fmt.c
+@@ -327,7 +327,7 @@ gomp_display_affinity (char *buffer, size_t size,
+ 	      }
+ 	  if (c == '{')
+ 	    {
+-	      char *q = strchr (p + 1, '}');
++	      const char *q = strchr (p + 1, '}');
+ 	      if (q)
+ 		gomp_fatal ("unsupported long type name '%.*s' in affinity "
+ 			    "format", (int) (q - (p + 1)), p + 1);
+-- 
+2.47.3
+
diff --git a/src/patches/glibc-2.42-CVE-2025-15281.patch b/src/patches/glibc-2.42-CVE-2025-15281.patch
deleted file mode 100644
index 89322f80d6..0000000000
--- a/src/patches/glibc-2.42-CVE-2025-15281.patch
+++ /dev/null
@@ -1,175 +0,0 @@
-From cbf39c26b25801e9bc88499b4fd361ac172d4125 Mon Sep 17 00:00:00 2001
-From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-Date: Thu, 15 Jan 2026 10:32:19 -0300
-Subject: [PATCH] posix: Reset wordexp_t fields with WRDE_REUSE (CVE-2025-15281
- / BZ 33814)
-
-The wordexp fails to properly initialize the input wordexp_t when
-WRDE_REUSE is used. The wordexp_t struct is properly freed, but
-reuses the old wc_wordc value and updates the we_wordv in the
-wrong position.  A later wordfree will then call free with an
-invalid pointer.
-
-Checked on x86_64-linux-gnu and i686-linux-gnu.
-
-Reviewed-by: Carlos O'Donell <carlos@redhat.com>
-(cherry picked from commit 80cc58ea2de214f85b0a1d902a3b668ad2ecb302)
----
- posix/Makefile            | 11 +++++
- posix/tst-wordexp-reuse.c | 89 +++++++++++++++++++++++++++++++++++++++
- posix/wordexp.c           |  2 +
- 3 files changed, 102 insertions(+)
- create mode 100644 posix/tst-wordexp-reuse.c
-
-diff --git a/posix/Makefile b/posix/Makefile
-index a36e5decd3..1ea86efcc1 100644
---- a/posix/Makefile
-+++ b/posix/Makefile
-@@ -327,6 +327,7 @@ tests := \
-   tst-wait4 \
-   tst-waitid \
-   tst-wordexp-nocmd \
-+  tst-wordexp-reuse \
-   tstgetopt \
-   # tests
- 
-@@ -457,6 +458,8 @@ generated += \
-   tst-rxspencer-no-utf8.mtrace \
-   tst-vfork3-mem.out \
-   tst-vfork3.mtrace \
-+  tst-wordexp-reuse-mem.out \
-+  tst-wordexp-reuse.mtrace \
-   # generated
- endif
- endif
-@@ -492,6 +495,7 @@ tests-special += \
-   $(objpfx)tst-pcre-mem.out \
-   $(objpfx)tst-rxspencer-no-utf8-mem.out \
-   $(objpfx)tst-vfork3-mem.out \
-+  $(objpfx)tst-wordexp-reuse.out \
-   # tests-special
- endif
- endif
-@@ -775,3 +779,10 @@ $(objpfx)posix-conf-vars-def.h: $(..)scripts/gen-posix-conf-vars.awk \
- 	$(make-target-directory)
- 	$(AWK) -f $(filter-out Makefile, $^) > $@.tmp
- 	mv -f $@.tmp $@
-+
-+tst-wordexp-reuse-ENV += MALLOC_TRACE=$(objpfx)tst-wordexp-reuse.mtrace \
-+			 LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so
-+
-+$(objpfx)tst-wordexp-reuse-mem.out: $(objpfx)tst-wordexp-reuse.out
-+	$(common-objpfx)malloc/mtrace $(objpfx)tst-wordexp-reuse.mtrace > $@; \
-+	$(evaluate-test)
-diff --git a/posix/tst-wordexp-reuse.c b/posix/tst-wordexp-reuse.c
-new file mode 100644
-index 0000000000..3926b9f557
---- /dev/null
-+++ b/posix/tst-wordexp-reuse.c
-@@ -0,0 +1,89 @@
-+/* Test for wordexp with WRDE_REUSE flag.
-+   Copyright (C) 2026 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <https://www.gnu.org/licenses/>.  */
-+
-+#include <wordexp.h>
-+#include <mcheck.h>
-+
-+#include <support/check.h>
-+
-+static int
-+do_test (void)
-+{
-+  mtrace ();
-+
-+  {
-+    wordexp_t p = { 0 };
-+    TEST_COMPARE (wordexp ("one", &p, 0), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[0], "one");
-+    TEST_COMPARE (wordexp ("two", &p, WRDE_REUSE), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[0], "two");
-+    wordfree (&p);
-+  }
-+
-+  {
-+    wordexp_t p = { .we_offs = 2 };
-+    TEST_COMPARE (wordexp ("one", &p, 0), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[0], "one");
-+    TEST_COMPARE (wordexp ("two", &p, WRDE_REUSE | WRDE_DOOFFS), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[p.we_offs + 0], "two");
-+    wordfree (&p);
-+  }
-+
-+  {
-+    wordexp_t p = { 0 };
-+    TEST_COMPARE (wordexp ("one", &p, 0), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[0], "one");
-+    TEST_COMPARE (wordexp ("two", &p, WRDE_REUSE | WRDE_APPEND), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[0], "two");
-+    wordfree (&p);
-+  }
-+
-+  {
-+    wordexp_t p = { .we_offs = 2 };
-+    TEST_COMPARE (wordexp ("one", &p, WRDE_DOOFFS), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[p.we_offs + 0], "one");
-+    TEST_COMPARE (wordexp ("two", &p, WRDE_REUSE
-+				      | WRDE_DOOFFS), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[p.we_offs + 0], "two");
-+    wordfree (&p);
-+  }
-+
-+  {
-+    wordexp_t p = { .we_offs = 2 };
-+    TEST_COMPARE (wordexp ("one", &p, WRDE_DOOFFS), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[p.we_offs + 0], "one");
-+    TEST_COMPARE (wordexp ("two", &p, WRDE_REUSE
-+				      | WRDE_DOOFFS | WRDE_APPEND), 0);
-+    TEST_COMPARE (p.we_wordc, 1);
-+    TEST_COMPARE_STRING (p.we_wordv[p.we_offs + 0], "two");
-+    wordfree (&p);
-+  }
-+
-+  return 0;
-+}
-+
-+#include <support/test-driver.c>
-diff --git a/posix/wordexp.c b/posix/wordexp.c
-index a69b732801..9df4bb7424 100644
---- a/posix/wordexp.c
-+++ b/posix/wordexp.c
-@@ -2216,7 +2216,9 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
-     {
-       /* Minimal implementation of WRDE_REUSE for now */
-       wordfree (pwordexp);
-+      old_word.we_wordc = 0;
-       old_word.we_wordv = NULL;
-+      pwordexp->we_wordc = 0;
-     }
- 
-   if ((flags & WRDE_APPEND) == 0)
--- 
-2.43.7
-
diff --git a/src/patches/glibc-2.42-CVE-2026-0861.patch b/src/patches/glibc-2.42-CVE-2026-0861.patch
deleted file mode 100644
index 5126d2e256..0000000000
--- a/src/patches/glibc-2.42-CVE-2026-0861.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From b0ec8fb689df862171f0f78994a3bdeb51313545 Mon Sep 17 00:00:00 2001
-From: Siddhesh Poyarekar <siddhesh@gotplt.org>
-Date: Thu, 15 Jan 2026 06:06:40 -0500
-Subject: [PATCH] memalign: reinstate alignment overflow check (CVE-2026-0861)
-
-The change to cap valid sizes to PTRDIFF_MAX inadvertently dropped the
-overflow check for alignment in memalign functions, _mid_memalign and
-_int_memalign.  Reinstate the overflow check in _int_memalign, aligned
-with the PTRDIFF_MAX change since that is directly responsible for the
-CVE.  The missing _mid_memalign check is not relevant (and does not have
-a security impact) and may need a different approach to fully resolve,
-so it has been omitted.
-
-CVE-Id: CVE-2026-0861
-Vulnerable-Commit: 9bf8e29ca136094f73f69f725f15c51facc97206
-Reported-by: Igor Morgenstern, Aisle Research
-Fixes: BZ #33796
-Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
-Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
-(cherry picked from commit c9188d333717d3ceb7e3020011651f424f749f93)
----
- malloc/malloc.c               |  7 +++++--
- malloc/tst-malloc-too-large.c | 10 ++--------
- 2 files changed, 7 insertions(+), 10 deletions(-)
-
-diff --git a/malloc/malloc.c b/malloc/malloc.c
-index 5f3e701fd1..1d5aa304d3 100644
---- a/malloc/malloc.c
-+++ b/malloc/malloc.c
-@@ -5167,7 +5167,7 @@ _int_memalign (mstate av, size_t alignment, size_t bytes)
-   INTERNAL_SIZE_T size;
- 
-   nb = checked_request2size (bytes);
--  if (nb == 0)
-+  if (nb == 0 || alignment > PTRDIFF_MAX)
-     {
-       __set_errno (ENOMEM);
-       return NULL;
-@@ -5183,7 +5183,10 @@ _int_memalign (mstate av, size_t alignment, size_t bytes)
-      we don't find anything in those bins, the common malloc code will
-      scan starting at 2x.  */
- 
--  /* Call malloc with worst case padding to hit alignment. */
-+  /* Call malloc with worst case padding to hit alignment.  ALIGNMENT is a
-+     power of 2, so it tops out at (PTRDIFF_MAX >> 1) + 1, leaving plenty of
-+     space to add MINSIZE and whatever checked_request2size adds to BYTES to
-+     get NB.  Consequently, total below also does not overflow.  */
-   m = (char *) (_int_malloc (av, nb + alignment + MINSIZE));
- 
-   if (m == NULL)
-diff --git a/malloc/tst-malloc-too-large.c b/malloc/tst-malloc-too-large.c
-index a548a37b46..a1bda673a3 100644
---- a/malloc/tst-malloc-too-large.c
-+++ b/malloc/tst-malloc-too-large.c
-@@ -152,7 +152,6 @@ test_large_allocations (size_t size)
- }
- 
- 
--static long pagesize;
- 
- /* This function tests the following aligned memory allocation functions
-    using several valid alignments and precedes each allocation test with a
-@@ -171,8 +170,8 @@ test_large_aligned_allocations (size_t size)
- 
-   /* All aligned memory allocation functions expect an alignment that is a
-      power of 2.  Given this, we test each of them with every valid
--     alignment from 1 thru PAGESIZE.  */
--  for (align = 1; align <= pagesize; align *= 2)
-+     alignment for the type of ALIGN, i.e. until it wraps to 0.  */
-+  for (align = 1; align > 0; align <<= 1)
-     {
-       test_setup ();
- #if __GNUC_PREREQ (7, 0)
-@@ -265,11 +264,6 @@ do_test (void)
-   DIAG_IGNORE_NEEDS_COMMENT (7, "-Walloc-size-larger-than=");
- #endif
- 
--  /* Aligned memory allocation functions need to be tested up to alignment
--     size equivalent to page size, which should be a power of 2.  */
--  pagesize = sysconf (_SC_PAGESIZE);
--  TEST_VERIFY_EXIT (powerof2 (pagesize));
--
-   /* Loop 1: Ensure that all allocations with SIZE close to SIZE_MAX, i.e.
-      in the range (SIZE_MAX - 2^14, SIZE_MAX], fail.
- 
--- 
-2.47.3
-
diff --git a/src/patches/glibc-2.42-CVE-2026-0915.patch b/src/patches/glibc-2.42-CVE-2026-0915.patch
deleted file mode 100644
index 078dc451fa..0000000000
--- a/src/patches/glibc-2.42-CVE-2026-0915.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From 453e6b8dbab935257eb0802b0c97bca6b67ba30e Mon Sep 17 00:00:00 2001
-From: Carlos O'Donell <carlos@redhat.com>
-Date: Thu, 15 Jan 2026 15:09:38 -0500
-Subject: [PATCH] resolv: Fix NSS DNS backend for getnetbyaddr (CVE-2026-0915)
-
-The default network value of zero for net was never tested for and
-results in a DNS query constructed from uninitialized stack bytes.
-The solution is to provide a default query for the case where net
-is zero.
-
-Adding a test case for this was straight forward given the existence of
-tst-resolv-network and if the test is added without the fix you observe
-this failure:
-
-FAIL: resolv/tst-resolv-network
-original exit status 1
-error: tst-resolv-network.c:174: invalid QNAME: \146\218\129\128
-error: 1 test failures
-
-With a random QNAME resulting from the use of uninitialized stack bytes.
-
-After the fix the test passes.
-
-Additionally verified using wireshark before and after to ensure
-on-the-wire bytes for the DNS query were as expected.
-
-No regressions on x86_64.
-
-Reviewed-by: Florian Weimer <fweimer@redhat.com>
-(cherry picked from commit e56ff82d5034ec66c6a78f517af6faa427f65b0b)
----
- resolv/nss_dns/dns-network.c | 4 ++++
- resolv/tst-resolv-network.c  | 6 ++++++
- 2 files changed, 10 insertions(+)
-
-diff --git a/resolv/nss_dns/dns-network.c b/resolv/nss_dns/dns-network.c
-index 519f8422ca..e14e959d7c 100644
---- a/resolv/nss_dns/dns-network.c
-+++ b/resolv/nss_dns/dns-network.c
-@@ -207,6 +207,10 @@ _nss_dns_getnetbyaddr_r (uint32_t net, int type, struct netent *result,
-       sprintf (qbuf, "%u.%u.%u.%u.in-addr.arpa", net_bytes[3], net_bytes[2],
- 	       net_bytes[1], net_bytes[0]);
-       break;
-+    default:
-+      /* Default network (net is originally zero).  */
-+      strcpy (qbuf, "0.0.0.0.in-addr.arpa");
-+      break;
-     }
- 
-   net_buffer.buf = orig_net_buffer = (querybuf *) alloca (1024);
-diff --git a/resolv/tst-resolv-network.c b/resolv/tst-resolv-network.c
-index d9f69649d0..181be80835 100644
---- a/resolv/tst-resolv-network.c
-+++ b/resolv/tst-resolv-network.c
-@@ -46,6 +46,9 @@ handle_code (const struct resolv_response_context *ctx,
- {
-   switch (code)
-     {
-+    case 0:
-+      send_ptr (b, qname, qclass, qtype, "0.in-addr.arpa");
-+      break;
-     case 1:
-       send_ptr (b, qname, qclass, qtype, "1.in-addr.arpa");
-       break;
-@@ -265,6 +268,9 @@ do_test (void)
-                 "error: TRY_AGAIN\n");
- 
-   /* Lookup by address, success cases.  */
-+  check_reverse (0,
-+                 "name: 0.in-addr.arpa\n"
-+                 "net: 0x00000000\n");
-   check_reverse (1,
-                  "name: 1.in-addr.arpa\n"
-                  "net: 0x00000001\n");
--- 
-2.47.3
-
diff --git a/src/patches/krb5-1.12.3-FTBFS.patch b/src/patches/krb5-1.12.3-FTBFS.patch
new file mode 100644
index 0000000000..938df05565
--- /dev/null
+++ b/src/patches/krb5-1.12.3-FTBFS.patch
@@ -0,0 +1,188 @@
+From ad4dcf1856dadc4b352b5c8ff08e51c7290fb41f Mon Sep 17 00:00:00 2001
+From: Alexander Bokovoy <abokovoy@redhat.com>
+Date: Wed, 10 Dec 2025 10:42:02 +0200
+Subject: [PATCH] Fix strchr() conformance to C23
+
+C23 7.28.5.1 specifies search functions such as strchr() as generic,
+returning const char * if the first argument is of type const char *.
+Fix uses of strchr() to conform to this change.
+
+[jrische@redhat.com: altered changes to avoid casts; fixed an
+additional case]
+[ghudson@mit.edu: condensed some declarations; rewrote commit message]
+
+ticket: 9191 (new)
+---
+ src/lib/krb5/ccache/ccbase.c                      |  4 ++--
+ src/lib/krb5/os/expand_path.c                     |  3 ++-
+ src/lib/krb5/os/locate_kdc.c                      | 15 +++++++--------
+ src/plugins/preauth/pkinit/pkinit_crypto.h        |  2 +-
+ .../preauth/pkinit/pkinit_crypto_openssl.c        |  6 +++---
+ src/plugins/preauth/pkinit/pkinit_identity.c      |  2 +-
+ src/plugins/preauth/pkinit/pkinit_matching.c      |  2 +-
+ src/tests/responder.c                             |  3 +--
+ 8 files changed, 18 insertions(+), 19 deletions(-)
+
+diff --git a/src/lib/krb5/ccache/ccbase.c b/src/lib/krb5/ccache/ccbase.c
+index 696b681812..30a0a410c5 100644
+--- a/src/lib/krb5/ccache/ccbase.c
++++ b/src/lib/krb5/ccache/ccbase.c
+@@ -201,8 +201,8 @@ krb5_cc_register(krb5_context context, const krb5_cc_ops *ops,
+ krb5_error_code KRB5_CALLCONV
+ krb5_cc_resolve (krb5_context context, const char *name, krb5_ccache *cache)
+ {
+-    char *pfx, *cp;
+-    const char *resid;
++    char *pfx;
++    const char *cp, *resid;
+     unsigned int pfxlen;
+     krb5_error_code err;
+     const krb5_cc_ops *ops;
+diff --git a/src/lib/krb5/os/expand_path.c b/src/lib/krb5/os/expand_path.c
+index 5cbccf08c8..6569b8820b 100644
+--- a/src/lib/krb5/os/expand_path.c
++++ b/src/lib/krb5/os/expand_path.c
+@@ -454,7 +454,8 @@ k5_expand_path_tokens_extra(krb5_context context, const char *path_in,
+ {
+     krb5_error_code ret;
+     struct k5buf buf;
+-    char *tok_begin, *tok_end, *tok_val, **extra_tokens = NULL, *path;
++    const char *tok_begin, *tok_end;
++    char *tok_val, **extra_tokens = NULL, *path;
+     const char *path_left;
+     size_t nargs = 0, i;
+     va_list ap;
+diff --git a/src/lib/krb5/os/locate_kdc.c b/src/lib/krb5/os/locate_kdc.c
+index c186bce51c..0cceff8000 100644
+--- a/src/lib/krb5/os/locate_kdc.c
++++ b/src/lib/krb5/os/locate_kdc.c
+@@ -214,8 +214,8 @@ oom:
+ }
+ 
+ static void
+-parse_uri_if_https(const char *host_or_uri, k5_transport *transport,
+-                   const char **host, const char **uri_path)
++parse_uri_if_https(char *host_or_uri, k5_transport *transport,
++                   char **host, const char **uri_path)
+ {
+     char *cp;
+ 
+@@ -257,8 +257,7 @@ locate_srv_conf_1(krb5_context context, const krb5_data *realm,
+                   k5_transport transport, int udpport)
+ {
+     const char *realm_srv_names[4];
+-    char **hostlist = NULL, *realmstr = NULL, *host = NULL;
+-    const char *hostspec;
++    char **hostlist = NULL, *realmstr = NULL, *host = NULL, *hostspec;
+     krb5_error_code code;
+     size_t i;
+     int default_port;
+@@ -587,8 +586,8 @@ prof_locate_server(krb5_context context, const krb5_data *realm,
+  * Return a NULL *host_out if there are any problems parsing the URI.
+  */
+ static void
+-parse_uri_fields(const char *uri, k5_transport *transport_out,
+-                 const char **host_out, int *primary_out)
++parse_uri_fields(char *uri, k5_transport *transport_out,
++                 char **host_out, int *primary_out)
+ 
+ {
+     k5_transport transport;
+@@ -656,8 +655,8 @@ locate_uri(krb5_context context, const krb5_data *realm,
+     krb5_error_code ret;
+     k5_transport transport, host_trans;
+     struct srv_dns_entry *answers, *entry;
+-    char *host, *sitename;
+-    const char *host_field, *path;
++    char *host, *sitename, *host_field;
++    const char *path;
+     int port, def_port, primary;
+ 
+     ret = get_sitename(context, realm, &sitename);
+diff --git a/src/plugins/preauth/pkinit/pkinit_crypto.h b/src/plugins/preauth/pkinit/pkinit_crypto.h
+index 57bb3cb840..be2d02c227 100644
+--- a/src/plugins/preauth/pkinit/pkinit_crypto.h
++++ b/src/plugins/preauth/pkinit/pkinit_crypto.h
+@@ -440,7 +440,7 @@ krb5_error_code crypto_load_cas_and_crls
+ 		    defines the storage type (file, directory, etc) */
+ 	int catype,					/* IN
+ 		    defines the ca type (anchor, intermediate, crls) */
+-	char *id);					/* IN
++	const char *id);				/* IN
+ 		    defines the location (filename, directory name, etc) */
+ 
+ /*
+diff --git a/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c b/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
+index bd25bae478..d1fe18e5ab 100644
+--- a/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
++++ b/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
+@@ -4999,7 +4999,7 @@ load_cas_and_crls(krb5_context context,
+                   pkinit_req_crypto_context req_cryptoctx,
+                   pkinit_identity_crypto_context id_cryptoctx,
+                   int catype,
+-                  char *filename)
++                  const char *filename)
+ {
+     STACK_OF(X509_INFO) *sk = NULL;
+     STACK_OF(X509) *ca_certs = NULL;
+@@ -5157,7 +5157,7 @@ load_cas_and_crls_dir(krb5_context context,
+                       pkinit_req_crypto_context req_cryptoctx,
+                       pkinit_identity_crypto_context id_cryptoctx,
+                       int catype,
+-                      char *dirname)
++                      const char *dirname)
+ {
+     krb5_error_code retval = EINVAL;
+     char **fnames = NULL, *filename;
+@@ -5201,7 +5201,7 @@ crypto_load_cas_and_crls(krb5_context context,
+                          pkinit_identity_crypto_context id_cryptoctx,
+                          int idtype,
+                          int catype,
+-                         char *id)
++                         const char *id)
+ {
+     switch (idtype) {
+     case IDTYPE_FILE:
+diff --git a/src/plugins/preauth/pkinit/pkinit_identity.c b/src/plugins/preauth/pkinit/pkinit_identity.c
+index 0dcfcfc46a..ad65f237b0 100644
+--- a/src/plugins/preauth/pkinit/pkinit_identity.c
++++ b/src/plugins/preauth/pkinit/pkinit_identity.c
+@@ -473,7 +473,7 @@ process_option_ca_crl(krb5_context context,
+                       const char *value,
+                       int catype)
+ {
+-    char *residual;
++    const char *residual;
+     unsigned int typelen;
+     int idtype;
+ 
+diff --git a/src/plugins/preauth/pkinit/pkinit_matching.c b/src/plugins/preauth/pkinit/pkinit_matching.c
+index 0ea072c887..b3c8df1610 100644
+--- a/src/plugins/preauth/pkinit/pkinit_matching.c
++++ b/src/plugins/preauth/pkinit/pkinit_matching.c
+@@ -262,7 +262,7 @@ parse_rule_component(krb5_context context,
+     char err_buf[128];
+     int ret;
+     struct keyword_desc *kw, *nextkw;
+-    char *nk;
++    const char *nk;
+     int found_next_kw = 0;
+     char *value = NULL;
+     size_t len;
+diff --git a/src/tests/responder.c b/src/tests/responder.c
+index 82f870ea5d..4221a20283 100644
+--- a/src/tests/responder.c
++++ b/src/tests/responder.c
+@@ -282,8 +282,7 @@ responder(krb5_context ctx, void *rawdata, krb5_responder_context rctx)
+     /* Provide a particular response for an OTP challenge. */
+     if (data->otp_answer != NULL) {
+         if (krb5_responder_otp_get_challenge(ctx, rctx, &ochl) == 0) {
+-            key = strchr(data->otp_answer, '=');
+-            if (key != NULL) {
++            if (strchr(data->otp_answer, '=') != NULL) {
+                 /* Make a copy of the answer that we can chop up. */
+                 key = strdup(data->otp_answer);
+                 if (key == NULL)
+-- 
+2.47.3
+
diff --git a/src/patches/libtmps-0.10.2-FTBFS.patch b/src/patches/libtmps-0.10.2-FTBFS.patch
new file mode 100644
index 0000000000..dba78b59ea
--- /dev/null
+++ b/src/patches/libtmps-0.10.2-FTBFS.patch
@@ -0,0 +1,33 @@
+From fc8820cfaa8b5e17328f731df93911f6ab92443b Mon Sep 17 00:00:00 2001
+From: Stefan Berger <stefanb@linux.ibm.com>
+Date: Fri, 2 Jan 2026 11:37:31 -0500
+Subject: [PATCH] Fix a compilation error in TPMLIB_GetPlaintext
+
+Fix a compilation error that newer gcc versions may complain about:
+
+tpm_library.c: In function 'TPMLIB_GetPlaintext':
+tpm_library.c:441:11: error: assignment discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
+  441 |     start = strstr(stream, starttag);
+      |           ^
+At top level:
+cc1: note: unrecognized command-line option '-Wno-self-assign' may have been intended to silence earlier diagnostics
+cc1: all warnings being treated as errors
+
+Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
+---
+ src/tpm_library.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tpm_library.c b/src/tpm_library.c
+index f48f4fd38..7b2ea687e 100644
+--- a/src/tpm_library.c
++++ b/src/tpm_library.c
+@@ -435,7 +435,7 @@ static unsigned char *TPMLIB_GetPlaintext(const char *stream,
+                                           const char *endtag,
+                                           size_t *length)
+ {
+-    char *start, *end;
++    const char *start, *end;
+     unsigned char *plaintext = NULL;
+ 
+     start = strstr(stream, starttag);
diff --git a/src/patches/libxcrypt-4.5.1-174c24d6e87aeae631bc0a7bb1ba983cf8def4de.patch b/src/patches/libxcrypt-4.5.1-174c24d6e87aeae631bc0a7bb1ba983cf8def4de.patch
new file mode 100644
index 0000000000..15cb405b41
--- /dev/null
+++ b/src/patches/libxcrypt-4.5.1-174c24d6e87aeae631bc0a7bb1ba983cf8def4de.patch
@@ -0,0 +1,38 @@
+From 174c24d6e87aeae631bc0a7bb1ba983cf8def4de Mon Sep 17 00:00:00 2001
+From: Stanislav Zidek <szidek@redhat.com>
+Date: Wed, 10 Dec 2025 14:03:54 +0100
+Subject: [PATCH] fix -Werror=discarded-qualifiers
+
+On Fedora rawhide (to be Fedora 44), gcc became more strict
+wrt. const-ness.
+---
+ lib/crypt-gost-yescrypt.c | 2 +-
+ lib/crypt-sm3-yescrypt.c  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/crypt-gost-yescrypt.c b/lib/crypt-gost-yescrypt.c
+index 190ae94b..e9dc7e80 100644
+--- a/lib/crypt-gost-yescrypt.c
++++ b/lib/crypt-gost-yescrypt.c
+@@ -131,7 +131,7 @@ crypt_gost_yescrypt_rn (const char *phrase, size_t phr_size,
+   intbuf->outbuf[1] = 'g';
+ 
+   /* extract yescrypt output from "$y$param$salt$output" */
+-  char *hptr = strchr ((const char *) intbuf->retval + 3, '$');
++  char *hptr = strchr ((char *) intbuf->retval + 3, '$');
+   if (!hptr)
+     {
+       errno = EINVAL;
+diff --git a/lib/crypt-sm3-yescrypt.c b/lib/crypt-sm3-yescrypt.c
+index 4f42aa66..17da83e1 100644
+--- a/lib/crypt-sm3-yescrypt.c
++++ b/lib/crypt-sm3-yescrypt.c
+@@ -136,7 +136,7 @@ crypt_sm3_yescrypt_rn (const char *phrase, size_t phr_size,
+   intbuf->outbuf[3] = '3';
+ 
+   /* extract yescrypt output from "$y$param$salt$output" */
+-  char *hptr = strchr ((const char *) intbuf->retval + 3, '$');
++  char *hptr = strchr ((char *) intbuf->retval + 3, '$');
+   if (!hptr)
+     {
+       errno = EINVAL;
diff --git a/src/patches/mpd-0.24.5-openat2.patch b/src/patches/mpd-0.24.5-openat2.patch
new file mode 100644
index 0000000000..2963d7d6ae
--- /dev/null
+++ b/src/patches/mpd-0.24.5-openat2.patch
@@ -0,0 +1,60 @@
+From 8caeedac3ed17491cd77240211ed13be80072a15 Mon Sep 17 00:00:00 2001
+From: Max Kellermann <max.kellermann@gmail.com>
+Date: Mon, 26 Jan 2026 14:18:53 +0100
+Subject: [PATCH] system/linux: detect native openat2() support at configure
+ time
+
+The Linux man-pages notes about openat2(): "glibc provides no wrapper
+for openat2(), necessitating the use of syscall(2)"
+
+.. but glibc 2.43 finally added a wrapper which caused a conflict with
+our existing definition.
+
+Closes https://github.com/MusicPlayerDaemon/MPD/issues/2417
+---
+ src/system/linux/meson.build |  6 +++++-
+ src/system/linux/openat2.h   | 11 ++++++++++-
+
+diff --git a/src/system/linux/meson.build b/src/system/linux/meson.build
+index 36a98f2127..4a0d6267ad 100644
+--- a/src/system/linux/meson.build
++++ b/src/system/linux/meson.build
+@@ -1,7 +1,11 @@
+ system_linux_features = configuration_data()
+ 
+ if host_machine.system() == 'linux'
+-  system_linux_features.set('HAVE_OPENAT2', compiler.has_header('linux/openat2.h'))
++  have_native_openat2 = compiler.has_header_symbol('fcntl.h', 'openat2')
++  # openat2() support was added to glibc 2.43
++  system_linux_features.set('HAVE_NATIVE_OPENAT2', have_native_openat2)
++  # if not provided by the C library, we roll our own using syscall()
++  system_linux_features.set('HAVE_OPENAT2', have_native_openat2 or compiler.has_header('linux/openat2.h'))
+ endif
+ 
+ configure_file(output: 'Features.h', configuration: system_linux_features)
+diff --git a/src/system/linux/openat2.h b/src/system/linux/openat2.h
+index fdf3820983..807df97cb3 100644
+--- a/src/system/linux/openat2.h
++++ b/src/system/linux/openat2.h
+@@ -4,7 +4,14 @@
+ 
+ #pragma once
+ 
+-#include <fcntl.h> // for O_*
++#include "system/linux/Features.h" // for HAVE_NATIVE_OPENAT2
++
++#include <fcntl.h>
++
++#ifndef HAVE_NATIVE_OPENAT2
++/* if the C library does not provide an openat2() wrappper, we roll
++   our own */
++
+ #include <linux/openat2.h> // for RESOLVE_*
+ #include <sys/syscall.h>
+ #include <unistd.h>
+@@ -15,3 +22,5 @@ openat2(int dirfd, const char *pathname,
+ {
+ 	return syscall(__NR_openat2, dirfd, pathname, how, size);
+ }
++
++#endif // !HAVE_NATIVE_OPENAT2
diff --git a/src/patches/socat-1.8.1.0-printtime.patch b/src/patches/socat-1.8.1.0-printtime.patch
new file mode 100644
index 0000000000..f1e2a43b70
--- /dev/null
+++ b/src/patches/socat-1.8.1.0-printtime.patch
@@ -0,0 +1,13 @@
+diff --git a/filan.c b/filan.c
+index 101940a..85db9b4 100644
+--- a/filan.c
++++ b/filan.c
+@@ -1105,7 +1105,7 @@ const char *getfiletypestring(int st_mode) {
+ }
+ 
+ static int printtime(FILE *outfile, time_t time) {
+-   const char *s;
++   char *s;
+ 
+    if (filan_rawoutput) {
+       fprintf(outfile, "\t"F_time, time);
diff --git a/src/patches/systemd-258-FTBFS.patch b/src/patches/systemd-258-FTBFS.patch
new file mode 100644
index 0000000000..4c82f7adf3
--- /dev/null
+++ b/src/patches/systemd-258-FTBFS.patch
@@ -0,0 +1,744 @@
+From 0bac1ed2422f15308414dd1e9d09812a966b0348 Mon Sep 17 00:00:00 2001
+From: Daan De Meyer <daan.j.demeyer@gmail.com>
+Date: Tue, 25 Nov 2025 16:46:04 +0100
+Subject: [PATCH] tree-wide: Fix constness issues with newer glibc
+
+Latest glibc uses _Generic to have strstr() and other functions return
+const char* or char* based on whether the input is a const char* or a
+char*. This causes build failures as we previously always expected a char*.
+
+Let's fix the compilation failures and add our own macros similar to glibc's
+to have string functions that return a mutable or const pointer depending on
+the input.
+---
+ src/analyze/analyze-chid.c                |  2 +-
+ src/basic/proc-cmdline.c                  |  6 ++---
+ src/basic/socket-util.c                   |  2 +-
+ src/basic/sort-util.c                     |  4 +--
+ src/basic/sort-util.h                     |  4 ++-
+ src/basic/string-util.c                   | 22 ++++++----------
+ src/basic/string-util.h                   | 32 ++++++++++++++++-------
+ src/basic/strv.c                          |  8 +++---
+ src/basic/strv.h                          |  6 +++--
+ src/basic/time-util.c                     |  8 ++----
+ src/basic/unit-name.c                     |  8 +++---
+ src/cryptsetup/cryptsetup-generator.c     |  3 +--
+ src/fundamental/macro-fundamental.h       |  7 +++++
+ src/fundamental/string-util-fundamental.c |  8 +++---
+ src/fundamental/string-util-fundamental.h | 15 ++++++++---
+ src/home/homed-manager.c                  |  2 +-
+ src/journal/journalctl-util.c             |  3 +--
+ src/libsystemd/sd-bus/sd-bus.c            | 17 ++++++------
+ src/libsystemd/sd-hwdb/sd-hwdb.c          |  2 +-
+ src/libsystemd/sd-journal/catalog.c       | 11 ++++----
+ src/network/networkd-dhcp-server.c        |  3 +--
+ src/shared/bus-unit-util.c                |  4 +--
+ src/shared/pager.c                        |  2 +-
+ src/shared/seccomp-util.c                 |  2 +-
+ src/shared/vpick.c                        |  2 +-
+ src/udev/udev-builtin-net_id.c            | 14 +++++-----
+ 26 files changed, 108 insertions(+), 89 deletions(-)
+
+diff --git a/src/analyze/analyze-chid.c b/src/analyze/analyze-chid.c
+index cf9f0daae52..612465095f8 100644
+--- a/src/analyze/analyze-chid.c
++++ b/src/analyze/analyze-chid.c
+@@ -23,7 +23,7 @@
+ #include "virt.h"
+ 
+ static int parse_chid_type(const char *s, size_t *ret) {
+-        char *e;
++        const char *e;
+         unsigned u;
+         int r;
+ 
+diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
+index fd9cfbae283..e5a8928cc90 100644
+--- a/src/basic/proc-cmdline.c
++++ b/src/basic/proc-cmdline.c
+@@ -163,9 +163,7 @@ int proc_cmdline_strv(char ***ret) {
+ }
+ 
+ static char *mangle_word(const char *word, ProcCmdlineFlags flags) {
+-        char *c;
+-
+-        c = startswith(word, "rd.");
++        char *c = (char*) startswith(word, "rd.");
+         if (c) {
+                 /* Filter out arguments that are intended only for the initrd */
+ 
+@@ -182,6 +180,8 @@ static char *mangle_word(const char *word, ProcCmdlineFlags flags) {
+         return (char*) word;
+ }
+ 
++#define mangle_word(word, flags) const_generic(word, mangle_word(word, flags))
++
+ static int proc_cmdline_parse_strv(char **args, proc_cmdline_parse_t parse_item, void *data, ProcCmdlineFlags flags) {
+         int r;
+ 
+diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
+index c98cd35d542..cd0bc4fd13f 100644
+--- a/src/basic/socket-util.c
++++ b/src/basic/socket-util.c
+@@ -1849,7 +1849,7 @@ int vsock_parse_cid(const char *s, unsigned *ret) {
+ int socket_address_parse_vsock(SocketAddress *ret_address, const char *s) {
+         /* AF_VSOCK socket in vsock:cid:port notation */
+         _cleanup_free_ char *n = NULL;
+-        char *e, *cid_start;
++        const char *e, *cid_start;
+         unsigned port, cid;
+         int type, r;
+ 
+diff --git a/src/basic/sort-util.c b/src/basic/sort-util.c
+index 1adbba8fcf4..d848745677d 100644
+--- a/src/basic/sort-util.c
++++ b/src/basic/sort-util.c
+@@ -30,7 +30,7 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
+         return NULL;
+ }
+ 
+-void* bsearch_safe(const void *key, const void *base, size_t nmemb, size_t size, comparison_fn_t compar) {
++void* bsearch_safe_internal(const void *key, const void *base, size_t nmemb, size_t size, comparison_fn_t compar) {
+         /**
+         * Normal bsearch requires base to be nonnull. Here were require
+         * that only if nmemb > 0.
+@@ -40,7 +40,7 @@ void* bsearch_safe(const void *key, const void *base, size_t nmemb, size_t size,
+                 return NULL;
+ 
+         assert(base);
+-        return bsearch(key, base, nmemb, size, compar);
++        return (void*) bsearch(key, base, nmemb, size, compar);
+ }
+ 
+ void qsort_safe(void *base, size_t nmemb, size_t size, comparison_fn_t compar) {
+diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h
+index 2b558d6fd84..8e7a1991bb6 100644
+--- a/src/basic/sort-util.h
++++ b/src/basic/sort-util.h
+@@ -13,7 +13,9 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
+                 (typeof((b)[0])*) xbsearch_r((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_userdata_fn_t) _func_, userdata); \
+         })
+ 
+-void* bsearch_safe(const void *key, const void *base, size_t nmemb, size_t size, comparison_fn_t compar);
++void* bsearch_safe_internal(const void *key, const void *base, size_t nmemb, size_t size, comparison_fn_t compar);
++#define bsearch_safe(key, base, nmemb, size, compar) \
++        const_generic((base), bsearch_safe_internal(key, base, nmemb, size, compar))
+ 
+ #define typesafe_bsearch(k, b, n, func)                                 \
+         ({                                                              \
+diff --git a/src/basic/string-util.c b/src/basic/string-util.c
+index 0fe72342c7f..6e7da6f0bd6 100644
+--- a/src/basic/string-util.c
++++ b/src/basic/string-util.c
+@@ -1348,16 +1348,14 @@ char* strdupcspn(const char *a, const char *reject) {
+         return strndup(a, strcspn(a, reject));
+ }
+ 
+-char* find_line_startswith(const char *haystack, const char *needle) {
+-        char *p;
+-
++char* find_line_startswith_internal(const char *haystack, const char *needle) {
+         assert(haystack);
+         assert(needle);
+ 
+         /* Finds the first line in 'haystack' that starts with the specified string. Returns a pointer to the
+          * first character after it */
+ 
+-        p = strstr(haystack, needle);
++        char *p = (char*) strstr(haystack, needle);
+         if (!p)
+                 return NULL;
+ 
+@@ -1371,16 +1369,14 @@ char* find_line_startswith(const char *haystack, const char *needle) {
+         return p + strlen(needle);
+ }
+ 
+-char* find_line(const char *haystack, const char *needle) {
+-        char *p;
+-
++char* find_line_internal(const char *haystack, const char *needle) {
+         assert(haystack);
+         assert(needle);
+ 
+         /* Finds the first line in 'haystack' that match the specified string. Returns a pointer to the
+          * beginning of the line */
+ 
+-        p = find_line_startswith(haystack, needle);
++        char *p = (char*) find_line_startswith(haystack, needle);
+         if (!p)
+                 return NULL;
+ 
+@@ -1390,16 +1386,14 @@ char* find_line(const char *haystack, const char *needle) {
+         return NULL;
+ }
+ 
+-char* find_line_after(const char *haystack, const char *needle) {
+-        char *p;
+-
++char* find_line_after_internal(const char *haystack, const char *needle) {
+         assert(haystack);
+         assert(needle);
+ 
+         /* Finds the first line in 'haystack' that match the specified string. Returns a pointer to the
+          * next line after it */
+ 
+-        p = find_line_startswith(haystack, needle);
++        char *p = (char*) find_line_startswith(haystack, needle);
+         if (!p)
+                 return NULL;
+ 
+@@ -1499,7 +1493,7 @@ ssize_t strlevenshtein(const char *x, const char *y) {
+         return t1[yl];
+ }
+ 
+-char* strrstr(const char *haystack, const char *needle) {
++char* strrstr_internal(const char *haystack, const char *needle) {
+         /* Like strstr() but returns the last rather than the first occurrence of "needle" in "haystack". */
+ 
+         if (!haystack || !needle)
+@@ -1508,7 +1502,7 @@ char* strrstr(const char *haystack, const char *needle) {
+         /* Special case: for the empty string we return the very last possible occurrence, i.e. *after* the
+          * last char, not before. */
+         if (*needle == 0)
+-                return strchr(haystack, 0);
++                return (char*) strchr(haystack, 0);
+ 
+         for (const char *p = strstr(haystack, needle), *q; p; p = q) {
+                 q = strstr(p + 1, needle);
+diff --git a/src/basic/string-util.h b/src/basic/string-util.h
+index c90134e5cd7..0143c37a656 100644
+--- a/src/basic/string-util.h
++++ b/src/basic/string-util.h
+@@ -7,24 +7,28 @@
+ #include "basic-forward.h"
+ #include "string-util-fundamental.h" /* IWYU pragma: export */
+ 
+-static inline char* strstr_ptr(const char *haystack, const char *needle) {
++static inline char* strstr_ptr_internal(const char *haystack, const char *needle) {
+         if (!haystack || !needle)
+                 return NULL;
+-        return strstr(haystack, needle);
++        return (char*) strstr(haystack, needle);
+ }
+ 
+-static inline char* strstrafter(const char *haystack, const char *needle) {
+-        char *p;
++#define strstr_ptr(haystack, needle) \
++        const_generic(haystack, strstr_ptr_internal(haystack, needle))
+ 
++static inline char* strstrafter_internal(const char *haystack, const char *needle) {
+         /* Returns NULL if not found, or pointer to first character after needle if found */
+ 
+-        p = strstr_ptr(haystack, needle);
++        char *p = (char*) strstr_ptr(haystack, needle);
+         if (!p)
+                 return NULL;
+ 
+         return p + strlen(needle);
+ }
+ 
++#define strstrafter(haystack, needle) \
++        const_generic(haystack, strstrafter_internal(haystack, needle))
++
+ static inline const char* strnull(const char *s) {
+         return s ?: "(null)";
+ }
+@@ -287,15 +291,25 @@ char* strdupcspn(const char *a, const char *reject);
+                 (char*) memdupa_suffix0(_t, strnlen(_t, n));            \
+         })
+ 
+-char* find_line_startswith(const char *haystack, const char *needle);
+-char* find_line(const char *haystack, const char *needle);
+-char* find_line_after(const char *haystack, const char *needle);
++char* find_line_startswith_internal(const char *haystack, const char *needle);
++#define find_line_startswith(haystack, needle) \
++        const_generic(haystack, find_line_startswith_internal(haystack, needle))
++
++char* find_line_internal(const char *haystack, const char *needle);
++#define find_line(haystack, needle) \
++        const_generic(haystack, find_line_internal(haystack, needle))
++
++char* find_line_after_internal(const char *haystack, const char *needle);
++#define find_line_after(haystack, needle) \
++        const_generic(haystack, find_line_after_internal(haystack, needle))
+ 
+ bool version_is_valid(const char *s) _pure_;
+ bool version_is_valid_versionspec(const char *s) _pure_;
+ 
+ ssize_t strlevenshtein(const char *x, const char *y);
+ 
+-char* strrstr(const char *haystack, const char *needle) _pure_;
++char* strrstr_internal(const char *haystack, const char *needle) _pure_;
++#define strrstr(haystack, needle) \
++        const_generic(haystack, strrstr_internal(haystack, needle))
+ 
+ size_t str_common_prefix(const char *a, const char *b) _pure_;
+diff --git a/src/basic/strv.c b/src/basic/strv.c
+index a19e05edc3d..5e0fabc3c5e 100644
+--- a/src/basic/strv.c
++++ b/src/basic/strv.c
+@@ -933,9 +933,9 @@ int strv_extend_joined_with_size_sentinel(char ***l, size_t *n, ...) {
+         return strv_consume_with_size(l, n, x);
+ }
+ 
+-char* startswith_strv(const char *s, char * const *l) {
++char* startswith_strv_internal(const char *s, char * const *l) {
+         STRV_FOREACH(i, l) {
+-                char *found = startswith(s, *i);
++                char *found = (char*) startswith(s, *i);
+                 if (found)
+                         return found;
+         }
+@@ -943,9 +943,9 @@ char* startswith_strv(const char *s, char * const *l) {
+         return NULL;
+ }
+ 
+-char* endswith_strv(const char *s, char * const *l) {
++char* endswith_strv_internal(const char *s, char * const *l) {
+         STRV_FOREACH(i, l) {
+-                char *found = endswith(s, *i);
++                char *found = (char*) endswith(s, *i);
+                 if (found)
+                         return found;
+         }
+diff --git a/src/basic/strv.h b/src/basic/strv.h
+index 7b0923a6983..4f7d5a82a4d 100644
+--- a/src/basic/strv.h
++++ b/src/basic/strv.h
+@@ -155,12 +155,14 @@ static inline void strv_print(char * const *l) {
+         strv_print_full(l, NULL);
+ }
+ 
+-char* startswith_strv(const char *s, char * const *l);
++char* startswith_strv_internal(const char *s, char * const *l);
++#define startswith_strv(s, l) const_generic(s, startswith_strv_internal(s, l))
+ 
+ #define STARTSWITH_SET(p, ...)                                  \
+         startswith_strv(p, STRV_MAKE(__VA_ARGS__))
+ 
+-char* endswith_strv(const char *s, char * const *l);
++char* endswith_strv_internal(const char *s, char * const *l);
++#define endswith_strv(s, l) const_generic(s, endswith_strv_internal(s, l))
+ 
+ #define ENDSWITH_SET(p, ...)                                    \
+         endswith_strv(p, STRV_MAKE(__VA_ARGS__))
+diff --git a/src/basic/time-util.c b/src/basic/time-util.c
+index 62f1fcaed83..a596afa84d1 100644
+--- a/src/basic/time-util.c
++++ b/src/basic/time-util.c
+@@ -1156,9 +1156,7 @@ static const char* extract_multiplier(const char *p, usec_t *ret) {
+         assert(ret);
+ 
+         FOREACH_ELEMENT(i, table) {
+-                char *e;
+-
+-                e = startswith(p, i->suffix);
++                const char *e = startswith(p, i->suffix);
+                 if (e) {
+                         *ret = i->usec;
+                         return e;
+@@ -1334,9 +1332,7 @@ static const char* extract_nsec_multiplier(const char *p, nsec_t *ret) {
+         assert(ret);
+ 
+         FOREACH_ELEMENT(i, table) {
+-                char *e;
+-
+-                e = startswith(p, i->suffix);
++                const char *e = startswith(p, i->suffix);
+                 if (e) {
+                         *ret = i->nsec;
+                         return e;
+diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c
+index 6a42ece0b3e..43b3f683122 100644
+--- a/src/basic/unit-name.c
++++ b/src/basic/unit-name.c
+@@ -213,7 +213,7 @@ UnitType unit_name_to_type(const char *n) {
+ int unit_name_change_suffix(const char *n, const char *suffix, char **ret) {
+         _cleanup_free_ char *s = NULL;
+         size_t a, b;
+-        char *e;
++        const char *e;
+ 
+         assert(n);
+         assert(suffix);
+@@ -521,7 +521,7 @@ int unit_name_template(const char *f, char **ret) {
+ }
+ 
+ bool unit_name_is_hashed(const char *name) {
+-        char *s;
++        const char *s;
+ 
+         if (!unit_name_is_valid(name, UNIT_NAME_PLAIN))
+                 return false;
+@@ -544,7 +544,7 @@ bool unit_name_is_hashed(const char *name) {
+ 
+ int unit_name_hash_long(const char *name, char **ret) {
+         _cleanup_free_ char *n = NULL, *hash = NULL;
+-        char *suffix;
++        const char *suffix;
+         le64_t h;
+         size_t len;
+ 
+@@ -834,7 +834,7 @@ int slice_build_subslice(const char *slice, const char *name, char **ret) {
+         if (streq(slice, SPECIAL_ROOT_SLICE))
+                 subslice = strjoin(name, ".slice");
+         else {
+-                char *e;
++                const char *e;
+ 
+                 assert_se(e = endswith(slice, ".slice"));
+ 
+diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
+index d4b72dcf31e..e7d71779226 100644
+--- a/src/cryptsetup/cryptsetup-generator.c
++++ b/src/cryptsetup/cryptsetup-generator.c
+@@ -798,10 +798,9 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
+ static int add_crypttab_device(const char *name, const char *device, const char *keyspec, const char *options) {
+         _cleanup_free_ char *keyfile = NULL, *keydev = NULL, *headerdev = NULL, *filtered_header = NULL;
+         crypto_device *d = NULL;
+-        char *uuid;
+         int r;
+ 
+-        uuid = startswith(device, "UUID=");
++        const char *uuid = startswith(device, "UUID=");
+         if (!uuid)
+                 uuid = path_startswith(device, "/dev/disk/by-uuid/");
+         if (!uuid)
+diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h
+index 8fc23c5e6a1..92b6de6cdce 100644
+--- a/src/fundamental/macro-fundamental.h
++++ b/src/fundamental/macro-fundamental.h
+@@ -483,3 +483,10 @@ assert_cc(STRLEN(__FILE__) > STRLEN(RELATIVE_SOURCE_PATH) + 1);
+ #else
+ #  define ENUM_TYPE_S64(id) id
+ #endif
++
++/* This macro is used to have a const-returning and non-const returning version of a function based on
++ * whether its first argument is const or not (e.g. strstr()). */
++#define const_generic(ptr, call)                              \
++        _Generic(0 ? (ptr) : (void*) 1,                       \
++                 const void*: (const typeof(*call)*) (call),  \
++                 void*: (call))
+diff --git a/src/fundamental/string-util-fundamental.c b/src/fundamental/string-util-fundamental.c
+index 0141b42e397..6877dd439a4 100644
+--- a/src/fundamental/string-util-fundamental.c
++++ b/src/fundamental/string-util-fundamental.c
+@@ -3,7 +3,7 @@
+ #include "macro-fundamental.h"
+ #include "string-util-fundamental.h"
+ 
+-sd_char *startswith(const sd_char *s, const sd_char *prefix) {
++sd_char *startswith_internal(const sd_char *s, const sd_char *prefix) {
+         size_t l;
+ 
+         assert(s);
+@@ -16,7 +16,7 @@ sd_char *startswith(const sd_char *s, const sd_char *prefix) {
+         return (sd_char*) s + l;
+ }
+ 
+-sd_char *startswith_no_case(const sd_char *s, const sd_char *prefix) {
++sd_char *startswith_no_case_internal(const sd_char *s, const sd_char *prefix) {
+         size_t l;
+ 
+         assert(s);
+@@ -29,7 +29,7 @@ sd_char *startswith_no_case(const sd_char *s, const sd_char *prefix) {
+         return (sd_char*) s + l;
+ }
+ 
+-sd_char* endswith(const sd_char *s, const sd_char *suffix) {
++sd_char* endswith_internal(const sd_char *s, const sd_char *suffix) {
+         size_t sl, pl;
+ 
+         assert(s);
+@@ -50,7 +50,7 @@ sd_char* endswith(const sd_char *s, const sd_char *suffix) {
+         return (sd_char*) s + sl - pl;
+ }
+ 
+-sd_char* endswith_no_case(const sd_char *s, const sd_char *suffix) {
++sd_char* endswith_no_case_internal(const sd_char *s, const sd_char *suffix) {
+         size_t sl, pl;
+ 
+         assert(s);
+diff --git a/src/fundamental/string-util-fundamental.h b/src/fundamental/string-util-fundamental.h
+index 2aa8d43bf93..e2eb73a4a9d 100644
+--- a/src/fundamental/string-util-fundamental.h
++++ b/src/fundamental/string-util-fundamental.h
+@@ -88,10 +88,17 @@ static inline size_t strlen_ptr(const sd_char *s) {
+         return strlen(s);
+ }
+ 
+-sd_char *startswith(const sd_char *s, const sd_char *prefix) _pure_;
+-sd_char *startswith_no_case(const sd_char *s, const sd_char *prefix) _pure_;
+-sd_char *endswith(const sd_char *s, const sd_char *suffix) _pure_;
+-sd_char *endswith_no_case(const sd_char *s, const sd_char *suffix) _pure_;
++sd_char *startswith_internal(const sd_char *s, const sd_char *prefix) _pure_;
++#define startswith(s, prefix) const_generic(s, startswith_internal(s, prefix))
++
++sd_char *startswith_no_case_internal(const sd_char *s, const sd_char *prefix) _pure_;
++#define startswith_no_case(s, prefix) const_generic(s, startswith_no_case_internal(s, prefix))
++
++sd_char *endswith_internal(const sd_char *s, const sd_char *suffix) _pure_;
++#define endswith(s, suffix) const_generic(s, endswith_internal(s, suffix))
++
++sd_char *endswith_no_case_internal(const sd_char *s, const sd_char *suffix) _pure_;
++#define endswith_no_case(s, suffix) const_generic(s, endswith_no_case_internal(s, suffix))
+ 
+ static inline bool isempty(const sd_char *a) {
+         return !a || a[0] == '\0';
+diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
+index a2ac04f2774..3185cd6feca 100644
+--- a/src/home/homed-manager.c
++++ b/src/home/homed-manager.c
+@@ -861,7 +861,7 @@ static int manager_assess_image(
+                 const char *dir_path,
+                 const char *dentry_name) {
+ 
+-        char *luks_suffix, *directory_suffix;
++        const char *luks_suffix, *directory_suffix;
+         _cleanup_free_ char *path = NULL;
+         struct stat st;
+         int r;
+diff --git a/src/journal/journalctl-util.c b/src/journal/journalctl-util.c
+index 586f702bb4d..aedb2da20dc 100644
+--- a/src/journal/journalctl-util.c
++++ b/src/journal/journalctl-util.c
+@@ -151,9 +151,8 @@ int get_possible_units(
+ 
+                 SD_JOURNAL_FOREACH_UNIQUE(j, data, size) {
+                         _cleanup_free_ char *u = NULL;
+-                        char *eq;
+ 
+-                        eq = memchr(data, '=', size);
++                        const char *eq = memchr(data, '=', size);
+                         if (eq) {
+                                 size -= eq - (char*) data + 1;
+                                 data = ++eq;
+diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
+index 5644263fb55..050cfac55ea 100644
+--- a/src/libsystemd/sd-bus/sd-bus.c
++++ b/src/libsystemd/sd-bus/sd-bus.c
+@@ -1438,7 +1438,7 @@ _public_ int sd_bus_open_user(sd_bus **ret) {
+ 
+ int bus_set_address_system_remote(sd_bus *b, const char *host) {
+         _cleanup_free_ char *e = NULL;
+-        char *m = NULL, *c = NULL, *a, *rbracket = NULL, *p = NULL;
++        const char *m = NULL, *c = NULL, *a, *rbracket = NULL, *p = NULL;
+ 
+         assert(b);
+         assert(host);
+@@ -1476,7 +1476,7 @@ int bus_set_address_system_remote(sd_bus *b, const char *host) {
+         /* Let's see if a port was given */
+         m = strchr(rbracket ? rbracket + 1 : host, ':');
+         if (m) {
+-                char *t;
++                const char *t;
+                 bool got_forward_slash = false;
+ 
+                 p = m + 1;
+@@ -1522,14 +1522,15 @@ interpret_port_as_machine_old_syntax:
+         if (!ssh_escaped)
+                 return -ENOMEM;
+ 
+-        a = strjoin("unixexec:path=", ssh_escaped, ",argv1=-xT",
+-                    p ? ",argv2=-p,argv3=" : "", strempty(p),
+-                    ",argv", p ? "4" : "2", "=--,argv", p ? "5" : "3", "=", e,
+-                    ",argv", p ? "6" : "4", "=systemd-stdio-bridge", c);
+-        if (!a)
++        char *address = strjoin(
++                        "unixexec:path=", ssh_escaped, ",argv1=-xT",
++                        p ? ",argv2=-p,argv3=" : "", strempty(p),
++                        ",argv", p ? "4" : "2", "=--,argv", p ? "5" : "3", "=", e,
++                        ",argv", p ? "6" : "4", "=systemd-stdio-bridge", c);
++        if (!address)
+                 return -ENOMEM;
+ 
+-        return free_and_replace(b->address, a);
++        return free_and_replace(b->address, address);
+ }
+ 
+ _public_ int sd_bus_open_system_remote(sd_bus **ret, const char *host) {
+diff --git a/src/libsystemd/sd-hwdb/sd-hwdb.c b/src/libsystemd/sd-hwdb/sd-hwdb.c
+index bc96e409074..1197c4f954c 100644
+--- a/src/libsystemd/sd-hwdb/sd-hwdb.c
++++ b/src/libsystemd/sd-hwdb/sd-hwdb.c
+@@ -95,7 +95,7 @@ static int trie_children_cmp_f(const void *v1, const void *v2) {
+ }
+ 
+ static const struct trie_node_f *node_lookup_f(sd_hwdb *hwdb, const struct trie_node_f *node, uint8_t c) {
+-        struct trie_child_entry_f *child;
++        const struct trie_child_entry_f *child;
+         struct trie_child_entry_f search;
+ 
+         search.c = c;
+diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c
+index ec0445f1227..0751480fe5b 100644
+--- a/src/libsystemd/sd-journal/catalog.c
++++ b/src/libsystemd/sd-journal/catalog.c
+@@ -210,23 +210,21 @@ static int finish_item(
+ }
+ 
+ int catalog_file_lang(const char *filename, char **ret) {
+-        char *beg, *end, *lang;
+-
+         assert(filename);
+         assert(ret);
+ 
+-        end = endswith(filename, ".catalog");
++        const char *end = endswith(filename, ".catalog");
+         if (!end)
+                 return 0;
+ 
+-        beg = end - 1;
++        const char *beg = end - 1;
+         while (beg > filename && !IN_SET(*beg, '.', '/') && end - beg < 32)
+                 beg--;
+ 
+         if (*beg != '.' || end <= beg + 1)
+                 return 0;
+ 
+-        lang = strndup(beg + 1, end - beg - 1);
++        char *lang = strndup(beg + 1, end - beg - 1);
+         if (!lang)
+                 return -ENOMEM;
+ 
+@@ -553,7 +551,8 @@ static int open_mmap(const char *database, int *ret_fd, struct stat *ret_st, voi
+ }
+ 
+ static const char* find_id(const void *p, sd_id128_t id) {
+-        CatalogItem *f = NULL, key = { .id = id };
++        CatalogItem key = { .id = id };
++        const CatalogItem *f = NULL;
+         const CatalogHeader *h = ASSERT_PTR(p);
+         const char *loc;
+ 
+diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
+index 75ecfdca91a..7ab11332543 100644
+--- a/src/network/networkd-dhcp-server.c
++++ b/src/network/networkd-dhcp-server.c
+@@ -832,7 +832,6 @@ int config_parse_dhcp_server_relay_agent_suboption(
+                 void *userdata) {
+ 
+         char **suboption_value = data;
+-        char* p;
+ 
+         assert(filename);
+         assert(lvalue);
+@@ -843,7 +842,7 @@ int config_parse_dhcp_server_relay_agent_suboption(
+                 return 0;
+         }
+ 
+-        p = startswith(rvalue, "string:");
++        const char *p = startswith(rvalue, "string:");
+         if (!p) {
+                 log_syntax(unit, LOG_WARNING, filename, line, 0,
+                            "Failed to parse %s=%s'. Invalid format, ignoring.", lvalue, rvalue);
+diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
+index 3d49cf5415b..74f22297a23 100644
+--- a/src/shared/bus-unit-util.c
++++ b/src/shared/bus-unit-util.c
+@@ -1639,7 +1639,6 @@ static int bus_append_root_hash(sd_bus_message *m, const char *field, const char
+ }
+ 
+ static int bus_append_root_hash_signature(sd_bus_message *m, const char *field, const char *eq) {
+-        char *value;
+         _cleanup_free_ void *roothash_sig_decoded = NULL;
+         size_t roothash_sig_decoded_size = 0;
+         int r;
+@@ -1648,7 +1647,8 @@ static int bus_append_root_hash_signature(sd_bus_message *m, const char *field,
+         if (path_is_absolute(eq))
+                 return bus_append_string(m, "RootHashSignaturePath", eq);
+ 
+-        if (!(value = startswith(eq, "base64:")))
++        const char *value = startswith(eq, "base64:");
++        if (!value)
+                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                        "Failed to decode %s value '%s': neither a path nor starts with 'base64:'.",
+                                        field, eq);
+diff --git a/src/shared/pager.c b/src/shared/pager.c
+index 3797adbb7cc..2b66dc91d20 100644
+--- a/src/shared/pager.c
++++ b/src/shared/pager.c
+@@ -298,7 +298,7 @@ bool pager_have(void) {
+ 
+ int show_man_page(const char *desc, bool null_stdio) {
+         const char *args[4] = { "man", NULL, NULL, NULL };
+-        char *e = NULL;
++        const char *e = NULL;
+         pid_t pid;
+         size_t k;
+         int r;
+diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c
+index 0f4c692613c..c3eb9049e8d 100644
+--- a/src/shared/seccomp-util.c
++++ b/src/shared/seccomp-util.c
+@@ -2505,7 +2505,7 @@ uint32_t scmp_act_kill_process(void) {
+ 
+ int parse_syscall_and_errno(const char *in, char **name, int *error) {
+         _cleanup_free_ char *n = NULL;
+-        char *p;
++        const char *p;
+         int e = -1;
+ 
+         assert(in);
+diff --git a/src/shared/vpick.c b/src/shared/vpick.c
+index b1b2d930543..07d9d9ffd8c 100644
+--- a/src/shared/vpick.c
++++ b/src/shared/vpick.c
+@@ -343,7 +343,7 @@ static int make_choice(
+                 unsigned found_tries_done = UINT_MAX, found_tries_left = UINT_MAX;
+                 _cleanup_free_ char *dname = NULL;
+                 size_t found_architecture_index = SIZE_MAX;
+-                const char *e;
++                char *e;
+ 
+                 dname = strdup((*entry)->d_name);
+                 if (!dname)
+diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
+index 0724de8241a..339c73ed3a8 100644
+--- a/src/udev/udev-builtin-net_id.c
++++ b/src/udev/udev-builtin-net_id.c
+@@ -950,7 +950,7 @@ static int names_pci(UdevEvent *event, const char *prefix) {
+ }
+ 
+ static int get_usb_specifier(sd_device *dev, char **ret) {
+-        char *ports, *config, *interf, *s, *buf;
++        char *ports, *config, *interf, *buf;
+         const char *sysname;
+         int r;
+ 
+@@ -962,26 +962,26 @@ static int get_usb_specifier(sd_device *dev, char **ret) {
+                 return log_device_debug_errno(dev, r, "Failed to get sysname: %m");
+ 
+         /* get USB port number chain, configuration, interface */
+-        s = strchr(sysname, '-');
++        const char *s = strchr(sysname, '-');
+         if (!s)
+                 return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                               "sysname \"%s\" does not have '-' in the expected place.", sysname);
+ 
+         ports = strdupa_safe(s + 1);
+-        s = strchr(ports, ':');
++        char *t = strchr(ports, ':');
+         if (!s)
+                 return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                               "sysname \"%s\" does not have ':' in the expected place.", sysname);
+ 
+-        *s = '\0';
+-        config = s + 1;
++        *t = '\0';
++        config = t + 1;
+         s = strchr(config, '.');
+         if (!s)
+                 return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
+                                               "sysname \"%s\" does not have '.' in the expected place.", sysname);
+ 
+-        *s = '\0';
+-        interf = s + 1;
++        *t = '\0';
++        interf = t + 1;
+ 
+         /* prefix every port number in the chain with "u" */
+         string_replace_char(ports, '.', 'u');
+-- 
+2.47.3
+
diff --git a/src/patches/util-linux-2.41.2-FTBFS-bsearch.patch b/src/patches/util-linux-2.41.2-FTBFS-bsearch.patch
new file mode 100644
index 0000000000..979cbf16aa
--- /dev/null
+++ b/src/patches/util-linux-2.41.2-FTBFS-bsearch.patch
@@ -0,0 +1,40 @@
+From 711bda1441561bfd2eb6d45fe0bc789535c1f1a8 Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Cristian=20Rodr=C3=ADguez?= <cristian@rodriguez.im>
+Date: Sat, 22 Nov 2025 10:41:08 -0300
+Subject: [PATCH] lsfd: fix bsearch macro usage with glibc C23
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf8
+Content-Transfer-Encoding: 8bit
+
+C23 requires bsearch to be a const preserving macro, build now fails
+with
+
+../lsfd-cmd/lsfd.c:1879:75: error: macro ‘bsearch’ passed 6 arguments, but takes just 5
+ 1879 |                                     nfds, sizeof(struct pollfd), pollfdcmp))
+      |                                                                           ^
+In file included from ../include/c.h:17,
+                 from ../lsfd-cmd/lsfd.c:48:
+/usr/include/stdlib.h:987:10: note: macro ‘bsearch’ defined here
+  987 | # define bsearch(KEY, BASE, NMEMB, SIZE, COMPAR)                        \
+
+  add parenthesis around expression to fix it.
+---
+ lsfd-cmd/lsfd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lsfd-cmd/lsfd.c b/lsfd-cmd/lsfd.c
+index 335594144..4da86c602 100644
+--- a/lsfd-cmd/lsfd.c
++++ b/lsfd-cmd/lsfd.c
+@@ -1875,7 +1875,7 @@ static void mark_poll_fds_as_multiplexed(char *buf,
+ 		struct file *file = list_entry(f, struct file, files);
+ 		if (is_opened_file(file) && !file->multiplexed) {
+ 			int fd = file->association;
+-			if (bsearch(&(struct pollfd){.fd = fd,}, local.iov_base,
++			if (bsearch((&(struct pollfd){.fd = fd,}), local.iov_base,
+ 				    nfds, sizeof(struct pollfd), pollfdcmp))
+ 				file->multiplexed = 1;
+ 		}
+-- 
+2.47.3
+


hooks/post-receive
--
IPFire 2.x development tree


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-01-28 11:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-01-28 11:37 [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 17f2e792aa0aa2271d121cd4590c042805862dcf Michael Tremer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox