Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Jan 2001 13:32:43 -0800 (PST)
From:      Ben Jackson <ben@ben.com>
To:        Thomas Zenker <thz@Lennartz-electronic.de>
Cc:        freebsd-stable@FreeBSD.ORG
Subject:   Re: SIGSEGV can be blocked!?
Message-ID:  <200101082132.f08LWhL18526@saturn.home.ben.com>
In-Reply-To: <20010108161854.A3547@mezcal.tue.le> from Thomas Zenker at "Jan 8, 2001 04:18:55 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> Blocking SIGSEGV with sigprocmask does really BLOCK it. 
> I think, this is a bug. I discovered this because I wanted to
> provoke a core dump by a write to (int *)0, but the process got hung,

The instruction that caused the SEGV is going to restart after any handler
runs because the handler may have mapped the page that caused the fault.

On other operating systems you can block SEGV for purposes of asynchronous
signals (ie `kill -SEGV') but not for synchronous signals.  To quote from
the Solaris sigprocmask manpage:

     Signals that  are  generated  synchronously  should  not  be
     masked.  If  such  a  signal  is  blocked and delivered, the
     receiving process is killed.

and indeed a test program shows that you still get SEGV in that case.
You can still shoot yourself in the foot with a SEGV handler that doesn't
eliminate the fault.

--Ben


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200101082132.f08LWhL18526>