1 Star 0 Fork 46

ExtinctFire/sssd

forked from src-openEuler/sssd 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Fix-pid-wrapping-in-sss_cli_check_socket.patch 1.41 KB
一键复制 编辑 原始数据 按行查看 历史
jixiang 提交于 2023-03-09 15:06 +08:00 . fix pid wrapping in sss_cli_check_socket
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 */
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/extinctfire/sssd.git
git@gitee.com:extinctfire/sssd.git
extinctfire
sssd
sssd
master

搜索帮助