Re: [PATCH v2] nscd: Define nscd_ssize_t as int32_t unconditionally

Adhemerval Zanella Netto <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Organization Linaro
Message-ID <[email protected]>

On 10/08/26 12:49, Magnus Lindholm wrote:
> alpha was the only target that overrode sysdeps/generic/nscd-types.h,
> defining nscd_ssize_t as int64_t rather than int32_t. The file dated back
> to the initial import and had 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.
> 
> With alpha gone there is no target left overriding the type, so the sysdeps
> indirection has no purpose. Delete both headers and define nscd_ssize_t
> directly in nscd/nscd-client.h alongside the wire format it describes.
> 
> 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]>

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <[email protected]>

> ---
> v1: https://inbox.sourceware.org/libc-alpha/[email protected]/
> v2: also delete sysdeps/generic/nscd-types.h and define nscd_ssize_t
>     directly in nscd/nscd-client.h, per review. Retitled accordingly.
> 
>  nscd/nscd-client.h           |  4 +++-
>  sysdeps/alpha/nscd-types.h   | 21 ---------------------
>  sysdeps/generic/nscd-types.h | 21 ---------------------
>  3 files changed, 3 insertions(+), 43 deletions(-)
>  delete mode 100644 sysdeps/alpha/nscd-types.h
>  delete mode 100644 sysdeps/generic/nscd-types.h
> 
> diff --git a/nscd/nscd-client.h b/nscd/nscd-client.h
> index 0906de2929..33d275f898 100644
> --- a/nscd/nscd-client.h
> +++ b/nscd/nscd-client.h
> @@ -27,10 +27,12 @@
>  #include <time.h>
>  #include <sys/types.h>
>  #include <atomic.h>
> -#include <nscd-types.h>
>  #include <sys/uio.h>
>  
>  
> +/* Type for the size of a record in the data part of a database.  */
> +typedef int32_t nscd_ssize_t;
> +
>  /* Version number of the daemon interface */
>  #define NSCD_VERSION 2
>  
> 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;
> diff --git a/sysdeps/generic/nscd-types.h b/sysdeps/generic/nscd-types.h
> deleted file mode 100644
> index f196175ec3..0000000000
> --- a/sysdeps/generic/nscd-types.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/* Types for the NSCD implementation.  Generic 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 int32_t nscd_ssize_t;
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.