nginx-0.8.34 with GeoIP enabled segfaulting

Maxim Dounin mdounin на mdounin.ru
Ср Апр 7 03:09:06 MSD 2010


Hello!

On Tue, Apr 06, 2010 at 01:06:38PM +0300, Vladimir Getmanshchuk wrote:

[...]

> (gdb) fr 0
> #0  0x0000000800b66447 in _GeoIP_seek_record (gi=0x80141d0a0,
> ipnum=3232261218) at GeoIP.c:635
> 635     in GeoIP.c
> (gdb) p *gi
> $1 = {GeoIPDatabase = 0x80133f700, file_path = 0x80144b040
> "/usr/local/www/conf/nginx/GeoIP.dat", cache = 0x801502000 "\\\001",
> index_cache = 0x0, databaseSegments = 0x80144c0ac,
>   databaseType = 1 '\001', mtime = 1269938756, flags = 1, size = 959538,
> record_length = 3 '\003', charset = 0, record_iter = -1515870811, netmask =
> -1515870811, last_mtime_check = 1270548268}
> (gdb) p buf
> $2 = (const unsigned char *) 0x8074f6600 <Address 0x8074f6600 out of bounds>
> (gdb) p stack_buffer
> $3 = "═пA\001\b\000\000"
> (gdb) p depth
> $4 = 29

Судя по всему - битая база.  Оно тупо выбирается по своим же 
оффсетам за границы своей же памяти, после чего и получает по 
рукам. Обновление до свежей версии GeoIP.dat с сайта помогает?

Ну и выложите куда-нибудь ваш GeoIP.dat для полноты картины.  
Желательно огласив md5 от него, чтобы случайно не добить по 
дороге.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru