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-28 11:25:28.000000000 +0800 +++ sssd-2.8.2-b/src/sss_client/common.c 2023-03-28 11:26:09.000000000 +0800 @@ -663,22 +663,27 @@ const char *socket_name, int timeout) { - static pid_t mypid; - struct stat mysb; + static pid_t mypid_s; + static ino_t myself_ino; + struct stat mypid_sb, myself_sb; + pid_t mypid_d; int mysd; int ret; - if (getpid() != mypid) { - ret = fstat(sss_cli_sd, &mysb); + ret = lstat("/proc/self/", &myself_sb); + mypid_d = getpid(); + if (mypid_d != mypid_s || (ret == 0 && myself_sb.st_ino != myself_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(); + mypid_s = mypid_d; + myself_ino = myself_sb.st_ino; } /* check if the socket has been closed on the other side */