40 lines
1.6 KiB
Diff
40 lines
1.6 KiB
Diff
From f470dafddcd688c3ea6031d4bbcbf934fd094711 Mon Sep 17 00:00:00 2001
|
|
From: Daan De Meyer <daan.j.demeyer@gmail.com>
|
|
Date: Fri, 25 Aug 2023 13:55:36 +0200
|
|
Subject: [PATCH] Limit rlim_max in rlimit_nofile_safe() to nr_open
|
|
|
|
We might inherit a max rlim value that's larger than the kernel's
|
|
maximum (nr_open). This will cause setrlimit() to fail as the given
|
|
maximum is larger than the kernel's maximum. To get around this,
|
|
let's limit the max rlim we pass to rlimit() to the value of nr_open.
|
|
|
|
Should fix #28965
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/systemd/systemd-stable/commit/f470dafddcd688c3ea6031d4bbcbf934fd094711
|
|
|
|
---
|
|
src/basic/rlimit-util.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c
|
|
index 91424cd3cc..a0ffb24626 100644
|
|
--- a/src/basic/rlimit-util.c
|
|
+++ b/src/basic/rlimit-util.c
|
|
@@ -401,7 +401,11 @@ int rlimit_nofile_safe(void) {
|
|
if (rl.rlim_cur <= FD_SETSIZE)
|
|
return 0;
|
|
|
|
- rl.rlim_cur = FD_SETSIZE;
|
|
+ /* So we might have inherited a hard limit that's larger than the kernel's maximum limit as stored in
|
|
+ * /proc/sys/fs/nr_open. If we pass this hard limit unmodified to setrlimit(), we'll get EPERM. To
|
|
+ * make sure that doesn't happen, let's limit our hard limit to the value from nr_open. */
|
|
+ rl.rlim_max = MIN(rl.rlim_max, (rlim_t) read_nr_open());
|
|
+ rl.rlim_cur = MIN((rlim_t) FD_SETSIZE, rl.rlim_max);
|
|
if (setrlimit(RLIMIT_NOFILE, &rl) < 0)
|
|
return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", rl.rlim_cur);
|
|
|
|
--
|
|
2.39.1
|
|
|