You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Greg Ames <gr...@remulak.net> on 2001/03/14 19:21:31 UTC

Re: check_hostalias/server_addr_rec segfault (segfault type #4)

Cliff Woolley wrote:
> 
> httpd.core.7 is another new kind of segfault, caused by a null server_addr_rec
> pointer:
> 

/usr/local/apache2/corefiles/httpd.core.16 is more of the same:

(gdb) frame 0
#0  check_hostalias (r=0x81ca03c) at vhost.c:891
891             if (sar->host_port != 0 && port != sar->host_port) {
(gdb) list 888
883
884         for (src = r->connection->vhost_lookup_data; src; src =
src->next) {
885             server_addr_rec *sar;
886
887             /* We only consider addresses on the name_chain which
have a matching
888              * port
889              */
890             sar = src->sar;
891             if (sar->host_port != 0 && port != sar->host_port) {
892                 continue;
(gdb) p (name_chain)r->connection->vhost_lookup_data
$1 = {next = 0x8163f14, sar = 0x813003c, server = 0x813005c}
(gdb) p *((name_chain)r->connection->vhost_lookup_data).sar
$2 = {next = 0x813000c, host_addr = 0xb, host_port = 92,
  virthost = 0x813009c "\f"}
(gdb) p *src
$3 = {next = 0x80b107c, sar = 0x0, server = 0x80b5d54}
(gdb) p src
$4 = (name_chain *) 0x810f064 

Looks like the very first sar on the chain is already bogus.  The r
looks fine, and so does r->headers_in.  I suspect the vhost chain got
clobbered by a previous request, and this request is an innocent
victim.  

Since this seg fault is infrequent and there is some evidence of
overlaid memory in the more frequent assert dumps, Plan A is to ignore
this symptom and hope it goes away once we fix the more frequent
errors.  Plan B is to stick some debug code in the tail end of request
processing which verifies that the vhost lookup structures are still
intact before going on to the next requst.

Greg