From: Andrew Deason Date: Tue, 14 Jul 2009 16:29:01 +0000 (-0500) Subject: Ignore SIGSYS when issuing pioctl syscall X-Git-Tag: openafs-devel-1_5_61~106 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=4f36dd089a9c7187f94f77516a486245c057f7f4;p=packages%2Fo%2Fopenafs.git Ignore SIGSYS when issuing pioctl syscall Ignore SIGSYS when we issue the pioctl syscall, so we don't dump core when the kernel module hasn't yet been installed on several platforms. Also, restore the old SIGSYS signal handler afterwards, so we don't cause any side-effects. Reviewed-on: http://gerrit.openafs.org/81 Verified-by: Andrew Deason Verified-by: Derrick Brashear Reviewed-by: Russ Allbery --- diff --git a/src/sys/pioctl.c b/src/sys/pioctl.c index 1df62ad39..b1d64e5f9 100644 --- a/src/sys/pioctl.c +++ b/src/sys/pioctl.c @@ -16,6 +16,7 @@ #include #include +#include #include #if defined(AFS_SUN_ENV) && !defined(AFS_SUN5_ENV) @@ -48,10 +49,10 @@ int lpioctl(char *path, int cmd, char *cmarg, int follow) { int errcode, rval; -#if defined(AFS_FBSD_ENV) +#ifndef AFS_LINUX20_ENV /* As kauth/user.c says, handle smoothly the case where no AFS system call - * exists (yet). Why don't more platforms have trouble here? Matt */ - sig_t old = (int (*)())signal(SIGSYS, SIG_IGN); + * exists (yet). */ + sig_t old = signal(SIGSYS, SIG_IGN); #endif #if defined(AFS_LINUX20_ENV) @@ -70,6 +71,10 @@ lpioctl(char *path, int cmd, char *cmarg, int follow) errcode = syscall(AFS_SYSCALL, AFSCALL_PIOCTL, path, cmd, cmarg, follow); #endif +#ifndef AFS_LINUX20_ENV + signal(SIGSYS, old); +#endif + return (errcode); }