pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/50995: sigsegv in recv()



The following reply was made to PR pkg/50995; it has been noted by GNATS.

From: Patrick Welche <prlw1%cam.ac.uk@localhost>
To: Christos Zoulas <christos%zoulas.com@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, pkg-manager%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
	pkgsrc-bugs%netbsd.org@localhost
Subject: Re: pkg/50995: sigsegv in recv()
Date: Wed, 30 Mar 2016 14:43:30 +0100

 On Wed, Mar 23, 2016 at 01:31:49PM -0400, Christos Zoulas wrote:
 > | Program terminated with signal SIGSEGV, Segmentation fault.
 > | #0  BaseSocket::readFromSocket (this=0x7f7f00000001, 
 > |     this@entry=0x7f7fffffd320, buff=buff@entry=0x7f7fffffd25e "", 
 > |     len=len@entry=1, flags=flags@entry=0, timeout=timeout@entry=360, 
 > |     check_first=check_first@entry=true, 
 > |     honour_reloadconfig=honour_reloadconfig@entry=true) at BaseSocket.cpp:476
 > | 
 > | 476                     rc = recv(sck, buff, cnt, flags);
 > | 
 > | Conjecture: another manifestation of the recvfrom returns EAGAIN loop problem.
 > | >How-To-Repeat:
 > 
 > Well, in this case, this=0x7f7f00000001 does not seem right; for one, it should
 > be aligned. Now you are asking this->sck as the first argument of the recv()
 > call, and 
 >  22175      1 dansguardian PSIG  SIGSEGV SIG_DFL: code=SEGV_MAPERR, addr=0x7f7f00000011, trap=6)
 > 
 > Which looks like it dereferencing it and dying before it gets a chance to call
 > recv(). I wonder what's corrupting memory. The socket is coming from the stack
 > so the address of "this" should look a lot like the others, but it looks like
 > it lost it's bottom 32 bits... Perhaps something overwrote that word on the
 > stack with a 0?
 
 In terms of the code (class UDSocket : public BaseSocket):
 
 bool getsock_fromparent(UDSocket &fd)
 {
 ...
         rc = fd.readFromSocket(&buf, 1, 0, 360, true, true);
 
 and here, fd.sck = 256 at address
 (gdb) print &fd
 $6 = (UDSocket *) 0x7f7fffffd320
 (gdb) print &fd.sck
 $4 = (int *) 0x7f7fffffd330
 
 so how
 
 (gdb) print this
 $7 = (BaseSocket * const) 0x7f7f00000001
 
 isn't == 0x7f7fffffd320, I don't know...
 


Home | Main Index | Thread Index | Old Index