Skip to contentSkip to conversation

Bug in uClibc-0.9.33.2 resolv.c

Buildroot Markus Königshaus 2 participants 2 messages Mar 28, 2013

lore
Share & tools
lore
#0 lore raw

Hello,

I have found a bug in resolv.c in conjunction with the function
res_init: res_init sets __ res_sync to res_sync_func and then calls __res_vinit.
-> __res_vinit calls __ open_nameservers.
In __open_nameservers __nameserver and __nameservers are set by the contents of resolv.conf. So far so good.
-> __open_nameserver calls res_sync_func

         In res_sync_func__nameservers is set to rp->nscount, what is 0.

Backin _res_vinit rp->nscount is set to __nameservers then, what is 0. So the cat bites its own tail.

Attached is a simple patch, that fixes the problemby setting __res_sync after calling __res_vinit.

Before this patch with busybox "nslookup www.google.de" ->

nslookup: can not resolve '(null)': Name or service not known

Name: www.google.de
Address 1: 2a00: 1450:4016:800 :: 101f muc03s01-in-x1f.1e100.net Address 2: 173.194.35.151 muc03s01-in-f23.1e100.net Address 3: 173.194.35.159 muc03s01-in-f31.1e100.net Address 4: 173.194.35.152 muc03s01-in-f24.1e100.net

After the patch "nslookup www.google.de" ->

nslookup www.google.de
Server: 8.8.8.8
Address 1: 8.8.8.8 google-public-dns-a.google.com

Name: www.google.de
Address 1: 2a00: 1450:4016:803 :: 1018 muc03s08-in-x18.1e100.net Address 2: 173.194.44.56 muc03s08-in-f24.1e100.net Address 3: 173.194.44.55 muc03s08-in-f23.1e100.net Address 4: 173.194.44.63 muc03s08-in-f31.1e100.net

This patch ist tested with buildroot-02.13.

Regards, Markus

-- Unsere Aussagen koennen Irrtuemer und Missverstaendnisse enthalten.
Bitte pruefen Sie die Aussagen fuer Ihren Fall, bevor Sie Entscheidungen
auf Grundlage dieser Aussagen treffen.
Wiesemann & Theis GmbH, Porschestr. 12, D-42279 Wuppertal
Geschaeftsfuehrer: Dipl.-Ing. Ruediger Theis
Registergericht: Amtsgericht Wuppertal, HRB 6377
Tel. +49-202/2680-0, Fax +49-202/2680-265, http://www.wut.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: uClibc-0.9.33.2-resolv_c.patch
Type: text/x-patch
Size: 559 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130328/5f80aa6c/attachment.bin>

#1 lore raw

Dear Markus K?nigshaus,

Quoted 7 lines · Markus K?nigshaus

I have found a bug in resolv.c in conjunction with the function
res_init: res_init sets __ res_sync to res_sync_func and then calls __res_vinit.
-> __res_vinit calls __ open_nameservers.
In __open_nameservers __nameserver and __nameservers are set by the contents of resolv.conf. So far so good.
-> __open_nameserver calls res_sync_func

Quoted 6 lines
         In res_sync_func__nameservers is set to rp->nscount, what is 0.

Backin _res_vinit rp->nscount is set to __nameservers then, what is 0. So the cat bites its own tail.

Attached is a simple patch, that fixes the problemby setting __res_sync after calling __res_vinit.

Thanks Markus for this patch. However, this is the mailing list for Buildroot, so we're not the one responsible for taking such patches. You should instead get in touch with the uClibc community, that has its own mailing list: http://uclibc.org/lists.html.

Best regards,

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com