|
 |
8d663c |
From 049e5728ad3e8b48c521467fb7c3f98fb073ab54 Mon Sep 17 00:00:00 2001
|
|
 |
8d663c |
From: Flos Qi Guo <qguo@redhat.com>
|
|
 |
8d663c |
Date: Fri, 26 Nov 2021 03:32:11 +0000
|
|
 |
8d663c |
Subject: [PATCH] Avoid allocating huge arrays by maxing the fd number to
|
|
 |
8d663c |
MAX_CLOSE_FD
|
|
 |
8d663c |
|
|
 |
8d663c |
- Partially backport patch from rhbz#1723106
|
|
 |
8d663c |
|
|
 |
8d663c |
diff --git a/src/database.c b/src/database.c
|
|
 |
8d663c |
index e1ec309..73da572 100644
|
|
 |
8d663c |
--- a/src/database.c
|
|
 |
8d663c |
+++ b/src/database.c
|
|
 |
8d663c |
@@ -47,9 +47,6 @@
|
|
 |
8d663c |
#include "globals.h"
|
|
 |
8d663c |
#include "pathnames.h"
|
|
 |
8d663c |
|
|
 |
8d663c |
-#define TMAX(a,b) ((a)>(b)?(a):(b))
|
|
 |
8d663c |
-#define TMIN(a,b) ((a)<(b)?(a):(b))
|
|
 |
8d663c |
-
|
|
 |
8d663c |
/* size of the event structure, not counting name */
|
|
 |
8d663c |
#define EVENT_SIZE (sizeof (struct inotify_event))
|
|
 |
8d663c |
|
|
 |
8d663c |
diff --git a/src/macros.h b/src/macros.h
|
|
 |
8d663c |
index 6c7ca6d..238012a 100644
|
|
 |
8d663c |
--- a/src/macros.h
|
|
 |
8d663c |
+++ b/src/macros.h
|
|
 |
8d663c |
@@ -58,6 +58,7 @@
|
|
 |
8d663c |
#define MAX_UNAME 256 /* max length of username */
|
|
 |
8d663c |
#define ROOT_UID 0 /* don't change this, it really must be root */
|
|
 |
8d663c |
#define ROOT_USER "root" /* ditto */
|
|
 |
8d663c |
+#define MAX_CLOSE_FD 10000 /* max fd num to close when spawning a child process */
|
|
 |
8d663c |
|
|
 |
8d663c |
/* NOTE: these correspond to DebugFlagNames,
|
|
 |
8d663c |
* defined below.
|
|
 |
8d663c |
@@ -126,6 +127,9 @@
|
|
 |
8d663c |
#define LAST_DOW 7
|
|
 |
8d663c |
#define DOW_COUNT (LAST_DOW - FIRST_DOW + 1)
|
|
 |
8d663c |
|
|
 |
8d663c |
+#define TMAX(a,b) ((a)>(b)?(a):(b))
|
|
 |
8d663c |
+#define TMIN(a,b) ((a)<(b)?(a):(b))
|
|
 |
8d663c |
+
|
|
 |
8d663c |
/*
|
|
 |
8d663c |
* Because crontab/at files may be owned by their respective users we
|
|
 |
8d663c |
* take extreme care in opening them. If the OS lacks the O_NOFOLLOW
|
|
 |
8d663c |
diff --git a/src/popen.c b/src/popen.c
|
|
 |
8d663c |
index aa36ff7..6262d8c 100644
|
|
 |
8d663c |
--- a/src/popen.c
|
|
 |
8d663c |
+++ b/src/popen.c
|
|
 |
8d663c |
@@ -80,12 +80,19 @@ FILE *cron_popen(char *program, const char *type, struct passwd *pw) {
|
|
 |
8d663c |
if (!pids) {
|
|
 |
8d663c |
if ((fds = getdtablesize()) <= 0)
|
|
 |
8d663c |
return (NULL);
|
|
 |
8d663c |
+ if (fds > MAX_CLOSE_FD)
|
|
 |
8d663c |
+ fds = MAX_CLOSE_FD; /* avoid allocating too much memory */
|
|
 |
8d663c |
if (!(pids = (PID_T *) malloc((u_int) (fds * sizeof (PID_T)))))
|
|
 |
8d663c |
return (NULL);
|
|
 |
8d663c |
- memset((char *) pids, 0, fds * sizeof (PID_T));
|
|
 |
8d663c |
+ memset((char *) pids, 0, (u_int)(fds * sizeof (PID_T)));
|
|
 |
8d663c |
}
|
|
 |
8d663c |
if (pipe(pdes) < 0)
|
|
 |
8d663c |
return (NULL);
|
|
 |
8d663c |
+ if (pdes[0] >= fds || pdes[1] >= fds) {
|
|
 |
8d663c |
+ (void) close(pdes[0]);
|
|
 |
8d663c |
+ (void) close(pdes[1]);
|
|
 |
8d663c |
+ return NULL;
|
|
 |
8d663c |
+ }
|
|
 |
8d663c |
|
|
 |
8d663c |
/* break up string into pieces */
|
|
 |
8d663c |
for (argc = 0, cp = program; argc < MAX_ARGS; cp = NULL)
|