This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 2/4] resolv: fix nsaddr_list array indexing
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Siddhesh Poyarekar <siddhesh at redhat dot com>
- Cc: Aurelien Jarno <aurelien at aurel32 dot net>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Tue, 6 Jan 2015 08:39:00 -0800
- Subject: Re: [PATCH 2/4] resolv: fix nsaddr_list array indexing
- Authentication-results: sourceware.org; auth=none
- References: <1402673533-13243-1-git-send-email-aurelien at aurel32 dot net> <1402673533-13243-3-git-send-email-aurelien at aurel32 dot net> <20140620025659 dot GU7238 at spoyarek dot pnq dot redhat dot com>
On Thu, Jun 19, 2014 at 7:56 PM, Siddhesh Poyarekar <siddhesh@redhat.com> wrote:
> On Fri, Jun 13, 2014 at 05:32:11PM +0200, Aurelien Jarno wrote:
>> This commit is basically a revert of commits 6f5c3117 and 16b7dc27.
>> Those commits changed the indexing of nsaddr_list array when reading
>> resolv.conf, with the goal to simplify the mapping between the
>> nsaddr_list and nsaddrs, by making sure we don't have any name server at
>> the same both arrays. However the code in __libc_res_nsend hasn't been
>> updated, and still assume that all nsaddr_list entries are located at
>> the beginning of the array, without any gap. This causes some issues
>> when IPv6 name servers are in use.
>>
>> 2014-06-13 Aurelien Jarno <aurelien@aurel32.net>
>>
>> [BZ #17053]
>> * resolv/res_init.c (__res_vinit): Fill in IPv4 name server
>> information using the nserv index. Only count IPv4 name servers
>> in statp->nscount.
>
> Looks good to me.
>
> Siddhesh
>
>>
>> diff --git a/resolv/res_init.c b/resolv/res_init.c
>> index bdec4d9..37004ab 100644
>> --- a/resolv/res_init.c
>> +++ b/resolv/res_init.c
>> @@ -308,9 +308,9 @@ __res_vinit(res_state statp, int preinit) {
>> cp++;
>> if ((*cp != '\0') && (*cp != '\n')
>> && __inet_aton(cp, &a)) {
>> - statp->nsaddr_list[nservall].sin_addr = a;
>> - statp->nsaddr_list[nservall].sin_family = AF_INET;
>> - statp->nsaddr_list[nservall].sin_port =
>> + statp->nsaddr_list[nserv].sin_addr = a;
>> + statp->nsaddr_list[nserv].sin_family = AF_INET;
>> + statp->nsaddr_list[nserv].sin_port =
>> htons(NAMESERVER_PORT);
>> nserv++;
>> #ifdef _LIBC
>> @@ -414,7 +414,7 @@ __res_vinit(res_state statp, int preinit) {
>> continue;
>> }
>> }
>> - statp->nscount = nservall;
>> + statp->nscount = nserv;
>> #ifdef _LIBC
>> if (nservall - nserv > 0) {
>> statp->_u._ext.nscount6 = nservall - nserv;
>> --
>> 2.0.0
>>
There is a concern:
https://lists.debian.org/debian-glibc/2014/08/msg00068.html
--
H.J.