Bug in uClibc-0.9.33.2 resolv.c
Hello,
I have found a bug in resolv.c in conjunction with the functionres_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>
Dear Markus K?nigshaus,
Quoted 7 lines · Markus K?nigshaus
I have found a bug in
resolv.cin conjunction with the functionres_init:res_initsets __res_synctores_sync_funcand then calls__res_vinit.
->__res_vinitcalls __open_nameservers.
In__open_nameservers__nameserverand__nameserversare set by the contents of resolv.conf. So far so good.
->__open_nameservercallsres_sync_func
Quoted 6 lines
In res_sync_func__nameservers is set to rp->nscount, what is 0.Backin
_res_vinitrp->nscountis set to__nameserversthen, what is 0. So the cat bites its own tail.Attached is a simple patch, that fixes the problemby setting
__res_syncafter 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