[PATCH] alpha: Use the generic nscd_ssize_t

Magnus Lindholm linmag7@gmail.com
Mon Aug 10 09:32:10 GMT 2026


alpha is the only target that overrides sysdeps/generic/nscd-types.h,
defining nscd_ssize_t as int64_t rather than int32_t. The file dates back
to the initial import and has only ever received licence and copyright
updates.

nscd's response headers are a wire format, shared between the daemon and
its clients through a socket and through the persistent cache. A 64-bit
nscd_ssize_t gives four of them 8-byte alignment while their last member is
32 bits, so they acquire four bytes of tail padding: hst_response_header,
ai_response_header, serv_response_header and innetgroup_response_header.

For the hosts cache that is fatal. cache_addhst() asserts that the string
data follows the header with no gap, and on alpha it does not:

  nscd: hstcache.c:269: cache_addhst: Assertion
    `(char *) (&dataset->resp.error + 1) == dataset->strdata' failed.

The daemon aborts, and nscd/tst-nscd-basic fails with 58 errors. With the
override removed it passes.

The padding is also never initialised. cache_addhst() assigns the header
fields individually and nothing clears the record, yet the response is sent
with writeall (fd, &dataset->resp, ...) covering the full
sizeof (hst_response_header), so four uninitialised bytes reach every
client.

Delete the override so that alpha uses the generic 32-bit type like every
other target, which removes the padding from all four headers. This changes
nscd's protocol and persistent cache layout on alpha; the daemon and its
clients always come from the same build, so the exposure is a daemon left
running or a cache file left behind across the upgrade.

Signed-off-by: Magnus Lindholm <linmag7@gmail.com>
---
 sysdeps/alpha/nscd-types.h | 21 ---------------------
 1 file changed, 21 deletions(-)
 delete mode 100644 sysdeps/alpha/nscd-types.h

diff --git a/sysdeps/alpha/nscd-types.h b/sysdeps/alpha/nscd-types.h
deleted file mode 100644
index 1b7ab74a41..0000000000
--- a/sysdeps/alpha/nscd-types.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Types for the NSCD implementation.  Alpha version.
-   Copyright (c) 2000-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 <stdint.h>
-
-typedef int64_t nscd_ssize_t;
-- 
2.55.0



More information about the Libc-alpha mailing list