[PATCH v2] nss: remove undefined behavior and optimize getaddrinfo

Maciej W. Rozycki macro@orcam.me.uk
Mon May 5 02:06:36 GMT 2025


On Mon, 28 Apr 2025, Collin Funk wrote:

> diff --git a/nss/getaddrinfo.c b/nss/getaddrinfo.c
> index efe6ad30d5..1e38a8d87e 100644
> --- a/nss/getaddrinfo.c
> +++ b/nss/getaddrinfo.c
> @@ -1658,7 +1645,7 @@ rfc3484_sort (const void *p1, const void *p2, void *arg)
>  	  in_addr_t netmask1 = 0xffffffffu << (32 - a1->prefixlen);
>  
>  	  if ((in1_src_addr & netmask1) == (in1_dst_addr & netmask1))
> -	    bit1 = fls (in1_dst_addr ^ in1_src_addr);
> +            bit1 = stdc_leading_zeros (in1_dst_addr ^ in1_src_addr);

 This uses spaces rather than tabs for indentation, please fix.

> @@ -1669,7 +1656,7 @@ rfc3484_sort (const void *p1, const void *p2, void *arg)
>  	  in_addr_t netmask2 = 0xffffffffu << (32 - a2->prefixlen);
>  
>  	  if ((in2_src_addr & netmask2) == (in2_dst_addr & netmask2))
> -	    bit2 = fls (in2_dst_addr ^ in2_src_addr);
> +            bit2 = stdc_leading_zeros (in2_dst_addr ^ in2_src_addr);

 Likewise.

> @@ -1696,10 +1683,12 @@ rfc3484_sort (const void *p1, const void *p2, void *arg)
>  
>  	  if (i < 4)
>  	    {
> -	      bit1 = fls (ntohl (in1_dst->sin6_addr.s6_addr32[i]
> -				 ^ in1_src->sin6_addr.s6_addr32[i]));
> -	      bit2 = fls (ntohl (in2_dst->sin6_addr.s6_addr32[i]
> -				 ^ in2_src->sin6_addr.s6_addr32[i]));
> +              uint32_t set_bits1 = (in1_dst->sin6_addr.s6_addr32[i]
> +                                    ^ in1_src->sin6_addr.s6_addr32[i]);
> +              uint32_t set_bits2 = (in2_dst->sin6_addr.s6_addr32[i]
> +                                    ^ in2_src->sin6_addr.s6_addr32[i]);
> +              bit1 = stdc_leading_zeros (ntohl (set_bits1));
> +              bit2 = stdc_leading_zeros (ntohl (set_bits2));

 Likewise.

  Maciej


More information about the Libc-alpha mailing list