mirror of
https://github.com/Cisco-Talos/clamav.git
synced 2026-05-06 22:55:49 -04:00
don't ignore SIGBUS, SIGFPE, SIGILL, and SIGSEGV.
POSIX says the behaviour is undefined if they are ignored. (on HP-UX behaviour was: hang) make BIGSTACK the default on HPUX git-svn: trunk@3593
This commit is contained in:
@@ -1,3 +1,11 @@
|
||||
Thu Feb 7 22:30:51 EET 2008 (edwin)
|
||||
------------------------------------
|
||||
* clamd: (bb #803)
|
||||
* don't ignore SIGBUS, SIGFPE, SIGILL, and SIGSEGV.
|
||||
POSIX says the behaviour is undefined if they are ignored.
|
||||
(on HP-UX behaviour was: hang)
|
||||
* make BIGSTACK the default on HPUX
|
||||
|
||||
Wed Feb 6 21:30:55 CET 2008 (tk)
|
||||
---------------------------------
|
||||
* libclamav/regex_list.c: compatibility with new matcher extension
|
||||
|
||||
@@ -78,7 +78,14 @@ void *clamukoth(void *arg)
|
||||
/* ignore all signals except SIGUSR1 */
|
||||
sigfillset(&sigset);
|
||||
sigdelset(&sigset, SIGUSR1);
|
||||
/* The behavior of a process is undefined after it ignores a
|
||||
* SIGFPE, SIGILL, SIGSEGV, or SIGBUS signal */
|
||||
sigdelset(&sigset, SIGFPE);
|
||||
sigdelset(&sigset, SIGILL);
|
||||
sigdelset(&sigset, SIGSEGV);
|
||||
#ifdef SIGBUS
|
||||
sigdelset(&sigset, SIGBUS);
|
||||
#endif
|
||||
pthread_sigmask(SIG_SETMASK, &sigset, NULL);
|
||||
act.sa_handler = clamuko_exit;
|
||||
sigfillset(&(act.sa_mask));
|
||||
|
||||
@@ -95,6 +95,14 @@ static void scanner_thread(void *arg)
|
||||
#ifndef C_WINDOWS
|
||||
/* ignore all signals */
|
||||
sigfillset(&sigset);
|
||||
/* The behavior of a process is undefined after it ignores a
|
||||
* SIGFPE, SIGILL, SIGSEGV, or SIGBUS signal */
|
||||
sigdelset(&sigset, SIGFPE);
|
||||
sigdelset(&sigset, SIGILL);
|
||||
sigdelset(&sigset, SIGSEGV);
|
||||
#ifdef SIGBUS
|
||||
sigdelset(&sigset, SIGBUS);
|
||||
#endif
|
||||
pthread_sigmask(SIG_SETMASK, &sigset, NULL);
|
||||
#endif
|
||||
|
||||
@@ -280,10 +288,6 @@ int acceptloop_th(int *socketds, int nsockets, struct cl_engine *engine, unsigne
|
||||
pid_t mainpid;
|
||||
int idletimeout;
|
||||
|
||||
#if defined(C_BIGSTACK) || defined(C_BSD)
|
||||
size_t stacksize;
|
||||
#endif
|
||||
|
||||
#ifdef CLAMUKO
|
||||
pthread_t clamuko_pid;
|
||||
pthread_attr_t clamuko_attr;
|
||||
@@ -481,8 +485,16 @@ int acceptloop_th(int *socketds, int nsockets, struct cl_engine *engine, unsigne
|
||||
sigdelset(&sigset, SIGHUP);
|
||||
sigdelset(&sigset, SIGPIPE);
|
||||
sigdelset(&sigset, SIGUSR2);
|
||||
/* The behavior of a process is undefined after it ignores a
|
||||
* SIGFPE, SIGILL, SIGSEGV, or SIGBUS signal */
|
||||
sigdelset(&sigset, SIGFPE);
|
||||
sigdelset(&sigset, SIGILL);
|
||||
sigdelset(&sigset, SIGSEGV);
|
||||
#ifdef SIGBUS
|
||||
sigdelset(&sigset, SIGBUS);
|
||||
#endif
|
||||
sigprocmask(SIG_SETMASK, &sigset, NULL);
|
||||
|
||||
|
||||
/* SIGINT, SIGTERM, SIGSEGV */
|
||||
sigact.sa_handler = sighandler_th;
|
||||
sigemptyset(&sigact.sa_mask);
|
||||
|
||||
@@ -34,6 +34,11 @@
|
||||
#define FALSE (0)
|
||||
#define TRUE (1)
|
||||
|
||||
/* BSD and HP-UX need a bigger stacksize than the system default */
|
||||
#if defined (C_BSD) || defined (C_HPUX)
|
||||
#define C_BIGSTACK 1
|
||||
#endif
|
||||
|
||||
static work_queue_t *work_queue_new(void)
|
||||
{
|
||||
work_queue_t *work_q;
|
||||
@@ -133,7 +138,7 @@ void thrmgr_destroy(threadpool_t *threadpool)
|
||||
threadpool_t *thrmgr_new(int max_threads, int idle_timeout, void (*handler)(void *))
|
||||
{
|
||||
threadpool_t *threadpool;
|
||||
#if defined(C_BIGSTACK) || defined(C_BSD)
|
||||
#if defined(C_BIGSTACK)
|
||||
size_t stacksize;
|
||||
#endif
|
||||
|
||||
@@ -182,7 +187,7 @@ threadpool_t *thrmgr_new(int max_threads, int idle_timeout, void (*handler)(void
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if defined(C_BIGSTACK) || defined(C_BSD)
|
||||
#if defined(C_BIGSTACK)
|
||||
pthread_attr_getstacksize(&(threadpool->pool_attr), &stacksize);
|
||||
stacksize = stacksize + 64 * 1024;
|
||||
if (stacksize < 1048576) stacksize = 1048576; /* at least 1MB please */
|
||||
|
||||
Reference in New Issue
Block a user