[PATCH] Fix endless loop in nss_dns getnetbyname [BZ #17630]

Siddhesh Poyarekar siddhesh@redhat.com
Tue Dec 16 09:45:00 GMT 2014


On Mon, Dec 15, 2014 at 05:44:34PM +0100, Florian Weimer wrote:
> The outer loop never advanced the alias pointer in case of a parse error.  I
> think this patch restores the original intent, but I'm not sure.
> 
> Tested on x86_64-redhat-linux-gnu.
> 
> I have requested CVE assignment on oss-security.
> 
> -- 
> Florian Weimer / Red Hat Product Security

> From ac3dc70d931d9eb427085e67514a6dbef7142902 Mon Sep 17 00:00:00 2001
> From: Florian Weimer <fweimer@redhat.com>
> Date: Mon, 15 Dec 2014 17:41:13 +0100
> Subject: [PATCH] Avoid infinite loop in nss_dns getnetbyname [BZ #17630]
> 
> 2014-12-15  Florian Weimer  <fweimer@redhat.com>
> 
> 	[BZ #17630]
> 	* resolv/nss_dns/dns-network.c (getanswer_r): Iterate over alias
> 	names.
> 

Looks good to me.

Siddhesh

> diff --git a/NEWS b/NEWS
> index a324c10..39f326e 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -13,8 +13,8 @@ Version 2.21
>    15884, 16469, 16617, 16619, 16657, 16740, 16857, 17192, 17266, 17344,
>    17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508,
>    17522, 17555, 17570, 17571, 17572, 17573, 17574, 17581, 17582, 17583,
> -  17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17633, 17634,
> -  17647, 17653, 17664, 17665, 17668, 17682.
> +  17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633,
> +  17634, 17647, 17653, 17664, 17665, 17668, 17682.
>  
>  * CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
>    under certain input conditions resulting in the execution of a shell for
> @@ -25,6 +25,9 @@ Version 2.21
>  * CVE-2012-3406 printf-style functions could run into a stack overflow when
>    processing format strings with a large number of format specifiers.
>  
> +* The nss_dns implementation of getnetbyname could run into an infinite loop
> +  if the DNS response contained a PTR record of an unexpected format.
> +
>  * The minimum GCC version that can be used to build this version of the GNU
>    C Library is GCC 4.6.  Older GCC versions, and non-GNU compilers, can
>    still be used to compile programs using the GNU C Library.
> diff --git a/resolv/nss_dns/dns-network.c b/resolv/nss_dns/dns-network.c
> index 0a77c8b..08cf0a6 100644
> --- a/resolv/nss_dns/dns-network.c
> +++ b/resolv/nss_dns/dns-network.c
> @@ -398,8 +398,8 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
>  
>  	case BYNAME:
>  	  {
> -	    char **ap = result->n_aliases++;
> -	    while (*ap != NULL)
> +	    char **ap;
> +	    for (ap = result->n_aliases; *ap != NULL; ++ap)
>  	      {
>  		/* Check each alias name for being of the forms:
>  		   4.3.2.1.in-addr.arpa		= net 1.2.3.4
> -- 
> 2.1.0
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20141216/793e1565/attachment.sig>


More information about the Libc-alpha mailing list