revert "backport patch libpam use close_range() to close file descriptors"
This commit is contained in:
parent
371c10c3b3
commit
fb4fb2bb4a
@ -1,134 +0,0 @@
|
||||
From a7b9ffd2eee74ac57b19a8cdf6710e43cd345ded Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Mraz <tmraz@fedoraproject.org>
|
||||
Date: Mon, 12 Oct 2020 09:42:52 +0200
|
||||
Subject: [PATCH] Revert "libpam/pam_modutil_sanitize.c: optimize the way to
|
||||
close fds"
|
||||
|
||||
This reverts commit 1b087edc7f05237bf5eccc405704cd82b848e761.
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/linux-pam/linux-pam/commit/a7b9ffd2eee74ac57b19a8cdf6710e43cd345ded
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
libpam/pam_modutil_sanitize.c | 73 +++++++----------------------------
|
||||
2 files changed, 15 insertions(+), 60 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 0f2b7de7..59327a75 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -530,7 +530,7 @@ dnl Checks for header files.
|
||||
AC_HEADER_DIRENT
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_SYS_WAIT
|
||||
-AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h net/if.h termio.h unistd.h sys/fsuid.h inittypes.h sys/vfs.h linux/magic.h)
|
||||
+AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h net/if.h termio.h unistd.h sys/fsuid.h inittypes.h)
|
||||
|
||||
dnl For module/pam_lastlog
|
||||
AC_CHECK_HEADERS(lastlog.h utmp.h utmpx.h)
|
||||
diff --git a/libpam/pam_modutil_sanitize.c b/libpam/pam_modutil_sanitize.c
|
||||
index 58b9537c..7579c5bd 100644
|
||||
--- a/libpam/pam_modutil_sanitize.c
|
||||
+++ b/libpam/pam_modutil_sanitize.c
|
||||
@@ -10,13 +10,6 @@
|
||||
#include <fcntl.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/resource.h>
|
||||
-#include <dirent.h>
|
||||
-#ifdef HAVE_SYS_VFS_H
|
||||
-#include <sys/vfs.h>
|
||||
-#endif
|
||||
-#ifdef HAVE_LINUX_MAGIC_H
|
||||
-#include <linux/magic.h>
|
||||
-#endif
|
||||
|
||||
/*
|
||||
* Creates a pipe, closes its write end, redirects fd to its read end.
|
||||
@@ -91,69 +84,31 @@ redirect_out(pam_handle_t *pamh, enum pam_modutil_redirect_fd mode,
|
||||
return fd;
|
||||
}
|
||||
|
||||
-/* Check if path is in a procfs. */
|
||||
-static int
|
||||
-is_in_procfs(int fd)
|
||||
-{
|
||||
-#if defined HAVE_SYS_VFS_H && defined PROC_SUPER_MAGIC
|
||||
- struct statfs stfs;
|
||||
-
|
||||
- if (fstatfs(fd, &stfs) == 0) {
|
||||
- if (stfs.f_type == PROC_SUPER_MAGIC)
|
||||
- return 1;
|
||||
- } else {
|
||||
- return 0;
|
||||
- }
|
||||
-#endif /* HAVE_SYS_VFS_H && PROC_SUPER_MAGIC */
|
||||
-
|
||||
- return -1;
|
||||
-}
|
||||
-
|
||||
/* Closes all descriptors after stderr. */
|
||||
static void
|
||||
close_fds(void)
|
||||
{
|
||||
- DIR *dir = NULL;
|
||||
- struct dirent *dent;
|
||||
- int dfd = -1;
|
||||
- int fd;
|
||||
- struct rlimit rlim;
|
||||
-
|
||||
/*
|
||||
* An arbitrary upper limit for the maximum file descriptor number
|
||||
* returned by RLIMIT_NOFILE.
|
||||
*/
|
||||
- const unsigned int MAX_FD_NO = 65535;
|
||||
+ const int MAX_FD_NO = 65535;
|
||||
|
||||
/* The lower limit is the same as for _POSIX_OPEN_MAX. */
|
||||
- const unsigned int MIN_FD_NO = 20;
|
||||
-
|
||||
- /* If /proc is mounted, we can optimize which fd can be closed. */
|
||||
- if ((dir = opendir("/proc/self/fd")) != NULL) {
|
||||
- if ((dfd = dirfd(dir)) >= 0 && is_in_procfs(dfd) > 0) {
|
||||
- while ((dent = readdir(dir)) != NULL) {
|
||||
- fd = atoi(dent->d_name);
|
||||
- if (fd > STDERR_FILENO && fd != dfd)
|
||||
- close(fd);
|
||||
- }
|
||||
- } else {
|
||||
- dfd = -1;
|
||||
- }
|
||||
- closedir(dir);
|
||||
- }
|
||||
+ const int MIN_FD_NO = 20;
|
||||
|
||||
- /* If /proc isn't available, fallback to the previous behavior. */
|
||||
- if (dfd < 0) {
|
||||
- if (getrlimit(RLIMIT_NOFILE, &rlim) || rlim.rlim_max > MAX_FD_NO)
|
||||
- fd = MAX_FD_NO;
|
||||
- else if (rlim.rlim_max < MIN_FD_NO)
|
||||
- fd = MIN_FD_NO;
|
||||
- else
|
||||
- fd = rlim.rlim_max - 1;
|
||||
-
|
||||
- for (; fd > STDERR_FILENO; --fd)
|
||||
- close(fd);
|
||||
- }
|
||||
+ int fd;
|
||||
+ struct rlimit rlim;
|
||||
+
|
||||
+ if (getrlimit(RLIMIT_NOFILE, &rlim) || rlim.rlim_max > MAX_FD_NO)
|
||||
+ fd = MAX_FD_NO;
|
||||
+ else if (rlim.rlim_max < MIN_FD_NO)
|
||||
+ fd = MIN_FD_NO;
|
||||
+ else
|
||||
+ fd = rlim.rlim_max - 1;
|
||||
+
|
||||
+ for (; fd > STDERR_FILENO; --fd)
|
||||
+ close(fd);
|
||||
}
|
||||
|
||||
int
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -1,82 +0,0 @@
|
||||
From d6103b30050554d7b6ca6d55cb5b4ed3c9516663 Mon Sep 17 00:00:00 2001
|
||||
From: Iker Pedrosa <ipedrosa@redhat.com>
|
||||
Date: Wed, 25 Oct 2023 09:46:15 +0200
|
||||
Subject: [PATCH] libpam: use close_range() to close file descriptors
|
||||
|
||||
* configure.ac: check whether close_range() is available in the system.
|
||||
* libpam/pam_modutil_sanitize.c: use close_range() to close all file
|
||||
descriptors. If the interface isn't available use the previous
|
||||
approach.
|
||||
|
||||
Link: https://github.com/linux-pam/linux-pam/pull/276
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-5099
|
||||
|
||||
Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
|
||||
|
||||
Conflict:Context adaptation in configure.ac
|
||||
Reference:https://github.com/linux-pam/linux-pam/commit/d6103b30050554d7b6ca6d55cb5b4ed3c9516663
|
||||
|
||||
---
|
||||
configure.ac | 1 +
|
||||
libpam/pam_modutil_sanitize.c | 19 +++++++++++++++++--
|
||||
2 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 39124d87..b6a8d6fb 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -638,5 +638,6 @@ AC_CHECK_FUNCS(quotactl)
|
||||
AC_CHECK_FUNCS(unshare)
|
||||
AC_CHECK_FUNCS([ruserok_af ruserok], [break])
|
||||
+AC_CHECK_FUNCS(close_range)
|
||||
BACKUP_LIBS=$LIBS
|
||||
LIBS="$LIBS -lutil"
|
||||
AC_CHECK_FUNCS([logwtmp])
|
||||
diff --git a/libpam/pam_modutil_sanitize.c b/libpam/pam_modutil_sanitize.c
|
||||
index f26e8ec0..1b8af743 100644
|
||||
--- a/libpam/pam_modutil_sanitize.c
|
||||
+++ b/libpam/pam_modutil_sanitize.c
|
||||
@@ -11,6 +11,10 @@
|
||||
#include <syslog.h>
|
||||
#include <sys/resource.h>
|
||||
|
||||
+#ifndef CLOSE_RANGE_UNSHARE
|
||||
+#define CLOSE_RANGE_UNSHARE (1U << 1)
|
||||
+#endif /* CLOSE_RANGE_UNSHARE */
|
||||
+
|
||||
/*
|
||||
* Creates a pipe, closes its write end, redirects fd to its read end.
|
||||
* Returns fd on success, -1 otherwise.
|
||||
@@ -84,9 +88,8 @@ redirect_out(pam_handle_t *pamh, enum pam_modutil_redirect_fd mode,
|
||||
return fd;
|
||||
}
|
||||
|
||||
-/* Closes all descriptors after stderr. */
|
||||
static void
|
||||
-close_fds(void)
|
||||
+close_fds_iteratively(void)
|
||||
{
|
||||
/*
|
||||
* An arbitrary upper limit for the maximum file descriptor number
|
||||
@@ -111,6 +114,18 @@ close_fds(void)
|
||||
close(fd);
|
||||
}
|
||||
|
||||
+/* Closes all descriptors after stderr. */
|
||||
+static void
|
||||
+close_fds(void)
|
||||
+{
|
||||
+#ifdef HAVE_CLOSE_RANGE
|
||||
+ if (close_range(STDERR_FILENO+1, -1U, CLOSE_RANGE_UNSHARE) == 0)
|
||||
+ return;
|
||||
+#endif /* HAVE_CLOSE_RANGE */
|
||||
+
|
||||
+ close_fds_iteratively();
|
||||
+}
|
||||
+
|
||||
int
|
||||
pam_modutil_sanitize_helper_fds(pam_handle_t *pamh,
|
||||
enum pam_modutil_redirect_fd stdin_mode,
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -1,36 +0,0 @@
|
||||
From 930200f240a50dcb84d8e3a5f0c33159b6c4309c Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Mraz <tmraz@fedoraproject.org>
|
||||
Date: Mon, 12 Oct 2020 10:15:09 +0200
|
||||
Subject: [PATCH] pam_modutil_sanitize_fds: Add explicit casts to avoid
|
||||
warnings
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/linux-pam/linux-pam/commit/930200f240a50dcb84d8e3a5f0c33159b6c4309c
|
||||
|
||||
---
|
||||
libpam/pam_modutil_sanitize.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libpam/pam_modutil_sanitize.c b/libpam/pam_modutil_sanitize.c
|
||||
index 7579c5bd..f26e8ec0 100644
|
||||
--- a/libpam/pam_modutil_sanitize.c
|
||||
+++ b/libpam/pam_modutil_sanitize.c
|
||||
@@ -100,12 +100,12 @@ close_fds(void)
|
||||
int fd;
|
||||
struct rlimit rlim;
|
||||
|
||||
- if (getrlimit(RLIMIT_NOFILE, &rlim) || rlim.rlim_max > MAX_FD_NO)
|
||||
+ if (getrlimit(RLIMIT_NOFILE, &rlim) || rlim.rlim_max > (rlim_t)MAX_FD_NO)
|
||||
fd = MAX_FD_NO;
|
||||
- else if (rlim.rlim_max < MIN_FD_NO)
|
||||
+ else if (rlim.rlim_max < (rlim_t)MIN_FD_NO)
|
||||
fd = MIN_FD_NO;
|
||||
else
|
||||
- fd = rlim.rlim_max - 1;
|
||||
+ fd = (int)rlim.rlim_max - 1;
|
||||
|
||||
for (; fd > STDERR_FILENO; --fd)
|
||||
close(fd);
|
||||
--
|
||||
2.33.0
|
||||
|
||||
8
pam.spec
8
pam.spec
@ -4,7 +4,7 @@
|
||||
%define _pamconfdir %{_sysconfdir}/pam.d
|
||||
Name: pam
|
||||
Version: 1.4.0
|
||||
Release: 14
|
||||
Release: 15
|
||||
Summary: Pluggable Authentication Modules for Linux
|
||||
License: BSD and GPLv2+
|
||||
URL: http://www.linux-pam.org/
|
||||
@ -41,9 +41,6 @@ Patch6008: backport-Permit-unix_chkpwd-pam_unix.so-to-run-without-being-setuid-r
|
||||
Patch6009: backport-pam_unix-workaround-the-problem-caused-by-libnss_sys.patch
|
||||
Patch6010: backport-CVE-2024-10041.patch
|
||||
Patch6011: backport-CVE-2024-10041-pam_unix-try-to-set-uid-to-0-for-unix_chkpwd.patch
|
||||
Patch6012: backport-Revert-libpam-pam_modutil_sanitize.c-optimize-the-wa.patch
|
||||
Patch6013: backport-pam_modutil_sanitize_fds-Add-explicit-casts-to-avoid.patch
|
||||
Patch6014: backport-libpam-use-close_range-to-close-file-descriptors.patch
|
||||
|
||||
Patch9000: add-sm3-crypt-support.patch
|
||||
|
||||
@ -198,6 +195,9 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Apr 03 2025 hugel <gengqihu2@h-partners.com> - 1.4.0-15
|
||||
- revert "backport patch libpam use close_range() to close file descriptors"
|
||||
|
||||
* Mon Mar 24 2025 hugel <gengqihu2@h-partners.com> - 1.4.0-14
|
||||
- backport patch libpam use close_range() to close file descriptors
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user