a weird crash in ngx_http_core_run_phases()
YongFeng Wu
ywu at about.com
Thu Mar 21 15:35:32 UTC 2013
Hi,
Sometimes we got weird segmentation fault crashes in
ngx_http_core_rewrite_phase():
(gdb) bt
#0 0x0000000801c17a00 in ?? ()
#1 0x0000000814c7ca10 in ?? ()
#2 0x0000000809453600 in ?? ()
#3 0x000000000044715e in ngx_http_core_rewrite_phase (r=0x80fbf6150,
ph=0xfffffffffffffffb) at src/http/ngx_http_core_module.c:931
#4 0x0000000000440c65 in ngx_http_core_run_phases (r=0x801c17a00) at
src/http/ngx_http_core_module.c:877
#5 0x0000000000440e1c in ngx_http_handler (r=0x801c17a00) at
src/http/ngx_http_core_module.c:860
#6 0x0000000000459620 in ngx_http_process_request (r=0x801c17a00) at
src/http/ngx_http_request.c:1687
#7 0x000000000045a97e in ngx_http_process_request_headers (rev=Variable
"rev" is not available.
) at src/http/ngx_http_request.c:1135
#8 0x000000000045b2e7 in ngx_http_process_request_line (rev=0x801d4d380) at
src/http/ngx_http_request.c:933
#9 0x0000000000454a69 in ngx_http_init_request (rev=0x801d4d380) at
src/http/ngx_http_request.c:519
#10 0x000000000042c249 in ngx_event_process_posted (cycle=0x801c6e050,
posted=0x818488) at src/event/ngx_event_posted.c:41
#11 0x000000000042b84d in ngx_process_events_and_timers (cycle=0x801c6e050)
at src/event/ngx_event.c:1376
#12 0x0000000000436429 in ngx_worker_process_cycle (cycle=0x801c6e050,
data=Variable "data" is not available.
) at src/os/unix/ngx_process_cycle.c:963
#13 0x0000000000434bb7 in ngx_spawn_process (cycle=0x801c6e050,
proc=0x436330 <ngx_worker_process_cycle>, data=0x18,
name=0x4d9987 "worker process", respawn=-3) at
src/os/unix/ngx_process.c:209
#14 0x00000000004358e8 in ngx_start_worker_processes (cycle=0x801c6e050,
n=32, type=-3) at src/os/unix/ngx_process_cycle.c:409
#15 0x00000000004371c3 in ngx_master_process_cycle (cycle=0x801c6e050) at
src/os/unix/ngx_process_cycle.c:150
#16 0x00000000004078ff in main (argc=350832656, argv=Variable "argv" is not
available.
) at src/core/nginx.c:504
(gdb)
It's weird because the address of "r" was mysteriously changed from
<0x801c17a00> in ngx_http_core_run_phases to <0x80fbf6150> in
ngx_http_core_rewrite_phase. This new address is, of course, an invalid
request struct, hence the invalid r->phase_handler and
&ph[r->phase_handler].
The value of r->phase_handler in ngx_http_core_run_phases() is 0, so
ngx_http_core_rewrite_phase is the first phase hander to be called.
Try to check the address of "*r" get the following:
(gdb) f 3
#3 0x000000000044715e in ngx_http_core_rewrite_phase (r=0x80fbf6150,
ph=0xfffffffffffffffb) at src/http/ngx_http_core_module.c:931
956 in src/http/ngx_http_core_module.c
(gdb) p &r
Address requested for identifier "r" which is in register $rbx
(gdb) p $rbx
$9 = 34623938896
Anybody have any ideas? We use FreeBSD 9.1, nginx_1.2.6
Thanks a lot,
Yong
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20130321/4cd5032c/attachment.html>
More information about the nginx-devel
mailing list