--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected]
Control: affects -1 + src:glibc
User: [email protected]
Usertags: pu
[ Reason ]
The upstream stable branch received fixes since the latest trixie point
release, and this update pulls them into the debian package.
This includes most notably 3 security fixes and test suite fixes to
ensure it runs correctly on recent kernels.
[ Impact ]
In case the update isn't approved, systems will be left with a few
issues, including 3 security ones, and the differences with upstream
will increase.
[ Tests ]
Most of the changes come with additional upstream tests, and one
additional test has been enabled.
I also did manual test upgrading glibc with this version on an arm64 and
on a amd64 host. They rebooted fine and are still running fine.
[ Risks ]
I believe the risks are low, as the changes do not touch the core part
of the library. All the changes are in testing for more than 3 weeks,
with the exception of the fix for CVE-2026-4046 and two testsuite fixes
which entered testing only a couple of days ago.
[ Checklist ]
[x] *all* changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in (old)stable
[x] the issue is verified as fixed in unstable
[ Changes ]
The changes are summarized in the changelog, let me give you a few extra
details for some of them:
* debian/control.in/libc: ensure that libdpkg-perl is fixed wrt symbol
versions used as ABI flag.
* Stop reverting the following patches now that dpkg-shlibdeps in trixie
supports symbol versions used as ABI flag (see #1122107):
- local-revert-x86-64-add-GLIBC_ABI_DT_X86_64_PLT-version.diff
- local-revert-x86-64-add-GLIBC_ABI_GNU2_TLS-version.diff
- local-revert-i386-add-GLIBC_ABI_GNU2_TLS-version.diff
- local-revert-i386-add-GLIBC_ABI_GNU_TLS-version.diff
* debian/symbols.wildcards: define the GLIBC_ABI_DT_X86_64_PLT,
GLIBC_ABI_GNU_TLS and GLIBC_ABI_GNU2_TLS symbol versions.
Now that dpkg bug #1122107 is fixed, it is able to correctly handle ABI
flags, so we do not need to revert the corresponding upstream commits
anymore. This means adding the ABI flags to the symbols file. In theory
they should not be used, as the binutils version in trixie doesn't emit
them, but the change could get backported at some point (for instance
the change has been backported in the binutils upstream 2.45 branch) or
a binutils backport could be done. In addition this improves binary
compatibility with other distributions and could possibly simplify the
upgrade from trixie to forky as we can then lower the version in the
forky's symbols file (that will really depend on the state of forky near
to the release).
* debian/patches/git-updates.diff: update from upstream stable branch:
- Fix a null pointer dereference in the nss_database_check_reload_and_get
function.
This is https://sourceware.org/bugzilla/show_bug.cgi?id=28940 upstream
- Fix tst-preadvwritev2 and tst-preadvwritev64v2 with recent kernels.
- Fix tst-rseq with Linux 7.0.
These tests fail on recent kernels due to change in expectation, fixing
them is important if at some point we want to use a backports kernel on
the build daemons (or once forky is released)
- Fix a typo preventing new tst-wordexp-reuse-mem to run
There was a typo in the makefile, causing the test to be ignored. This
just fixes that.
- Fix random failure of tst-link-map-contiguous-ldso.
This test failure appears randomly, but has significantly more chances
to happen on a 16KiB page size kernel. This is the case for instance on
the 16k kernel we ship on arm64.
[ Other info ]
There are still a few pending CVEs to be fixed, but no visibility when
they'll be fixed, and I believe that it's better to have an upload not
too late before the point release.
diff --git a/debian/changelog b/debian/changelog
index 71fc4528..c5f3bdc6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,33 @@
+glibc (2.41-12+deb13u3) trixie; urgency=medium
+
+ * debian/control.in/libc: ensure that libdpkg-perl is fixed wrt symbol
+ versions used as ABI flag.
+ * Stop reverting the following patches now that dpkg-shlibdeps in trixie
+ supports symbol versions used as ABI flag (see #1122107):
+ - local-revert-x86-64-add-GLIBC_ABI_DT_X86_64_PLT-version.diff
+ - local-revert-x86-64-add-GLIBC_ABI_GNU2_TLS-version.diff
+ - local-revert-i386-add-GLIBC_ABI_GNU2_TLS-version.diff
+ - local-revert-i386-add-GLIBC_ABI_GNU_TLS-version.diff
+ * debian/symbols.wildcards: define the GLIBC_ABI_DT_X86_64_PLT,
+ GLIBC_ABI_GNU_TLS and GLIBC_ABI_GNU2_TLS symbol versions.
+ * debian/patches/git-updates.diff: update from upstream stable branch:
+ - Fix a null pointer dereference in the nss_database_check_reload_and_get
+ function.
+ - Fix tst-preadvwritev2 and tst-preadvwritev64v2 with recent kernels.
+ - Fix invalid pointer arithmetic in ANSI_X3.110 iconv module
+ - Fix a typo preventing new tst-wordexp-reuse-mem to run
+ - Fix incorrect handling of DNS responses in gethostbyaddr and
+ gethostbyaddr_r (CVE-2026-4437). Closes: #1131435.
+ - Fix invalid DNS hostnames returned by gethostbyaddr and
+ gethostbyaddr_r (CVE-2026-4438). Closes: #1131887.
+ - Fix random failure of tst-link-map-contiguous-ldso.
+ - Fix tst-rseq with Linux 7.0.
+ - Fix a possible crash due to an assertion failure when converting
+ inputs from the IBM139x character sets (CVE-2026-4046). Closes:
+ #1132499.
+
+ -- Aurelien Jarno <[email protected]> Mon, 27 Apr 2026 22:09:22 +0200
+
glibc (2.41-12+deb13u2) trixie; urgency=medium
* debian/patches/git-updates.diff: update from upstream stable branch:
diff --git a/debian/control b/debian/control
index 1e20f798..3e662d97 100644
--- a/debian/control
+++ b/debian/control
@@ -195,7 +195,7 @@ Depends: libc6 (= ${binary:Version}) <!stage1>,
libc-dev-bin (= ${binary:Version
Replaces: hurd-dev (<< 20120408-3) [hurd-any], libc6 (<= 2.32-1)
Suggests: glibc-doc, manpages-dev
Provides: libc-dev (= ${binary:Version}), libc6-dev [alpha hurd-any]
-Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38)
+Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38), libdpkg-perl (<<
1.22.22) [amd64 i386 x32]
Conflicts: libc6.1-dev, libc0.3-dev,
Description: GNU C Library: Development Libraries and Header Files
Contains the symlinks, headers, and object files needed to compile
@@ -267,7 +267,7 @@ Depends: libc6.1 (= ${binary:Version}) <!stage1>,
libc-dev-bin (= ${binary:Versi
Replaces: hurd-dev (<< 20120408-3) [hurd-any], libc6.1 (<= 2.32-1)
Suggests: glibc-doc, manpages-dev
Provides: libc-dev (= ${binary:Version}), libc6-dev [alpha hurd-any]
-Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38)
+Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38), libdpkg-perl (<<
1.22.22) [amd64 i386 x32]
Conflicts: libc6-dev, libc0.3-dev,
Description: GNU C Library: Development Libraries and Header Files
Contains the symlinks, headers, and object files needed to compile
@@ -339,7 +339,7 @@ Depends: libc0.3 (= ${binary:Version}) <!stage1>,
libc-dev-bin (= ${binary:Versi
Replaces: hurd-dev (<< 20120408-3) [hurd-any], libc0.3 (<= 2.32-1)
Suggests: glibc-doc, manpages-dev
Provides: libc-dev (= ${binary:Version}), libc6-dev [alpha hurd-any]
-Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38)
+Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38), libdpkg-perl (<<
1.22.22) [amd64 i386 x32]
Conflicts: libc6-dev, libc6.1-dev,
Description: GNU C Library: Development Libraries and Header Files
Contains the symlinks, headers, and object files needed to compile
diff --git a/debian/control.in/libc b/debian/control.in/libc
index 7f6b3668..6d7e14ce 100644
--- a/debian/control.in/libc
+++ b/debian/control.in/libc
@@ -37,7 +37,7 @@ Depends: @libc@ (= ${binary:Version}) <!stage1>, libc-dev-bin
(= ${binary:Versio
Replaces: hurd-dev (<< 20120408-3) [hurd-any], @libc@ (<= 2.32-1)
Suggests: glibc-doc, manpages-dev
Provides: libc-dev (= ${binary:Version}), libc6-dev [alpha hurd-any]
-Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38)
+Breaks: check (<< 0.15.2-2+b1) [s390x], ${libc-dev:Breaks}, libassimp-dev (<=
5.2.4~ds0-1), libbson-dev (<= 1.22.0-1), libdeal.ii-dev (<= 9.4.0-1),
libdolfin-dev-common (<= 2019.2.0~git20220407.d29e24d-5), libeckit-dev (<=
1.20.0-1), libfclib-dev (<= 3.1.0+dfsg-2), libfltk1.3-dev (<= 1.3.8-4+b1),
libinsighttoolkit4-dev (<= 4.13.3withdata-dfsg2-3+b1), libinsighttoolkit5-dev
(<= 5.2.1-5+b1), libismrmrd-dev (<= 1.8.0-2), liblog4cplus-dev (<= 2.0.7-1),
libmgl-dev (<= 8.0.1-2), libmimalloc2.0 (<= 2.0.6+ds-1), libminc-dev (<=
2.4.03-5), libmrpt-ros1bridge-dev (<= 1:2.4.9+ds-4+b2), libnetcdf-dev (<=
1:4.9.0-3), libnetcdf-mpi-dev (<= 1:4.9.0-1), libnetcdf-pnetcdf-dev (<=
1:4.9.0-1), libns3-dev (<= 3.36.1+dfsg-4), libopenms-dev (<=
2.6.0+cleaned1-3+b1), libtrilinos-amesos2-dev (<= 13.2.0-3),
libtrilinos-amesos-dev (<= 13.2.0-3), libtrilinos-anasazi-dev (<= 13.2.0-3),
libtrilinos-aztecoo-dev (<= 13.2.0-3), libtrilinos-belos-dev (<= 13.2.0-3),
libtrilinos-epetra-dev (<= 13.2.0-3), libtrilinos-epetraext-dev (<= 13.2.0-3),
libtrilinos-galeri-dev (<= 13.2.0-3), libtrilinos-ifpack2-dev (<= 13.2.0-3),
libtrilinos-ifpack-dev (<= 13.2.0-3), libtrilinos-intrepid2-dev (<= 13.2.0-3),
libtrilinos-intrepid-dev (<= 13.2.0-3), libtrilinos-isorropia-dev (<=
13.2.0-3), libtrilinos-kokkos-dev (<= 13.2.0-3), libtrilinos-kokkos-kernels-dev
(<= 13.2.0-3), libtrilinos-komplex-dev (<= 13.2.0-3), libtrilinos-ml-dev (<=
13.2.0-3), libtrilinos-moertel-dev (<= 13.2.0-3), libtrilinos-muelu-dev (<=
13.2.0-3), libtrilinos-nox-dev (<= 13.2.0-3), libtrilinos-phalanx-dev (<=
13.2.0-3), libtrilinos-pike-dev (<= 13.2.0-3), libtrilinos-piro-dev (<=
13.2.0-3), libtrilinos-pliris-dev (<= 13.2.0-3), libtrilinos-rol-dev (<=
13.2.0-3), libtrilinos-rtop-dev (<= 13.2.0-3), libtrilinos-rythmos-dev (<=
13.2.0-3), libtrilinos-sacado-dev (<= 13.2.0-3), libtrilinos-shylu-dev (<=
13.2.0-3), libtrilinos-stokhos-dev (<= 13.2.0-3), libtrilinos-stratimikos-dev
(<= 13.2.0-3), libtrilinos-teko-dev (<= 13.2.0-3), libtrilinos-teuchos-dev (<=
13.2.0-3), libtrilinos-thyra-dev (<= 13.2.0-3), libtrilinos-tpetra-dev (<=
13.2.0-3), libtrilinos-trilinoscouplings-dev (<= 13.2.0-3),
libtrilinos-triutils-dev (<= 13.2.0-3), libtrilinos-xpetra-dev (<= 13.2.0-3),
libtrilinos-zoltan2-dev (<= 13.2.0-3), libvisp-dev (<= 3.5.0-2+b1),
libvotca-dev (<= 2022-3), libvtk6-dev (<= 6.3.0+dfsg2-8.1+b1), libvtk7-dev (<=
7.1.1+dfsg2-10.2), igblast (<= 1.19.0-1), libasyncns-dev (<= 0.8-6+b2),
libatm1-dev (<= 1:2.5.1-4), libaws20-dev (<= 20.2-2+b1), libboinc-app-dev (<=
7.20.2+dfsg-1), libcups2-dev (<= 2.4.2-1), libdkim-dev (<= 1:1.0.21-4+b2),
libghc-resolv-dev (<= 0.1.2.0-3), libghc-resolv-prof (<= 0.1.2.0-3),
libglib2.0-dev (<= 2.72.3-1), libgloox-dev (<= 1.0.24-2+b1), libhesiod-dev (<=
3.2.1-3.1+b1), libinfinity-0.7-dev (<= 0.7.2-1+b1), libldap-dev (<=
2.5.12+dfsg-2), libloudmouth1-dev (<= 1.5.4-1), libmongoc-dev (<= 1.22.1-1),
libmysqlclient-dev (<= 8.0.29-1), libnfsidmap-dev (<= 1:2.6.1-2), libola-dev
(<= 0.10.8.nojsmin-2), libopenafs-dev (<= 1.8.8.1-3), libopendkim-dev (<=
2.11.0~beta2-7), libopendmarc-dev (<= 1.4.2-1), libopenzwave1.6-dev (<=
1.6.1914+ds-1), libpg-query-dev (<= 13-2.1.2-2), librbl-dev (<=
2.11.0~beta2-7), libre-dev (<= 1.1.0-1+b1), libshishi-dev (<= 1.0.2-11),
libslurm-dev (<= 21.08.8.2-1), libsocksd0-dev (<= 1.4.2+dfsg-7+b4), libspf2-dev
(<= 1.2.10-7.1+b1), libstrophe-dev (<= 0.12.1-2), libtaningia-dev (<=
0.2.2-2+b1), libvbr-dev (<= 2.11.0~beta2-7), open-vm-tools-dev (<= 2:12.0.5-2),
pidgin-librvp (<= 0.9.7cvs-3), proftpd-dev (<= 1.3.7d+dfsg-2),
slurm-wlm-basic-plugins-dev (<= 21.08.8.2-1), catch (<< 1.12.2-0.1),
heimdal-multidev (<= 7.7.0+dfsg-4), binutils (<< 2.38), libdpkg-perl (<<
1.22.22) [amd64 i386 x32]
Conflicts: @libc-dev-conflict@
Description: GNU C Library: Development Libraries and Header Files
Contains the symlinks, headers, and object files needed to compile
diff --git
a/debian/patches/amd64/local-revert-x86-64-add-GLIBC_ABI_DT_X86_64_PLT-version.diff
b/debian/patches/amd64/local-revert-x86-64-add-GLIBC_ABI_DT_X86_64_PLT-version.diff
deleted file mode 100644
index 00ffe342..00000000
---
a/debian/patches/amd64/local-revert-x86-64-add-GLIBC_ABI_DT_X86_64_PLT-version.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/sysdeps/x86_64/Makefile
-+++ b/sysdeps/x86_64/Makefile
-@@ -209,15 +209,6 @@ LDFLAGS-tst-plt-rewritemod2.so = -Wl,-z,now,-z,undefs
- tst-plt-rewrite2-ENV = GLIBC_TUNABLES=glibc.cpu.plt_rewrite=2
- $(objpfx)tst-plt-rewrite2: $(objpfx)tst-plt-rewritemod2.so
-
--tests-special += $(objpfx)check-dt-x86-64-plt.out
--
--$(objpfx)check-dt-x86-64-plt.out: $(common-objpfx)libc.so
-- LC_ALL=C $(READELF) -V -W $< \
-- | sed -ne '/.gnu.version_d/, /.gnu.version_r/ p' \
-- | grep GLIBC_ABI_DT_X86_64_PLT > $@; \
-- $(evaluate-test)
--generated += check-dt-x86-64-plt.out
--
- tests-special += $(objpfx)check-gnu2-tls.out
-
- $(objpfx)check-gnu2-tls.out: $(common-objpfx)libc.so
---- a/sysdeps/x86_64/Versions
-+++ b/sysdeps/x86_64/Versions
-@@ -10,11 +10,6 @@ libc {
- # by scripts/versions.awk.
- __placeholder_only_for_empty_version_map;
- }
-- GLIBC_ABI_DT_X86_64_PLT {
-- # This symbol is used only for empty version map and will be removed
-- # by scripts/versions.awk.
-- __placeholder_only_for_empty_version_map;
-- }
- }
- libm {
- GLIBC_2.1 {
diff --git
a/debian/patches/amd64/local-revert-x86-64-add-GLIBC_ABI_GNU2_TLS-version.diff
b/debian/patches/amd64/local-revert-x86-64-add-GLIBC_ABI_GNU2_TLS-version.diff
deleted file mode 100644
index 83e8765b..00000000
---
a/debian/patches/amd64/local-revert-x86-64-add-GLIBC_ABI_GNU2_TLS-version.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/sysdeps/x86_64/Makefile
-+++ b/sysdeps/x86_64/Makefile
-@@ -208,15 +208,6 @@ LDFLAGS-tst-plt-rewrite2 = -Wl,-z,now
- LDFLAGS-tst-plt-rewritemod2.so = -Wl,-z,now,-z,undefs
- tst-plt-rewrite2-ENV = GLIBC_TUNABLES=glibc.cpu.plt_rewrite=2
- $(objpfx)tst-plt-rewrite2: $(objpfx)tst-plt-rewritemod2.so
--
--tests-special += $(objpfx)check-gnu2-tls.out
--
--$(objpfx)check-gnu2-tls.out: $(common-objpfx)libc.so
-- LC_ALL=C $(READELF) -V -W $< \
-- | sed -ne '/.gnu.version_d/, /.gnu.version_r/ p' \
-- | grep GLIBC_ABI_GNU2_TLS > $@; \
-- $(evaluate-test)
--generated += check-gnu2-tls.out
- endif
-
- test-internal-extras += tst-gnu2-tls2mod1
---- a/sysdeps/x86_64/Versions
-+++ b/sysdeps/x86_64/Versions
-@@ -5,11 +5,6 @@ libc {
- GLIBC_2.13 {
- __fentry__;
- }
-- GLIBC_ABI_GNU2_TLS {
-- # This symbol is used only for empty version map and will be removed
-- # by scripts/versions.awk.
-- __placeholder_only_for_empty_version_map;
-- }
- }
- libm {
- GLIBC_2.1 {
diff --git a/debian/patches/git-updates.diff b/debian/patches/git-updates.diff
index 5cbf8c6a..7141ec99 100644
--- a/debian/patches/git-updates.diff
+++ b/debian/patches/git-updates.diff
@@ -2900,10 +2900,10 @@ index 0000000000..9f03b0f7ca
+#include <tst-execstack.c>
diff --git a/elf/tst-link-map-contiguous-ldso.c
b/elf/tst-link-map-contiguous-ldso.c
new file mode 100644
-index 0000000000..04de808bb2
+index 0000000000..f0e26682f2
--- /dev/null
+++ b/elf/tst-link-map-contiguous-ldso.c
-@@ -0,0 +1,98 @@
+@@ -0,0 +1,158 @@
+/* Check that _dl_find_object behavior matches up with gaps.
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
@@ -2924,15 +2924,73 @@ index 0000000000..04de808bb2
+
+#include <dlfcn.h>
+#include <gnu/lib-names.h>
++#include <inttypes.h>
+#include <link.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <support/check.h>
++#include <support/support.h>
+#include <support/xdlfcn.h>
+#include <support/xunistd.h>
++#include <support/xstdio.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
++/* Slow path in case we cannot find a gap with mmap (when the runtime has
++ mapped all the pages in the gap for some reason). */
++static bool
++find_gap_with_proc_self_map (const struct link_map *l)
++{
++ int pagesize = getpagesize ();
++
++ support_need_proc ("Reads /proc/self/maps to find gap in ld.so mapping");
++
++ /* Parse /proc/self/maps and find all the mappings in the ld.so range
++ but not from ld.so. */
++ FILE *f = xfopen ("/proc/self/maps", "r");
++ char *line = NULL, *path_ldso = NULL;
++ size_t len;
++ bool found = false;
++ while (xgetline (&line, &len, f))
++ {
++ uintptr_t from, to;
++ char *path = NULL;
++ int r = sscanf (line, "%" SCNxPTR "-%" SCNxPTR "%*s%*s%*s%*s%ms",
++ &from, &to, &path);
++
++ TEST_VERIFY (r == 2 || r == 3);
++ TEST_COMPARE (from % pagesize, 0);
++ TEST_COMPARE (to % pagesize, 0);
++
++ if (path_ldso == NULL && l->l_map_start == from)
++ {
++ TEST_COMPARE (r, 3);
++ path_ldso = path;
++ continue;
++ }
++
++ if (from > l->l_map_start && to < l->l_map_end
++ && (r == 2 || (path_ldso != NULL && strcmp (path, path_ldso))))
++ {
++ if (r == 2)
++ printf ("info: anonymous mapping found at 0x%" PRIxPTR " - 0x%"
++ PRIxPTR "\n", from, to);
++ else
++ printf ("info: object \"%s\" found at 0x%" PRIxPTR " - 0x%"
++ PRIxPTR "\n", path, from, to);
++
++ found = true;
++ }
++
++ free (path);
++ }
++
++ free (path_ldso);
++ free (line);
++ xfclose (f);
++ return found;
++}
++
+static int
+do_test (void)
+{
@@ -2970,16 +3028,18 @@ index 0000000000..04de808bb2
+ if ((void *) dlfo.dlfo_link_map != (void *) l)
+ {
+ printf ("info: object \"%s\" found at %p\n",
-+ dlfo.dlfo_link_map->l_name, ptr);
++ dlfo.dlfo_link_map->l_name, expected);
+ gap_found = true;
+ }
+ }
+ else
+ TEST_COMPARE (dlfo_ret, -1);
++
+ xmunmap (ptr, 1);
+ addr += pagesize;
+ }
-+ if (!gap_found)
++
++ if (!gap_found && !find_gap_with_proc_self_map (l))
+ FAIL ("no ld.so gap found");
+ }
+ else
@@ -3599,6 +3659,314 @@ index 1c499d590d..40340c38fa 100644
if ! cmp -s "$tmp/out" "$tmp/expected" ; then
echo "error: iconv output difference" >&$logfd
echo "*** expected ***" >&$logfd
+diff --git a/iconvdata/Makefile b/iconvdata/Makefile
+index 5a2abeea24..cc689f63e9 100644
+--- a/iconvdata/Makefile
++++ b/iconvdata/Makefile
+@@ -76,7 +76,7 @@ tests = bug-iconv1 bug-iconv2 tst-loading tst-e2big
tst-iconv4 bug-iconv4 \
+ tst-iconv6 bug-iconv5 bug-iconv6 tst-iconv7 bug-iconv8 bug-iconv9 \
+ bug-iconv10 bug-iconv11 bug-iconv12 tst-iconv-big5-hkscs-to-2ucs4 \
+ bug-iconv13 bug-iconv14 bug-iconv15 \
+- tst-iconv-iso-2022-cn-ext
++ tst-iconv-iso-2022-cn-ext tst-bug33980
+ ifeq ($(have-thread-library),yes)
+ tests += bug-iconv3
+ endif
+@@ -333,6 +333,8 @@ $(objpfx)bug-iconv15.out: $(addprefix $(objpfx),
$(gconv-modules)) \
+ $(addprefix $(objpfx),$(modules.so))
+ $(objpfx)tst-iconv-iso-2022-cn-ext.out: $(addprefix $(objpfx),
$(gconv-modules)) \
+ $(addprefix $(objpfx),$(modules.so))
++$(objpfx)tst-bug33980.out: $(addprefix $(objpfx), $(gconv-modules)) \
++ $(addprefix $(objpfx),$(modules.so))
+
+ $(objpfx)iconv-test.out: run-iconv-test.sh \
+ $(addprefix $(objpfx), $(gconv-modules)) \
+diff --git a/iconvdata/ansi_x3.110.c b/iconvdata/ansi_x3.110.c
+index c5506b13b8..94e6e6b745 100644
+--- a/iconvdata/ansi_x3.110.c
++++ b/iconvdata/ansi_x3.110.c
+@@ -407,7 +407,7 @@ static const char from_ucs4[][2] =
+ is also available. */ \
+ uint32_t ch2; \
+ \
+- if (inptr + 1 >= inend) \
++ if (inend - inptr <= 1) \
+ { \
+ /* The second character is not available. */ \
+ result = __GCONV_INCOMPLETE_INPUT; \
+diff --git a/iconvdata/ibm1364.c b/iconvdata/ibm1364.c
+index 45c62acee5..244c61ad7a 100644
+--- a/iconvdata/ibm1364.c
++++ b/iconvdata/ibm1364.c
+@@ -67,12 +67,29 @@
+
+ /* Since this is a stateful encoding we have to provide code which resets
+ the output state to the initial state. This has to be done during the
+- flushing. */
++ flushing. For the to-internal direction (FROM_DIRECTION is true),
++ there may be a pending character that needs flushing. */
+ #define EMIT_SHIFT_TO_INIT \
+ if ((data->__statep->__count & ~7) != sb) \
+ { \
+ if (FROM_DIRECTION) \
+- data->__statep->__count &= 7; \
++ { \
++ uint32_t ch = data->__statep->__count >> 7; \
++ if (__glibc_unlikely (ch != 0)) \
++ { \
++ if (__glibc_unlikely (outend - outbuf < 4)) \
++ status = __GCONV_FULL_OUTPUT; \
++ else \
++ { \
++ put32 (outbuf, ch); \
++ outbuf += 4; \
++ /* Clear character and db bit. */ \
++ data->__statep->__count &= 7; \
++ } \
++ } \
++ else \
++ data->__statep->__count &= 7; \
++ } \
+ else \
+ { \
+ /* We are not in the initial state. To switch back we have \
+@@ -99,11 +116,13 @@
+ *curcsp = save_curcs
+
+
+-/* Current codeset type. */
++/* Current codeset type. The bit is stored in the __count variable of
++ the conversion state. If the db bit is set, bit 7 and above store
++ a pending UCS-4 code point if non-zero. */
+ enum
+ {
+- sb = 0,
+- db = 64
++ sb = 0, /* Single byte mode. */
++ db = 64 /* Double byte mode. */
+ };
+
+
+@@ -119,21 +138,29 @@ enum
+ }
\
+ else \
+ {
\
+- /* This is a combined character. Make sure we have room. */ \
+- if (__glibc_unlikely (outptr + 8 > outend)) \
+- { \
+- result = __GCONV_FULL_OUTPUT; \
+- break; \
+- } \
+- \
+ const struct divide *cmbp \
+ = &DB_TO_UCS4_COMB[ch - __TO_UCS4_COMBINED_MIN]; \
+ assert (cmbp->res1 != 0 && cmbp->res2 != 0); \
+ \
+ put32 (outptr, cmbp->res1); \
+ outptr += 4; \
+- put32 (outptr, cmbp->res2); \
+- outptr += 4; \
++ \
++ /* See whether we have room for the second character. */ \
++ if (outend - outptr >= 4) \
++ { \
++ put32 (outptr, cmbp->res2); \
++ outptr += 4; \
++ } \
++ else \
++ { \
++ /* Otherwise store only the first character now, and \
++ put the second one into the queue. */ \
++ curcs |= cmbp->res2 << 7; \
++ inptr += 2; \
++ /* Tell the caller why we terminate the loop. */ \
++ result = __GCONV_FULL_OUTPUT; \
++ break; \
++ } \
+ }
\
+ }
+ #else
+@@ -153,7 +180,20 @@ enum
+ #define LOOPFCT FROM_LOOP
+ #define BODY \
+ { \
+- uint32_t ch = *inptr; \
++ uint32_t ch; \
++ \
++ ch = curcs >> 7; \
++ if (__glibc_unlikely (ch != 0)) \
++ {
\
++ put32 (outptr, ch); \
++ outptr += 4; \
++ /* Remove the pending character, but preserve state bits. */ \
++ curcs &= (1 << 7) - 1; \
++ continue; \
++ }
\
++ \
++ /* Otherwise read the next input byte. */
\
++ ch = *inptr; \
+ \
+ if (__builtin_expect (ch, 0) == SO)
\
+ {
\
+diff --git a/iconvdata/tst-bug33980.c b/iconvdata/tst-bug33980.c
+new file mode 100644
+index 0000000000..c9693e0efe
+--- /dev/null
++++ b/iconvdata/tst-bug33980.c
+@@ -0,0 +1,153 @@
++/* Test for bug 33980: combining characters in IBM1390/IBM1399.
++ 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 <alloc_buffer.h>
++#include <errno.h>
++#include <iconv.h>
++#include <stdbool.h>
++#include <string.h>
++
++#include <support/check.h>
++#include <support/next_to_fault.h>
++#include <support/support.h>
++
++/* Run iconv in a loop with a small output buffer of OUTBUFSIZE bytes
++ starting at OUTBUF. OUTBUF should be right before an unmapped page
++ so that writing past the end will fault. Skip SHIFT bytes at the
++ start of the input and output, to exercise different buffer
++ alignment. TRUNCATE indicates skipped bytes at the end of
++ input (0 and 1 a valid). */
++static void
++test_one (const char *encoding, unsigned int shift, unsigned int truncate,
++ char *outbuf, size_t outbufsize)
++{
++ /* In IBM1390 and IBM1399, the DBCS code 0xECB5 expands to two
++ Unicode code points when translated. */
++ static char input[] =
++ {
++ /* 8 letters X. */
++ 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
++ /* SO, 0xECB5, SI: shift to DBCS, special character, shift back. */
++ 0x0e, 0xec, 0xb5, 0x0f
++ };
++
++ /* Expected output after UTF-8 conversion. */
++ static char expected[] =
++ {
++ 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
++ /* U+304B (HIRAGANA LETTER KA). */
++ 0xe3, 0x81, 0x8b,
++ /* U+309A (COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK). */
++ 0xe3, 0x82, 0x9a
++ };
++
++ iconv_t cd = iconv_open ("UTF-8", encoding);
++ TEST_VERIFY_EXIT (cd != (iconv_t) -1);
++
++ char result_storage[64];
++ struct alloc_buffer result_buf
++ = alloc_buffer_create (result_storage, sizeof (result_storage));
++
++ char *inptr = &input[shift];
++ size_t inleft = sizeof (input) - shift - truncate;
++
++ while (inleft > 0)
++ {
++ char *outptr = outbuf;
++ size_t outleft = outbufsize;
++ size_t inleft_before = inleft;
++
++ size_t ret = iconv (cd, &inptr, &inleft, &outptr, &outleft);
++ size_t produced = outptr - outbuf;
++ alloc_buffer_copy_bytes (&result_buf, outbuf, produced);
++
++ if (ret == (size_t) -1 && errno == E2BIG)
++ {
++ if (produced == 0 && inleft == inleft_before)
++ {
++ /* Output buffer too small to make progress. This is
++ expected for very small output buffer sizes. */
++ TEST_VERIFY_EXIT (outbufsize < 3);
++ break;
++ }
++ continue;
++ }
++ if (ret == (size_t) -1)
++ FAIL_EXIT1 ("%s (outbufsize %zu): iconv: %m", encoding, outbufsize);
++ break;
++ }
++
++ /* Flush any pending state (e.g. a buffered combined character).
++ With outbufsize < 3, we could not store the first character, so
++ the second character did not become pending, and there is nothing
++ to flush. */
++ {
++ char *outptr = outbuf;
++ size_t outleft = outbufsize;
++
++ size_t ret = iconv (cd, NULL, NULL, &outptr, &outleft);
++ TEST_VERIFY_EXIT (ret == 0);
++ size_t produced = outptr - outbuf;
++ alloc_buffer_copy_bytes (&result_buf, outbuf, produced);
++
++ /* Second flush does not provide more data. */
++ outptr = outbuf;
++ outleft = outbufsize;
++ ret = iconv (cd, NULL, NULL, &outptr, &outleft);
++ TEST_VERIFY_EXIT (ret == 0);
++ TEST_VERIFY (outptr == outbuf);
++ }
++
++ TEST_VERIFY_EXIT (!alloc_buffer_has_failed (&result_buf));
++ size_t result_used
++ = sizeof (result_storage) - alloc_buffer_size (&result_buf);
++
++ if (outbufsize >= 3)
++ {
++ TEST_COMPARE (inleft, 0);
++ TEST_COMPARE (result_used, sizeof (expected) - shift);
++ TEST_COMPARE_BLOB (result_storage, result_used,
++ &expected[shift], sizeof (expected) - shift);
++ }
++ else
++ /* If the buffer is too small, only the leading X could be converted. */
++ TEST_COMPARE (result_used, 8 - shift);
++
++ TEST_VERIFY_EXIT (iconv_close (cd) == 0);
++}
++
++static int
++do_test (void)
++{
++ struct support_next_to_fault ntf
++ = support_next_to_fault_allocate (8);
++
++ for (int shift = 0; shift <= 8; ++shift)
++ for (int truncate = 0; truncate < 2; ++truncate)
++ for (size_t outbufsize = 1; outbufsize <= 8; outbufsize++)
++ {
++ char *outbuf = ntf.buffer + ntf.length - outbufsize;
++ test_one ("IBM1390", shift, truncate, outbuf, outbufsize);
++ test_one ("IBM1399", shift, truncate, outbuf, outbufsize);
++ }
++
++ support_next_to_fault_free (&ntf);
++ return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/include/ctype.h b/include/ctype.h
index 493a6f80ce..a15e5b6678 100644
--- a/include/ctype.h
@@ -4023,6 +4391,22 @@ index 1ef07f1f58..321ae00ec8 100644
#define __MATHDECL_1_IMPL(type, function, suffix, args) \
extern type __MATH_PRECNAME(function,suffix) args __THROW
#define __MATHDECL_1(type, function, suffix, args) \
+diff --git a/misc/tst-preadvwritev2-common.c b/misc/tst-preadvwritev2-common.c
+index ff1007d6d2..5182fcdce0 100644
+--- a/misc/tst-preadvwritev2-common.c
++++ b/misc/tst-preadvwritev2-common.c
+@@ -109,9 +109,8 @@ do_test_with_invalid_iov (void)
+ static void
+ do_test_with_invalid_flags (void)
+ {
+- /* Set the next bit from the mask of all supported flags. */
+- int invalid_flag = RWF_SUPPORTED != 0 ? __builtin_clz (RWF_SUPPORTED) : 2;
+- invalid_flag = 0x1 << ((sizeof (int) * CHAR_BIT) - invalid_flag);
++ /* Set all the bits that are not used by the supported flags. */
++ int invalid_flag = ~RWF_SUPPORTED;
+
+ char buf[32];
+ const struct iovec vec = { .iov_base = buf, .iov_len = sizeof (buf) };
diff --git a/nptl/Makefile b/nptl/Makefile
index 82621c7954..4be778ad65 100644
--- a/nptl/Makefile
@@ -4122,6 +4506,18 @@ index dbb8fcc754..392619021b 100644
break;
/* Record the ownership. */
+diff --git a/nss/Makefile b/nss/Makefile
+index 3ee51f309e..5dae3a0fca 100644
+--- a/nss/Makefile
++++ b/nss/Makefile
+@@ -326,6 +326,7 @@ tests := \
+ tst-gshadow \
+ tst-nss-getpwent \
+ tst-nss-hash \
++ tst-nss-malloc-failure-getlogin_r \
+ tst-nss-test1 \
+ tst-nss-test2 \
+ tst-nss-test4 \
diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
index eae6c3480e..2b0735fb6a 100644
--- a/nss/getXXbyYY_r.c
@@ -4153,8 +4549,468 @@ index eae6c3480e..2b0735fb6a 100644
})
/* Type of the lookup function we need here. */
+diff --git a/nss/nss_database.c b/nss/nss_database.c
+index a7ac32beb9..7aa460c7df 100644
+--- a/nss/nss_database.c
++++ b/nss/nss_database.c
+@@ -56,7 +56,6 @@ global_state_allocate (void *closure)
+ {
+ result->data.nsswitch_conf.size = -1; /* Force reload. */
+ memset (result->data.services, 0, sizeof (result->data.services));
+- result->data.initialized = true;
+ result->data.reload_disabled = false;
+ __libc_lock_init (result->lock);
+ result->root_ino = 0;
+@@ -251,9 +250,12 @@ __nss_configure_lookup (const char *dbname, const char
*service_line)
+
+ /* Force any load/cache/read whatever to happen, so we can override
+ it. */
+- __nss_database_get (db, &result);
++ if (!__nss_database_get (db, &result))
++ return -1;
+
+ local = nss_database_state_get ();
++ if (local == NULL)
++ return -1;
+
+ result = __nss_action_parse (service_line);
+ if (result == NULL)
+@@ -451,8 +453,8 @@ nss_database_check_reload_and_get (struct
nss_database_state *local,
+ /* Avoid overwriting the global configuration until we have loaded
+ everything successfully. Otherwise, if the file change
+ information changes back to what is in the global configuration,
+- the lookups would use the partially-written configuration. */
+- struct nss_database_data staging = { .initialized = true, };
++ the lookups would use the partially-written configuration. */
++ struct nss_database_data staging = { };
+
+ bool ok = nss_database_reload (&staging, &initial);
+
+@@ -478,6 +480,8 @@ bool
+ __nss_database_get (enum nss_database db, nss_action_list *actions)
+ {
+ struct nss_database_state *local = nss_database_state_get ();
++ if (local == NULL)
++ return false;
+ return nss_database_check_reload_and_get (local, actions, db);
+ }
+ libc_hidden_def (__nss_database_get)
+@@ -503,7 +507,7 @@ __nss_database_freeres (void)
+ }
+
+ void
+-__nss_database_fork_prepare_parent (struct nss_database_data *data)
++__nss_database_fork_prepare_parent (struct nss_database_for_fork *data)
+ {
+ /* Do not use allocate_once to trigger loading unnecessarily. */
+ struct nss_database_state *local = atomic_load_acquire
(&global_database_state);
+@@ -515,20 +519,21 @@ __nss_database_fork_prepare_parent (struct
nss_database_data *data)
+ because it avoids acquiring the lock during the actual
+ fork. */
+ __libc_lock_lock (local->lock);
+- *data = local->data;
++ data->data = local->data;
+ __libc_lock_unlock (local->lock);
++ data->initialized = true;
+ }
+ }
+
+ void
+-__nss_database_fork_subprocess (struct nss_database_data *data)
++__nss_database_fork_subprocess (struct nss_database_for_fork *data)
+ {
+ struct nss_database_state *local = atomic_load_acquire
(&global_database_state);
+ if (data->initialized)
+ {
+ /* Restore the state at the point of the fork. */
+ assert (local != NULL);
+- local->data = *data;
++ local->data = data->data;
+ __libc_lock_init (local->lock);
+ }
+ else if (local != NULL)
+diff --git a/nss/nss_database.h b/nss/nss_database.h
+index 0eaea49685..c170da03f6 100644
+--- a/nss/nss_database.h
++++ b/nss/nss_database.h
+@@ -70,15 +70,21 @@ struct nss_database_data
+ struct file_change_detection nsswitch_conf;
+ nss_action_list services[NSS_DATABASE_COUNT];
+ int reload_disabled; /* Actually bool; int for atomic access. */
+- bool initialized;
++};
++
++/* Use to store a consistent state snapshot across fork. */
++struct nss_database_for_fork
++{
++ bool initialized; /* Set to true if the data field below is initialized.
*/
++ struct nss_database_data data;
+ };
+
+ /* Called by fork in the parent process, before forking. */
+-void __nss_database_fork_prepare_parent (struct nss_database_data *data)
++void __nss_database_fork_prepare_parent (struct nss_database_for_fork *)
+ attribute_hidden;
+
+ /* Called by fork in the new subprocess, after forking. */
+-void __nss_database_fork_subprocess (struct nss_database_data *data)
++void __nss_database_fork_subprocess (struct nss_database_for_fork *)
+ attribute_hidden;
+
+ #endif /* _NSS_DATABASE_H */
+diff --git a/nss/tst-nss-malloc-failure-getlogin_r.c
b/nss/tst-nss-malloc-failure-getlogin_r.c
+new file mode 100644
+index 0000000000..0e2985ad57
+--- /dev/null
++++ b/nss/tst-nss-malloc-failure-getlogin_r.c
+@@ -0,0 +1,345 @@
++/* Test NSS/getlogin_r with injected allocation failures (bug 28940).
++ 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 <errno.h>
++#include <getopt.h>
++#include <malloc.h>
++#include <netdb.h>
++#include <nss.h>
++#include <stdbool.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/namespace.h>
++#include <support/support.h>
++#include <support/xstdio.h>
++#include <unistd.h>
++
++/* This test calls getpwuid_r via getlogin_r (on Linux).
++
++ This test uses the NSS system configuration to exercise that code
++ path. It means that it can fail (crash) if malloc failure is not
++ handled by NSS modules for the passwd database. */
++
++/* Data structure allocated via MAP_SHARED, so that writes from the
++ subprocess are visible. */
++struct shared_data
++{
++ /* Number of tracked allocations performed so far. */
++ volatile unsigned int allocation_count;
++
++ /* If this number is reached, one allocation fails. */
++ volatile unsigned int failing_allocation;
++
++ /* The number of allocations performed during initialization
++ (before the actual getlogin_r call). */
++ volatile unsigned int init_allocation_count;
++
++ /* Error code of an expected getlogin_r failure. */
++ volatile int expected_failure;
++
++ /* The subprocess stores the expected name here. */
++ char name[100];
++};
++
++/* Allocation count in shared mapping. */
++static struct shared_data *shared;
++
++/* Returns true if a failure should be injected for this allocation. */
++static bool
++fail_this_allocation (void)
++{
++ if (shared != NULL)
++ {
++ unsigned int count = shared->allocation_count;
++ shared->allocation_count = count + 1;
++ return count == shared->failing_allocation;
++ }
++ else
++ return false;
++}
++
++/* Failure-injecting wrappers for allocation functions used by glibc. */
++
++void *
++malloc (size_t size)
++{
++ if (fail_this_allocation ())
++ {
++ errno = ENOMEM;
++ return NULL;
++ }
++ extern __typeof (malloc) __libc_malloc;
++ return __libc_malloc (size);
++}
++
++void *
++calloc (size_t a, size_t b)
++{
++ if (fail_this_allocation ())
++ {
++ errno = ENOMEM;
++ return NULL;
++ }
++ extern __typeof (calloc) __libc_calloc;
++ return __libc_calloc (a, b);
++}
++
++void *
++realloc (void *ptr, size_t size)
++{
++ if (fail_this_allocation ())
++ {
++ errno = ENOMEM;
++ return NULL;
++ }
++ extern __typeof (realloc) __libc_realloc;
++ return __libc_realloc (ptr, size);
++}
++
++/* No-op subprocess to verify that support_isolate_in_subprocess does
++ not perform any heap allocations. */
++static void
++no_op (void *ignored)
++{
++}
++
++/* Perform a getlogin_r call in a subprocess, to obtain the number of
++ allocations used and the expected result of a successful call. */
++static void
++initialize (void *configure_lookup)
++{
++ shared->init_allocation_count = 0;
++ if (configure_lookup != NULL)
++ {
++ TEST_COMPARE (__nss_configure_lookup ("passwd", configure_lookup), 0);
++ shared->init_allocation_count = shared->allocation_count;
++ }
++
++ shared->name[0] = '\0';
++ int ret = getlogin_r (shared->name, sizeof (shared->name));
++ if (ret != 0)
++ {
++ printf ("info: getlogin_r failed: %s (%d)\n",
++ strerrorname_np (ret), ret);
++ shared->expected_failure = ret;
++ }
++ else
++ {
++ shared->expected_failure = 0;
++ if (shared->name[0] == '\0')
++ FAIL ("error: getlogin_r succeeded without result\n");
++ else
++ printf ("info: getlogin_r: \"%s\"\n", shared->name);
++ }
++}
++
++/* Perform getlogin_r in a subprocess with fault injection. */
++static void
++test_in_subprocess (void *configure_lookup)
++{
++ if (configure_lookup != NULL
++ && __nss_configure_lookup ("passwd", configure_lookup) < 0)
++ {
++ printf ("info: __nss_configure_lookup failed: %s (%d)\n",
++ strerrorname_np (errno), errno);
++ TEST_COMPARE (errno, ENOMEM);
++ TEST_VERIFY (shared->allocation_count <= shared->init_allocation_count);
++ return;
++ }
++
++ unsigned int inject_at = shared->failing_allocation;
++ char name[sizeof (shared->name)] = "name not set";
++ int ret = getlogin_r (name, sizeof (name));
++ shared->failing_allocation = ~0U;
++
++ if (ret == 0)
++ {
++ TEST_COMPARE (shared->expected_failure, 0);
++ TEST_COMPARE_STRING (name, shared->name);
++ }
++ else
++ {
++ printf ("info: allocation %u failure results in error %s (%d)\n",
++ inject_at, strerrorname_np (ret), ret);
++
++ if (ret != ENOMEM)
++ {
++ if (shared->expected_failure != 0)
++ TEST_COMPARE (ret, shared->expected_failure);
++ else if (configure_lookup == NULL)
++ /* The ENOENT failure can happen due to an issue related
++ to bug 22041: dlopen failure does not result in ENOMEM. */
++ TEST_COMPARE (ret, ENOENT);
++ else
++ FAIL ("unexpected getlogin_r error");
++ }
++ }
++
++ if (shared->expected_failure == 0)
++ {
++ /* The second call should succeed. */
++ puts ("info: about to perform second getlogin_r call");
++ ret = getlogin_r (name, sizeof (name));
++ if (configure_lookup == NULL)
++ {
++ /* This check can fail due to bug 22041 if the malloc error
++ injection causes a failure internally in dlopen. */
++ if (ret != 0)
++ {
++ printf ("warning: second getlogin_r call failed with %s (%d)\n",
++ strerrorname_np (ret), ret);
++ TEST_COMPARE (ret, ENOENT);
++ }
++ }
++ else
++ /* If __nss_configure_lookup has been called, the error caching
++ bug does not happen because nss_files is built-in, and the
++ second getlogin_r is expected to succeed. */
++ TEST_COMPARE (ret, 0);
++ if (ret == 0)
++ TEST_COMPARE_STRING (name, shared->name);
++ }
++}
++
++/* Set by the --failing-allocation command line option. Together with
++ --direct, this can be used to trigger an allocation failure in the
++ original process, which may help with debugging. */
++static int option_failing_allocation = -1;
++
++/* Set by --override, to be used with --failing-allocation. Turns on
++ the __nss_configure_lookup call for passwd/files, which is disabled
++ by default. */
++static int option_override = 0;
++
++static int
++do_test (void)
++{
++ char files[] = "files";
++
++ if (option_failing_allocation >= 0)
++ {
++ /* The test was invoked with --failing-allocation. Perform just
++ one test, using the original nsswitch.conf. This is a
++ condensed version of the probing/testing loop below. */
++ printf ("info: testing with failing allocation %d\n",
++ option_failing_allocation);
++ shared = support_shared_allocate (sizeof (*shared));
++ shared->failing_allocation = ~0U;
++ char *configure_lookup = option_override ? files : NULL;
++ support_isolate_in_subprocess (initialize, configure_lookup);
++ shared->allocation_count = 0;
++ shared->failing_allocation = option_failing_allocation;
++ test_in_subprocess (configure_lookup); /* No subprocess. */
++ support_shared_free (shared);
++ shared = NULL;
++ return 0;
++ }
++
++ bool any_success = false;
++
++ for (int do_configure_lookup = 0; do_configure_lookup < 2;
++ ++do_configure_lookup)
++ {
++ if (do_configure_lookup)
++ puts ("info: testing with nsswitch.conf override");
++ else
++ puts ("info: testing with original nsswitch.conf");
++
++ char *configure_lookup = do_configure_lookup ? files : NULL;
++
++ shared = support_shared_allocate (sizeof (*shared));
++
++ /* Disable fault injection. */
++ shared->failing_allocation = ~0U;
++
++ support_isolate_in_subprocess (no_op, NULL);
++ TEST_COMPARE (shared->allocation_count, 0);
++
++ support_isolate_in_subprocess (initialize, configure_lookup);
++
++ if (shared->name[0] != '\0')
++ any_success = true;
++
++ /* The number of allocations in the successful case. Once the
++ number of expected allocations is exceeded, injecting further
++ failures does not make a difference (assuming that the number
++ of malloc calls is deterministic). */
++ unsigned int maximum_allocation_count = shared->allocation_count;
++ printf ("info: initial getlogin_r performed %u allocations\n",
++ maximum_allocation_count);
++
++ for (unsigned int inject_at = 0; inject_at <= maximum_allocation_count;
++ ++inject_at)
++ {
++ printf ("info: running fault injection at allocation %u\n",
++ inject_at);
++ shared->allocation_count = 0;
++ shared->failing_allocation = inject_at;
++ support_isolate_in_subprocess (test_in_subprocess,
configure_lookup);
++ }
++
++ support_shared_free (shared);
++ shared = NULL;
++ }
++
++ {
++ FILE *fp = fopen (_PATH_NSSWITCH_CONF, "r");
++ if (fp == NULL)
++ printf ("info: no %s file\n", _PATH_NSSWITCH_CONF);
++ else
++ {
++ printf ("info: %s contents follows\n", _PATH_NSSWITCH_CONF);
++ int last_ch = '\n';
++ while (true)
++ {
++ int ch = fgetc (fp);
++ if (ch == EOF)
++ break;
++ putchar (ch);
++ last_ch = ch;
++ }
++ if (last_ch != '\n')
++ putchar ('\n');
++ printf ("(end of %s contents)\n", _PATH_NSSWITCH_CONF);
++ xfclose (fp);
++ }
++ }
++
++ support_record_failure_barrier ();
++
++ if (!any_success)
++ FAIL_UNSUPPORTED ("no successful getlogin_r calls");
++
++ return 0;
++}
++
++static void
++cmdline_process (int c)
++{
++ if (c == 'F')
++ option_failing_allocation = atoi (optarg);
++}
++
++#define CMDLINE_OPTIONS \
++ { "failing-allocation", required_argument, NULL, 'F' }, \
++ { "override", no_argument, &option_override, 1 },
++
++#define CMDLINE_PROCESS cmdline_process
++
++#include <support/test-driver.c>
diff --git a/posix/Makefile b/posix/Makefile
-index a650abf598..a9f3e814e5 100644
+index a650abf598..9360bc7ff8 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -303,6 +303,7 @@ tests := \
@@ -4186,7 +5042,7 @@ index a650abf598..a9f3e814e5 100644
$(objpfx)tst-pcre-mem.out \
$(objpfx)tst-rxspencer-no-utf8-mem.out \
$(objpfx)tst-vfork3-mem.out \
-+ $(objpfx)tst-wordexp-reuse.out \
++ $(objpfx)tst-wordexp-reuse-mem.out \
# tests-special
endif
endif
@@ -4220,6 +5076,19 @@ index a0ed0d80ea..924effe3cd 100644
+
+struct environ_array *__environ_array_list;
+environ_counter __environ_counter;
+diff --git a/posix/fork.c b/posix/fork.c
+index 011e92fc1d..7f2370f2eb 100644
+--- a/posix/fork.c
++++ b/posix/fork.c
+@@ -50,7 +50,7 @@ __libc_fork (void)
+
+ lastrun = __run_prefork_handlers (multiple_threads);
+
+- struct nss_database_data nss_database_data;
++ struct nss_database_for_fork nss_database_data;
+
+ /* If we are not running multiple threads, we do not have to
+ preserve lock state. If fork runs from a signal handler, only
diff --git a/posix/regcomp.c b/posix/regcomp.c
index 69675d81f7..5c486cee56 100644
--- a/posix/regcomp.c
@@ -4533,6 +5402,69 @@ index a69b732801..9df4bb7424 100644
}
if ((flags & WRDE_APPEND) == 0)
+diff --git a/resolv/Makefile b/resolv/Makefile
+index 48b16dc2b2..8fc444de13 100644
+--- a/resolv/Makefile
++++ b/resolv/Makefile
+@@ -98,8 +98,10 @@ tests += \
+ tst-resolv-basic \
+ tst-resolv-binary \
+ tst-resolv-byaddr \
++ tst-resolv-dns-section \
+ tst-resolv-edns \
+ tst-resolv-invalid-cname \
++ tst-resolv-invalid-ptr \
+ tst-resolv-network \
+ tst-resolv-noaaaa \
+ tst-resolv-noaaaa-vc \
+@@ -109,6 +111,7 @@ tests += \
+ tst-resolv-semi-failure \
+ tst-resolv-short-response \
+ tst-resolv-trailing \
++ # tests
+
+ # This test calls __res_context_send directly, which is not exported
+ # from libresolv.
+@@ -286,6 +289,8 @@ $(objpfx)tst-resolv-aliases: $(objpfx)libresolv.so
$(shared-thread-library)
+ $(objpfx)tst-resolv-basic: $(objpfx)libresolv.so $(shared-thread-library)
+ $(objpfx)tst-resolv-binary: $(objpfx)libresolv.so $(shared-thread-library)
+ $(objpfx)tst-resolv-byaddr: $(objpfx)libresolv.so $(shared-thread-library)
++$(objpfx)tst-resolv-dns-section: $(objpfx)libresolv.so \
++ $(shared-thread-library)
+ $(objpfx)tst-resolv-edns: $(objpfx)libresolv.so $(shared-thread-library)
+ $(objpfx)tst-resolv-network: $(objpfx)libresolv.so $(shared-thread-library)
+ $(objpfx)tst-resolv-res_init: $(objpfx)libresolv.so
+@@ -295,6 +300,8 @@ $(objpfx)tst-resolv-res_init-thread: $(objpfx)libresolv.so
\
+ $(shared-thread-library)
+ $(objpfx)tst-resolv-invalid-cname: $(objpfx)libresolv.so \
+ $(shared-thread-library)
++$(objpfx)tst-resolv-invalid-ptr: $(objpfx)libresolv.so \
++ $(shared-thread-library)
+ $(objpfx)tst-resolv-noaaaa: $(objpfx)libresolv.so $(shared-thread-library)
+ $(objpfx)tst-resolv-noaaaa-vc: $(objpfx)libresolv.so $(shared-thread-library)
+ $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)
+diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
+index 14da73ee1d..1bc2e1df95 100644
+--- a/resolv/nss_dns/dns-host.c
++++ b/resolv/nss_dns/dns-host.c
+@@ -820,7 +820,7 @@ getanswer_ptr (unsigned char *packet, size_t packetlen,
+ /* expected_name may be updated to point into this buffer. */
+ unsigned char name_buffer[NS_MAXCDNAME];
+
+- while (ancount > 0)
++ for (; ancount > 0; --ancount)
+ {
+ struct ns_rr_wire rr;
+ if (!__ns_rr_cursor_next (&c, &rr))
+@@ -866,7 +866,7 @@ getanswer_ptr (unsigned char *packet, size_t packetlen,
+ char hname[MAXHOSTNAMELEN + 1];
+ if (__ns_name_unpack (c.begin, c.end, rr.rdata,
+ name_buffer, sizeof (name_buffer)) < 0
+- || !__res_binary_hnok (expected_name)
++ || !__res_binary_hnok (name_buffer)
+ || __ns_name_ntop (name_buffer, hname, sizeof (hname)) < 0)
+ {
+ *h_errnop = NO_RECOVERY;
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
@@ -4548,6 +5480,435 @@ index 519f8422ca..e14e959d7c 100644
}
net_buffer.buf = orig_net_buffer = (querybuf *) alloca (1024);
+diff --git a/resolv/tst-resolv-dns-section.c b/resolv/tst-resolv-dns-section.c
+new file mode 100644
+index 0000000000..1171baef51
+--- /dev/null
++++ b/resolv/tst-resolv-dns-section.c
+@@ -0,0 +1,162 @@
++/* Test handling of invalid section transitions (bug 34014).
++ Copyright (C) 2022-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 <array_length.h>
++#include <errno.h>
++#include <netdb.h>
++#include <resolv.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/format_nss.h>
++#include <support/resolv_test.h>
++#include <support/support.h>
++
++/* Name of test, and the second section type. */
++struct item {
++ const char *test;
++ int ns_section;
++};
++
++static const struct item test_items[] =
++ {
++ { "Test crossing from ns_s_an to ns_s_ar.", ns_s_ar },
++ { "Test crossing from ns_s_an to ns_s_an.", ns_s_ns },
++
++ { NULL, 0 },
++ };
++
++/* The response is designed to contain the following:
++ - An Answer section with one T_PTR record that is skipped.
++ - A second section with a semantically invalid T_PTR record.
++ The original defect is that the response parsing would cross
++ section boundaries and handle the additional section T_PTR
++ as if it were an answer. A conforming implementation would
++ stop as soon as it reaches the end of the section. */
++static void
++response (const struct resolv_response_context *ctx,
++ struct resolv_response_builder *b,
++ const char *qname, uint16_t qclass, uint16_t qtype)
++{
++ TEST_COMPARE (qclass, C_IN);
++
++ /* We only test PTR. */
++ TEST_COMPARE (qtype, T_PTR);
++
++ unsigned int count;
++ char *tail = NULL;
++
++ if (strstr (qname, "in-addr.arpa") != NULL
++ && sscanf (qname, "%u.%ms", &count, &tail) == 2)
++ TEST_COMPARE_STRING (tail, "0.168.192.in-addr.arpa");
++ else if (sscanf (qname, "%x.%ms", &count, &tail) == 2)
++ {
++ TEST_COMPARE_STRING (tail, "\
++0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa");
++ }
++ else
++ FAIL_EXIT1 ("invalid QNAME: %s\n", qname);
++ free (tail);
++
++ /* We have a bounded number of possible tests. */
++ TEST_VERIFY (count >= 0);
++ TEST_VERIFY (count <= 15);
++
++ struct resolv_response_flags flags = {};
++ resolv_response_init (b, flags);
++ resolv_response_add_question (b, qname, qclass, qtype);
++ resolv_response_section (b, ns_s_an);
++
++ /* Actual answer record, but the wrong name (skipped). */
++ resolv_response_open_record (b, "1.0.0.10.in-addr.arpa", qclass, qtype, 60);
++
++ /* Record the answer. */
++ resolv_response_add_name (b, "test.ptr.example.net");
++ resolv_response_close_record (b);
++
++ /* Add a second section to test section boundary crossing. */
++ resolv_response_section (b, test_items[count].ns_section);
++ /* Semantically incorrect, but hide a T_PTR entry. */
++ resolv_response_open_record (b, qname, qclass, qtype, 60);
++ resolv_response_add_name (b, "wrong.ptr.example.net");
++ resolv_response_close_record (b);
++}
++
++
++/* Perform one check using a reverse lookup. */
++static void
++check_reverse (int af, int count)
++{
++ TEST_VERIFY (af == AF_INET || af == AF_INET6);
++ TEST_VERIFY (count < array_length (test_items));
++
++ char addr[sizeof (struct in6_addr)] = { 0 };
++ socklen_t addrlen;
++ if (af == AF_INET)
++ {
++ addr[0] = (char) 192;
++ addr[1] = (char) 168;
++ addr[2] = (char) 0;
++ addr[3] = (char) count;
++ addrlen = 4;
++ }
++ else
++ {
++ addr[0] = 0x20;
++ addr[1] = 0x01;
++ addr[2] = 0x0d;
++ addr[3] = 0xb8;
++ addr[4] = addr[5] = addr[6] = addr[7] = 0x0;
++ addr[8] = addr[9] = addr[10] = addr[11] = 0x0;
++ addr[12] = 0x0;
++ addr[13] = 0x0;
++ addr[14] = 0x0;
++ addr[15] = count;
++ addrlen = 16;
++ }
++
++ h_errno = 0;
++ struct hostent *answer = gethostbyaddr (addr, addrlen, af);
++ TEST_VERIFY (answer == NULL);
++ TEST_VERIFY (h_errno == NO_RECOVERY);
++ if (answer != NULL)
++ printf ("error: unexpected success: %s\n",
++ support_format_hostent (answer));
++}
++
++static int
++do_test (void)
++{
++ struct resolv_test *obj = resolv_test_start
++ ((struct resolv_redirect_config)
++ {
++ .response_callback = response
++ });
++
++ for (int i = 0; test_items[i].test != NULL; i++)
++ {
++ check_reverse (AF_INET, i);
++ check_reverse (AF_INET6, i);
++ }
++
++ resolv_test_end (obj);
++
++ return 0;
++}
++
++#include <support/test-driver.c>
+diff --git a/resolv/tst-resolv-invalid-ptr.c b/resolv/tst-resolv-invalid-ptr.c
+new file mode 100644
+index 0000000000..0c802ab967
+--- /dev/null
++++ b/resolv/tst-resolv-invalid-ptr.c
+@@ -0,0 +1,255 @@
++/* Test handling of invalid T_PTR results (bug 34015).
++ Copyright (C) 2022-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 <array_length.h>
++#include <errno.h>
++#include <netdb.h>
++#include <resolv.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/format_nss.h>
++#include <support/resolv_test.h>
++#include <support/support.h>
++
++/* Name of test, the answer, the expected error return, and if we
++ expect the call to fail. */
++struct item {
++ const char *test;
++ const char *answer;
++ int expected;
++ bool fail;
++};
++
++static const struct item test_items[] =
++ {
++ /* Test for invalid characters. */
++ { "Invalid use of \"|\"",
++ "test.|.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"&\"",
++ "test.&.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \";\"",
++ "test.;.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"<\"",
++ "test.<.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \">\"",
++ "test.>.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"(\"",
++ "test.(.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \")\"",
++ "test.).ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"$\"",
++ "test.$.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"`\"",
++ "test.`.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"\\\"",
++ "test.\\.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"\'\"",
++ "test.'.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"\"\"",
++ "test.\".ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \" \"",
++ "test. .ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"\\t\"",
++ "test.\t.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"\\n\"",
++ "test.\n.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"\\r\"",
++ "test.\r.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"*\"",
++ "test.*.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"?\"",
++ "test.?.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"[\"",
++ "test.[.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"]\"",
++ "test.].ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \",\"",
++ "test.,.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"~\"",
++ "test.~.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \":\"",
++ "test.:.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"!\"",
++ "test.!.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"@\"",
++ "[email protected]", NO_RECOVERY, true },
++ { "Invalid use of \"#\"",
++ "test.#.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"%\"",
++ "test.%%.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of \"^\"",
++ "test.^.ptr.example", NO_RECOVERY, true },
++
++ /* Test for invalid UTF-8 characters (2-byte, 4-byte, 6-byte). */
++ { "Invalid use of UTF-8 (2-byte, U+00C0-U+00C2)",
++ "ÁÂÃ.test.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of UTF-8 (4-byte, U+0750-U+0752)",
++ "ݐݑݒ.test.ptr.example", NO_RECOVERY, true },
++ { "Invalid use of UTF-8 (6-byte, U+0904-U+0906)",
++ "ऄअआ.test.ptr.example", NO_RECOVERY, true },
++
++ /* Test for "-" which may be valid depending on position. */
++ { "Invalid leading \"-\"",
++ "-test.ptr.example", NO_RECOVERY, true },
++ { "Valid trailing \"-\"",
++ "test-.ptr.example", 0, false },
++ { "Valid mid-label use of \"-\"",
++ "te-st.ptr.example", 0, false },
++
++ /* Test for "_" which is always valid in any position. */
++ { "Valid leading use of \"_\"",
++ "_test.ptr.example", 0, false },
++ { "Valid mid-label use of \"_\"",
++ "te_st.ptr.example", 0, false },
++ { "Valid trailing use of \"_\"",
++ "test_.ptr.example", 0, false },
++
++ /* Sanity test the broader set [A-Za-z0-9_-] of valid characters. */
++ { "Valid \"[A-Z]\"",
++ "test.ABCDEFGHIJKLMNOPQRSTUVWXYZ.ptr.example", 0, false },
++ { "Valid \"[a-z]\"",
++ "test.abcdefghijklmnopqrstuvwxyz.ptr.example", 0, false },
++ { "Valid \"[0-9]\"",
++ "test.0123456789.ptr.example", 0, false },
++ { "Valid mixed use of \"[A-Za-z0-9_-]\"",
++ "test.012abcABZ_-.ptr.example", 0, false },
++ };
++
++static void
++response (const struct resolv_response_context *ctx,
++ struct resolv_response_builder *b,
++ const char *qname, uint16_t qclass, uint16_t qtype)
++{
++ TEST_COMPARE (qclass, C_IN);
++
++ /* We only test PTR. */
++ TEST_COMPARE (qtype, T_PTR);
++
++ unsigned int count, count1;
++ char *tail = NULL;
++
++ /* The test implementation can handle up to 255 tests. */
++ if (strstr (qname, "in-addr.arpa") != NULL
++ && sscanf (qname, "%u.%ms", &count, &tail) == 2)
++ TEST_COMPARE_STRING (tail, "0.168.192.in-addr.arpa");
++ else if (sscanf (qname, "%x.%x.%ms", &count, &count1, &tail) == 3)
++ {
++ TEST_COMPARE_STRING (tail, "\
++0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa");
++ count |= count1 << 4;
++ }
++ else
++ FAIL_EXIT1 ("invalid QNAME: %s\n", qname);
++ free (tail);
++
++ /* Cross check. Count has a fixed bound (soft limit). */
++ TEST_VERIFY (count >= 0 && count <= 255);
++
++ /* We have a fixed number of tests (hard limit). */
++ TEST_VERIFY_EXIT (count < array_length (test_items));
++
++ struct resolv_response_flags flags = {};
++ resolv_response_init (b, flags);
++ resolv_response_add_question (b, qname, qclass, qtype);
++ resolv_response_section (b, ns_s_an);
++
++ /* Actual answer record. */
++ resolv_response_open_record (b, qname, qclass, qtype, 60);
++
++ /* Record the answer. */
++ resolv_response_add_name (b, test_items[count].answer);
++ resolv_response_close_record (b);
++}
++
++/* Perform one check using a reverse lookup. */
++static void
++check_reverse (int af, int count)
++{
++ TEST_VERIFY (af == AF_INET || af == AF_INET6);
++ TEST_VERIFY_EXIT (count < array_length (test_items));
++
++ /* Generate an address to query for each test. */
++ char addr[sizeof (struct in6_addr)] = { 0 };
++ socklen_t addrlen;
++ if (af == AF_INET)
++ {
++ addr[0] = (char) 192;
++ addr[1] = (char) 168;
++ addr[2] = (char) 0;
++ addr[3] = (char) count;
++ addrlen = 4;
++ }
++ else
++ {
++ addr[0] = 0x20;
++ addr[1] = 0x01;
++ addr[2] = 0x0d;
++ addr[3] = 0xb8;
++ addr[4] = addr[5] = addr[6] = addr[7] = 0x0;
++ addr[8] = addr[9] = addr[10] = addr[11] = 0x0;
++ addr[12] = 0x0;
++ addr[13] = 0x0;
++ addr[14] = 0x0;
++ addr[15] = (char) count;
++ addrlen = 16;
++ }
++
++ h_errno = 0;
++ struct hostent *answer = gethostbyaddr (addr, addrlen, af);
++
++ /* Verify h_errno is as expected. */
++ TEST_COMPARE (h_errno, test_items[count].expected);
++ if (h_errno != test_items[count].expected)
++ /* And print more information if it's not. */
++ printf ("INFO: %s\n", test_items[count].test);
++
++ if (test_items[count].fail)
++ {
++ /* We expected a failure so verify answer is NULL. */
++ TEST_VERIFY (answer == NULL);
++ /* If it's not NULL we should print out what we received. */
++ if (answer != NULL)
++ printf ("error: unexpected success: %s\n",
++ support_format_hostent (answer));
++ }
++ else
++ /* We don't expect a failure so answer must be valid. */
++ TEST_COMPARE_STRING (answer->h_name, test_items[count].answer);
++}
++
++static int
++do_test (void)
++{
++ struct resolv_test *obj = resolv_test_start
++ ((struct resolv_redirect_config)
++ {
++ .response_callback = response
++ });
++
++ for (int i = 0; i < array_length (test_items); i++)
++ {
++ check_reverse (AF_INET, i);
++ check_reverse (AF_INET6, i);
++ }
++ resolv_test_end (obj);
++
++ return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/resolv/tst-resolv-network.c b/resolv/tst-resolv-network.c
index d9f69649d0..181be80835 100644
--- a/resolv/tst-resolv-network.c
@@ -13585,6 +14946,65 @@ index 9791b339ca..6db9601656 100644
/* Remember that we changed the permission. */
GL(dl_stack_flags) |= PF_X;
+diff --git a/sysdeps/unix/sysv/linux/getlogin_r.c
b/sysdeps/unix/sysv/linux/getlogin_r.c
+index f03ecd4da9..0e66944570 100644
+--- a/sysdeps/unix/sysv/linux/getlogin_r.c
++++ b/sysdeps/unix/sysv/linux/getlogin_r.c
+@@ -37,7 +37,12 @@ __getlogin_r_loginuid (char *name, size_t namesize)
+ {
+ int fd = __open_nocancel ("/proc/self/loginuid", O_RDONLY);
+ if (fd == -1)
+- return -1;
++ {
++ if (errno == ENOENT)
++ /* Trigger utmp fallback. */
++ return -1;
++ return errno;
++ }
+
+ /* We are reading a 32-bit number. 12 bytes are enough for the text
+ representation. If not, something is wrong. */
+@@ -45,6 +50,8 @@ __getlogin_r_loginuid (char *name, size_t namesize)
+ ssize_t n = TEMP_FAILURE_RETRY (__read_nocancel (fd, uidbuf,
+ sizeof (uidbuf)));
+ __close_nocancel_nostatus (fd);
++ if (n < 0)
++ return errno;
+
+ uid_t uid;
+ char *endp;
+@@ -53,12 +60,13 @@ __getlogin_r_loginuid (char *name, size_t namesize)
+ || (uidbuf[n] = '\0',
+ uid = strtoul (uidbuf, &endp, 10),
+ endp == uidbuf || *endp != '\0'))
+- return -1;
++ return EINVAL;
+
+ /* If there is no login uid, linux sets /proc/self/loginid to the sentinel
+ value of, (uid_t) -1, so check if that value is set and return early to
+ avoid making unneeded nss lookups. */
+ if (uid == (uid_t) -1)
++ /* Trigger utmp fallback. */
+ return -1;
+
+ struct passwd pwd;
+@@ -78,9 +86,14 @@ __getlogin_r_loginuid (char *name, size_t namesize)
+ }
+ }
+
+- if (res != 0 || tpwd == NULL)
++ if (res != 0)
++ {
++ result = res;
++ goto out;
++ }
++ if (tpwd == NULL)
+ {
+- result = -1;
++ result = ENOENT;
+ goto out;
+ }
+
diff --git a/sysdeps/unix/sysv/linux/rseq-internal.h
b/sysdeps/unix/sysv/linux/rseq-internal.h
index f89e784243..d2ab4cb829 100644
--- a/sysdeps/unix/sysv/linux/rseq-internal.h
@@ -13608,6 +15028,31 @@ index f89e784243..d2ab4cb829 100644
int ret = INTERNAL_SYSCALL_CALL (rseq, RSEQ_SELF (), size, 0, RSEQ_SIG);
if (!INTERNAL_SYSCALL_ERROR_P (ret))
+diff --git a/sysdeps/unix/sysv/linux/tst-rseq.c
b/sysdeps/unix/sysv/linux/tst-rseq.c
+index 00181cfefb..e83ea2b939 100644
+--- a/sysdeps/unix/sysv/linux/tst-rseq.c
++++ b/sysdeps/unix/sysv/linux/tst-rseq.c
+@@ -48,8 +48,7 @@ do_rseq_main_test (void)
+ size_t rseq_align = MAX (getauxval (AT_RSEQ_ALIGN), RSEQ_MIN_ALIGN);
+ size_t rseq_feature_size = MAX (getauxval (AT_RSEQ_FEATURE_SIZE),
+ RSEQ_AREA_SIZE_INITIAL_USED);
+- size_t rseq_alloc_size = roundup (MAX (rseq_feature_size,
+- RSEQ_AREA_SIZE_INITIAL_USED), rseq_align);
++ size_t rseq_reg_size = MAX (rseq_feature_size, RSEQ_AREA_SIZE_INITIAL);
+ struct rseq *rseq_abi = __thread_pointer () + __rseq_offset;
+
+ TEST_VERIFY_EXIT (rseq_thread_registered ());
+@@ -89,8 +88,8 @@ do_rseq_main_test (void)
+ /* Test a rseq registration with the same arguments as the internal
+ registration which should fail with errno == EBUSY. */
+ TEST_VERIFY (((unsigned long) rseq_abi % rseq_align) == 0);
+- TEST_VERIFY (__rseq_size <= rseq_alloc_size);
+- int ret = syscall (__NR_rseq, rseq_abi, rseq_alloc_size, 0, RSEQ_SIG);
++ TEST_VERIFY (__rseq_size <= rseq_reg_size);
++ int ret = syscall (__NR_rseq, rseq_abi, rseq_reg_size, 0, RSEQ_SIG);
+ TEST_VERIFY (ret != 0);
+ TEST_COMPARE (errno, EBUSY);
+ }
diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile
index 5311b594af..c814060e08 100644
--- a/sysdeps/x86/Makefile
diff --git
a/debian/patches/i386/local-revert-i386-add-GLIBC_ABI_GNU2_TLS-version.diff
b/debian/patches/i386/local-revert-i386-add-GLIBC_ABI_GNU2_TLS-version.diff
deleted file mode 100644
index 0c80c642..00000000
--- a/debian/patches/i386/local-revert-i386-add-GLIBC_ABI_GNU2_TLS-version.diff
+++ /dev/null
@@ -1,62 +0,0 @@
---- a/sysdeps/x86/Makefile
-+++ b/sysdeps/x86/Makefile
-@@ -127,15 +127,6 @@ LDFLAGS-tst-tls23 += -rdynamic
- tst-tls23-mod.so-no-z-defs = yes
-
- $(objpfx)tst-tls23-mod.so: $(libsupport)
--
--tests-special += $(objpfx)check-gnu2-tls.out
--
--$(objpfx)check-gnu2-tls.out: $(common-objpfx)libc.so
-- LC_ALL=C $(READELF) -V -W $< \
-- | sed -ne '/.gnu.version_d/, /.gnu.version_r/ p' \
-- | grep GLIBC_ABI_GNU2_TLS > $@; \
-- $(evaluate-test)
--generated += check-gnu2-tls.out
- endif
-
- ifeq ($(subdir),math)
---- a/sysdeps/x86/Versions
-+++ b/sysdeps/x86/Versions
-@@ -7,9 +7,4 @@ libc {
- GLIBC_2.33 {
- __x86_get_cpuid_feature_leaf;
- }
-- GLIBC_ABI_GNU2_TLS {
-- # This symbol is used only for empty version map and will be removed
-- # by scripts/versions.awk.
-- __placeholder_only_for_empty_version_map;
-- }
- }
---- a/sysdeps/x86_64/Makefile
-+++ b/sysdeps/x86_64/Makefile
-@@ -217,6 +217,15 @@ $(objpfx)check-dt-x86-64-plt.out: $(common-objpfx)libc.so
- | grep GLIBC_ABI_DT_X86_64_PLT > $@; \
- $(evaluate-test)
- generated += check-dt-x86-64-plt.out
-+
-+tests-special += $(objpfx)check-gnu2-tls.out
-+
-+$(objpfx)check-gnu2-tls.out: $(common-objpfx)libc.so
-+ LC_ALL=C $(READELF) -V -W $< \
-+ | sed -ne '/.gnu.version_d/, /.gnu.version_r/ p' \
-+ | grep GLIBC_ABI_GNU2_TLS > $@; \
-+ $(evaluate-test)
-+generated += check-gnu2-tls.out
- endif
-
- test-internal-extras += tst-gnu2-tls2mod1
---- a/sysdeps/x86_64/Versions
-+++ b/sysdeps/x86_64/Versions
-@@ -5,6 +5,11 @@ libc {
- GLIBC_2.13 {
- __fentry__;
- }
-+ GLIBC_ABI_GNU2_TLS {
-+ # This symbol is used only for empty version map and will be removed
-+ # by scripts/versions.awk.
-+ __placeholder_only_for_empty_version_map;
-+ }
- GLIBC_ABI_DT_X86_64_PLT {
- # This symbol is used only for empty version map and will be removed
- # by scripts/versions.awk.
diff --git
a/debian/patches/i386/local-revert-i386-add-GLIBC_ABI_GNU_TLS-version.diff
b/debian/patches/i386/local-revert-i386-add-GLIBC_ABI_GNU_TLS-version.diff
deleted file mode 100644
index 29b51555..00000000
--- a/debian/patches/i386/local-revert-i386-add-GLIBC_ABI_GNU_TLS-version.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/sysdeps/i386/Makefile
-+++ b/sysdeps/i386/Makefile
-@@ -60,15 +60,6 @@ $(objpfx)tst-ld-sse-use.out:
../sysdeps/i386/tst-ld-sse-use.sh $(objpfx)ld.so
- @echo "Checking ld.so for SSE register use. This will take a few
seconds..."
- $(BASH) $< $(objpfx) '$(NM)' '$(OBJDUMP)' '$(READELF)' > $@; \
- $(evaluate-test)
--
--tests-special += $(objpfx)check-gnu-tls.out
--
--$(objpfx)check-gnu-tls.out: $(common-objpfx)libc.so
-- LC_ALL=C $(READELF) -V -W $< \
-- | sed -ne '/.gnu.version_d/, /.gnu.version_r/ p' \
-- | grep GLIBC_ABI_GNU_TLS > $@; \
-- $(evaluate-test)
--generated += check-gnu-tls.out
- else
- CFLAGS-.os += $(if $(filter rtld-%.os,$(@F)), $(rtld-CFLAGS))
- endif
---- a/sysdeps/i386/Versions
-+++ b/sysdeps/i386/Versions
-@@ -28,11 +28,6 @@ libc {
- GLIBC_2.13 {
- __fentry__;
- }
-- GLIBC_ABI_GNU_TLS {
-- # This symbol is used only for empty version map and will be removed
-- # by scripts/versions.awk.
-- __placeholder_only_for_empty_version_map;
-- }
- }
- libm {
- GLIBC_2.1 {
diff --git a/debian/patches/series b/debian/patches/series
index 77c99527..5272d554 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,12 +1,5 @@
git-updates.diff
-# Revert addition of symbol versions used as ABI flags, as the dpkg-shlibdeps
-# version in trixie is not able to handle them (see #1122107)
-i386/local-revert-i386-add-GLIBC_ABI_GNU_TLS-version.diff
-i386/local-revert-i386-add-GLIBC_ABI_GNU2_TLS-version.diff
-amd64/local-revert-x86-64-add-GLIBC_ABI_DT_X86_64_PLT-version.diff
-amd64/local-revert-x86-64-add-GLIBC_ABI_GNU2_TLS-version.diff
-
locale/check-unknown-symbols.diff
locale/locale-print-LANGUAGE.diff
locale/LC_IDENTIFICATION-optional-fields.diff
diff --git a/debian/symbols.wildcards b/debian/symbols.wildcards
index bd012ff9..c98a2e5c 100644
--- a/debian/symbols.wildcards
+++ b/debian/symbols.wildcards
@@ -57,4 +57,7 @@
(symver|optional)GLIBC_2.40 2.40
(symver|optional)GLIBC_2.41 2.41
(symver|optional)GLIBC_ABI_DT_RELR 2.36
+ (symver|optional)GLIBC_ABI_DT_X86_64_PLT 2.41-12+deb13u2
+ (symver|optional)GLIBC_ABI_GNU_TLS 2.41-12+deb13u2
+ (symver|optional)GLIBC_ABI_GNU2_TLS 2.41-12+deb13u2
(symver|optional)GCC_3.0 2.3.6
--- End Message ---