diff --git a/Fix-pid-wrapping-in-sss_cli_check_socket.patch b/Fix-pid-wrapping-in-sss_cli_check_socket.patch new file mode 100644 index 0000000..5ccec57 --- /dev/null +++ b/Fix-pid-wrapping-in-sss_cli_check_socket.patch @@ -0,0 +1,38 @@ +diff -Naur sssd-2.8.2/src/sss_client/common.c sssd-2.8.2-b/src/sss_client/common.c +--- sssd-2.8.2/src/sss_client/common.c 2023-03-09 14:58:11.000000000 +0800 ++++ sssd-2.8.2-b/src/sss_client/common.c 2023-03-09 15:02:20.000000000 +0800 +@@ -664,21 +664,28 @@ + int timeout) + { + static pid_t mypid; +- struct stat mysb; ++ static struct stat selfsb; ++ struct stat mypid_sb, myself_sb; + int mysd; + int ret; + +- if (getpid() != mypid) { +- ret = fstat(sss_cli_sd, &mysb); ++ ret = lstat("/proc/self/", &myself_sb); ++ ++ if (getpid() != mypid || (ret == 0 && myself_sb.st_ino != selfsb.st_ino)) { ++ ret = fstat(sss_cli_sd, &mypid_sb); + if (ret == 0) { +- if (S_ISSOCK(mysb.st_mode) && +- mysb.st_dev == sss_cli_sb.st_dev && +- mysb.st_ino == sss_cli_sb.st_ino) { ++ if (S_ISSOCK(mypid_sb.st_mode) && ++ mypid_sb.st_dev == sss_cli_sb.st_dev && ++ mypid_sb.st_ino == sss_cli_sb.st_ino) { + sss_cli_close_socket(); + } + } + sss_cli_sd = -1; + mypid = getpid(); ++ ret = lstat("/proc/self/", &selfsb); ++ if (ret) { ++ memset(&selfsb, 0, sizeof(selfsb)); ++ } + } + + /* check if the socket has been closed on the other side */ diff --git a/sssd.spec b/sssd.spec index 0155210..f0d3304 100644 --- a/sssd.spec +++ b/sssd.spec @@ -7,6 +7,7 @@ URL: https://pagure.io/SSSD/sssd/ Source0: https://github.com/SSSD/sssd/releases/download/%{version}/%{name}-%{version}.tar.gz Patch6000: MONITOR-fix-socket_activated-flag-initialization.patch +Patch6001: Fix-pid-wrapping-in-sss_cli_check_socket.patch Requires: python3-sssd = %{version}-%{release} Requires: libldb