[PATCH] alpha: Use the generic nscd_ssize_t

Magnus Lindholm <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
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 <[email protected]>
---
 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.