]> granicus.if.org Git - sudo/commitdiff
Add missing sigsetjmp() call in I/O plugin open function.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 27 Dec 2010 16:24:47 +0000 (11:24 -0500)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Mon, 27 Dec 2010 16:24:47 +0000 (11:24 -0500)
Fixes a crash when the I/O plugin calls error(), errorx() or log_error().

plugins/sudoers/iolog.c

index 98a642b056e5e3c9d39af377270d958f99ca5d89..554fef9fa56245a31b2c92402bf9b8866d6f88f0 100644 (file)
@@ -44,6 +44,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <signal.h>
+#include <setjmp.h>
 #include <pwd.h>
 #include <grp.h>
 #ifdef HAVE_ZLIB_H
@@ -52,6 +53,9 @@
 
 #include "sudoers.h"
 
+/* plugin_error.c */
+extern sigjmp_buf error_jmp;
+
 union io_fd {
     FILE *f;
 #ifdef HAVE_ZLIB_H
@@ -260,6 +264,11 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
     if (argc == 0)
        return TRUE;
 
+    if (sigsetjmp(error_jmp, 1)) {
+       /* called via error(), errorx() or log_error() */
+       return -1;
+    }
+
     /*
      * Pull iolog settings out of command_info, if any.
      */