69267b7a87
OBS-URL: https://build.opensuse.org/request/show/423993 OBS-URL: https://build.opensuse.org/package/show/Virtualization:containers/lxcfs?expand=0&rev=6
58 lines
1.4 KiB
Diff
58 lines
1.4 KiB
Diff
From 56ee748c3fd89752a6262471eb49d3b670bb3c09 Mon Sep 17 00:00:00 2001
|
|
From: Serge Hallyn <serge@hallyn.com>
|
|
Date: Sun, 21 Aug 2016 13:26:42 -0500
|
|
Subject: [PATCH 03/24] pam: fix race in cgroup creation
|
|
|
|
If we find that a cgroup already exists, we should
|
|
|
|
1. remove all the cgroups which we've created so far
|
|
2. set existed to true
|
|
3. return failure
|
|
|
|
The caller should then detect that existed == true,
|
|
and re-try with the next index.
|
|
|
|
Signed-off-by: Serge Hallyn <serge@hallyn.com>
|
|
---
|
|
pam/pam_cgfs.c | 12 ++++++------
|
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/pam/pam_cgfs.c b/pam/pam_cgfs.c
|
|
index 08f0694..24510e1 100644
|
|
--- a/pam/pam_cgfs.c
|
|
+++ b/pam/pam_cgfs.c
|
|
@@ -585,7 +585,7 @@ static bool cgfs_create_forone(struct controller *c, uid_t uid, gid_t gid, const
|
|
#if DEBUG
|
|
fprintf(stderr, "%s existed\n", path);
|
|
#endif
|
|
- return true;
|
|
+ return false;
|
|
}
|
|
|
|
bool pass = mkdir_p(c->mount_path, path);
|
|
@@ -794,16 +794,16 @@ static int handle_login(const char *user)
|
|
return PAM_SESSION_ERR;
|
|
}
|
|
|
|
+ existed = false;
|
|
if (!cgfs_create(cg, uid, gid, &existed)) {
|
|
+ if (existed) {
|
|
+ idx++;
|
|
+ continue;
|
|
+ }
|
|
mysyslog(LOG_ERR, "Failed to create a cgroup for user %s\n", user);
|
|
return PAM_SESSION_ERR;
|
|
}
|
|
|
|
- if (existed == 1) {
|
|
- idx++;
|
|
- continue;
|
|
- }
|
|
-
|
|
if (!cgfs_enter(cg, false)) {
|
|
mysyslog(LOG_ERR, "Failed to enter user cgroup %s for user %s\n", cg, user);
|
|
return PAM_SESSION_ERR;
|
|
--
|
|
2.9.3
|
|
|