On Wed, May 27, 2020 at 12:43:26PM +0800, Xi Ruoyao wrote:
>
> If SIGFPE is somehow masked by sigprocmask, this phenomenon would happen. The
> SIGFPE raised by raise() will be masked, but the SIGFPE produced by 1/0 is
> still
> undefined behavior (on x86_64 Linux normally "as if" a SIGFPE is received).
>
> And, the signal mask set with sigprocmask is inherited during fork() and
> preserved during exec(). So if your shell or init process masked SIGFPE for
> some reason (intentionally or mistakenly) this will happen.
>
> Try to examine the signal mask:
>
> #include <stdio.h>
> #include <signal.h>
>
> int main()
> {
> sigset_t ss;
> sigprocmask(SIG_BLOCK, NULL, &ss);
> if (sigismember(&ss, SIGFPE))
> puts("oops! SIGFPE is masked!");
> else
> puts("SIGFPE is not masked.");
> return 0;
> }
Thanks, but no joy:
ken@plexi ~ $./sigmask
SIGFPE is not masked.
I had found mentions of masking the signal before I first asked, and
it seemed to me that some C code would be needed to do that, not
something I could accidentally cause by anything in my bash setup.
I'm using bash and sysvinit, with the book's instructions. So
thanks for giving me a way to confirm that this is not a symptom of
a vulnerability :)
More generally, yes, I do make variations and particularly I drop
debug info (old habit, my systems try to be small and backed up -
it's the backup space that is the problem). When I first noticed
this a bit over two years ago, I think I was using CFLAGS of -O2 or
perhaps -O2 -march=native. After last year I moved on my main
desktop machines to -O3 and -march=native.
When the -O0 override in glibc errored, I changed that to -O1 (still
with -march=native). Tests on bash still showed the SIGFPE falure,
but I suspect I need to boot the system to properly test it.
Unfortunately it locked up overnight (fairly common on that box) so
I have not yet got to that stage.
Just to be clear, at the moment I'm only trying to detune glibc.
I'm starting to wonder if -march=native might be implicated, but the
machine where this originated, and where I ran the sigmask check, is
a haswell which ought to be common enough for -march=native to not
do anything weird.
Of course, if it was an arm then raising sigfpe is known to be
unreliable. But it ought to be reliable on x86_64 unless there is
some weird code in either glibc or the kernel which might fail if
some kernel config option is deselected.
(Still thinking aloud).
ĸen
--
Do you not know that, what you belittle by the name tree is but the
mere four-dimensional analogue of a whole multidimensional universe
which - no, I can see you do not. -- Druellae (a Dryad)
--
http://lists.linuxfromscratch.org/listinfo/lfs-support
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page
Do not top post on this list.
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing in e-mail?
http://en.wikipedia.org/wiki/Posting_style