dynamic-user: don't use a UID that currently owns IPC objects (#6962)
This fixes a mostly theoretical potential security hole: if for some reason we failed to remove IPC objects created for a dynamic user (maybe because a MAC/SElinux erronously prohibited), then we should not hand out the same UID again until they are successfully removed. With this commit we'll enumerate the IPC objects currently existing, and step away from using a UID for the dynamic UID logic if there are any matching it.
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
03d4358277
commit
98e4fcec36
@@ -21,6 +21,7 @@
|
||||
#include <pwd.h>
|
||||
#include <sys/file.h>
|
||||
|
||||
#include "clean-ipc.h"
|
||||
#include "dynamic-user.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
@@ -294,7 +295,9 @@ static int pick_uid(char **suggested_paths, const char *name, uid_t *ret_uid) {
|
||||
}
|
||||
|
||||
/* Some superficial check whether this UID/GID might already be taken by some static user */
|
||||
if (getpwuid(candidate) || getgrgid((gid_t) candidate)) {
|
||||
if (getpwuid(candidate) ||
|
||||
getgrgid((gid_t) candidate) ||
|
||||
search_ipc(candidate, (gid_t) candidate) != 0) {
|
||||
(void) unlink(lock_path);
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user