public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-494] [Ada] sigaction result not properly checked in __gnat_install_handler (QNX)
@ 2022-05-16  8:44 Pierre-Marie de Rodat
  0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2022-05-16  8:44 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:1bdf9fa390282299418e21534674d0ab252e9f34

commit r13-494-g1bdf9fa390282299418e21534674d0ab252e9f34
Author: Joel Brobecker <brobecker@adacore.com>
Date:   Fri Mar 11 03:39:53 2022 +0000

    [Ada] sigaction result not properly checked in __gnat_install_handler (QNX)
    
    The QNX version of __gnat_install_handler calls sigaction for a number
    of signals, and then prints an error message when the the call failed.
    But unfortunately, except for the first call, we forgot to store
    sigaction's return value, so the check that ensues uses a potentially
    uninitialized variable, which the compiler does detect (this is how we
    found this issue).
    
    This change fixes this by make sure we store the result of each
    sigaction call before checking it.
    
    While at it, we noticed a thinko in the error messages all alerting
    about the SIGFPE signal, rather than the signal it just tested.  Most
    likely a copy/paste thinko. Fixed by this change as well.
    
    gcc/ada/
    
            * init.c (__gnat_install_handler) [__QNX__]: Save sigaction's
            return value in err before checking err's value.  Fix incorrect
            signal names in perror messages.

Diff:
---
 gcc/ada/init.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 4615cc152b2..89f16a176d3 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -2625,26 +2625,26 @@ __gnat_install_handler (void)
     }
   }
   if (__gnat_get_interrupt_state (SIGILL) != 's') {
-    sigaction (SIGILL,  &act, NULL);
+    err = sigaction (SIGILL,  &act, NULL);
     if (err == -1) {
       err = errno;
-      perror ("error while attaching SIGFPE");
+      perror ("error while attaching SIGILL");
       perror (strerror (err));
     }
   }
   if (__gnat_get_interrupt_state (SIGSEGV) != 's') {
-    sigaction (SIGSEGV, &act, NULL);
+    err = sigaction (SIGSEGV, &act, NULL);
     if (err == -1) {
       err = errno;
-      perror ("error while attaching SIGFPE");
+      perror ("error while attaching SIGSEGV");
       perror (strerror (err));
     }
   }
   if (__gnat_get_interrupt_state (SIGBUS) != 's') {
-    sigaction (SIGBUS,  &act, NULL);
+    err = sigaction (SIGBUS,  &act, NULL);
     if (err == -1) {
       err = errno;
-      perror ("error while attaching SIGFPE");
+      perror ("error while attaching SIGBUS");
       perror (strerror (err));
     }
   }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-16  8:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-16  8:44 [gcc r13-494] [Ada] sigaction result not properly checked in __gnat_install_handler (QNX) Pierre-Marie de Rodat

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).