[Bug 1062167] Re: Segfault in __libc_res_nquerydomain
Joern Heissler
percona at joern.heissler.de
Sun Oct 7 16:34:52 UTC 2012
The real case how I stumbled over it:
* my PHP application calls geoip_record_by_name with NULL as argument (although it expects a string)
* the PHP GeoIP module converts NULL into an allocated empty string
* libGeoIP is called with "" as hostname. Sometimes, the byte directly preceding the empty string is the dot (.). Must be related to how PHP allocates memory.
* libGeoIP calls the gethostbyname_r function or similar which in turn calls above broken function.
* strncpy overwrites my call stack, making debugging complicated, and then segfaults :-(
I can't think of any common real world example where it might trigger,
and my situation is my own fault :-)
It's probably not too easy to trigger it in other situations. One way would be a program which stores the hostname on the stack and e.g. the port number directly before. Or maybe a Big Endian machine using malloc. I think the bytes before the then-empty string are not zeros as on my amd64.
In such a situation, $ program "" 11822 might result in a segfault.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to eglibc in Ubuntu.
https://bugs.launchpad.net/bugs/1062167
Title:
Segfault in __libc_res_nquerydomain
Status in “eglibc” package in Ubuntu:
Triaged
Bug description:
Ubuntu 12.04 contains a bug in the eglibc (libc6) package.
It was introduced here:
http://www.eglibc.org/cgi-bin/viewvc.cgi/trunk/libc/resolv/res_query.c?r1=13759&r2=14662
glibc commit 28b59fca7ae3cfc2d57e0007aaa3793d4b775e97
And fixed here:
http://www.eglibc.org/cgi-bin/viewvc.cgi/trunk/libc/resolv/res_query.c?r1=15869&r2=17385
glibc commit 8fdceb2efda8cf724cfc4444af86b5f135ad3172
Reproduce:
#include <netdb.h>
int main(void)
{
gethostbyname("." + 1);
}
I believe that the patch is correct.
Can you please apply it to 12.04?
$ lsb_release -rd
Description: Ubuntu 12.04 LTS
Release: 12.04
$ apt-cache policy libc6
libc6:
Installed: 2.15-0ubuntu10.2
Candidate: 2.15-0ubuntu10.2
Version table:
*** 2.15-0ubuntu10.2 0
500 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
100 /var/lib/dpkg/status
2.15-0ubuntu10 0
500 http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
> What you expected to happen
Not a segfault but maybe an error code.
> What happened instead
Segfault.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1062167/+subscriptions
More information about the foundations-bugs
mailing list