mirror of
https://github.com/systemd/systemd.git
synced 2025-08-30 05:49:54 +03:00
Fix SELinux labels in cgroup filesystem root directory (#7496)
When using SELinux with legacy cgroups the tmpfs on /sys/fs/cgroup is by default labelled as tmpfs_t. This label is also inherited by the "cpu" and "cpuacct" symbolic links. Unfortunately the policy expects them to be labelled as cgroup_t, which is used for all the actual cgroup filesystems. Failure to do so results in a stream of denials. This state cannot be fixed reliably when the cgroup filesystem structure is set-up as the SELinux policy is not yet loaded at this moment. It also cannot be fixed later as the root of the cgroup filesystem is remounted read-only. In order to fix it the root of the cgroup filesystem needs to be temporary remounted read-write, relabelled and remounted back read-only.
This commit is contained in:
committed by
Lennart Poettering
parent
949befd3f0
commit
8739f23e3c
@ -390,9 +390,19 @@ int mount_setup(bool loaded_policy) {
|
|||||||
nftw("/dev/shm", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
|
nftw("/dev/shm", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
|
||||||
nftw("/run", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
|
nftw("/run", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
|
||||||
|
|
||||||
|
/* Temporarily remount the root cgroup filesystem to give it a proper label. */
|
||||||
|
r = cg_all_unified();
|
||||||
|
if (r == 0) {
|
||||||
|
(void) mount(NULL, "/sys/fs/cgroup", NULL, MS_REMOUNT, NULL);
|
||||||
|
label_fix("/sys/fs/cgroup", false, false);
|
||||||
|
nftw("/sys/fs/cgroup", nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL);
|
||||||
|
(void) mount(NULL, "/sys/fs/cgroup", NULL, MS_REMOUNT|MS_RDONLY, NULL);
|
||||||
|
} else if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to determine whether we are in all unified mode: %m");
|
||||||
|
|
||||||
after_relabel = now(CLOCK_MONOTONIC);
|
after_relabel = now(CLOCK_MONOTONIC);
|
||||||
|
|
||||||
log_info("Relabelled /dev and /run in %s.",
|
log_info("Relabelled /dev, /run and /sys/fs/cgroup in %s.",
|
||||||
format_timespan(timespan, sizeof(timespan), after_relabel - before_relabel, 0));
|
format_timespan(timespan, sizeof(timespan), after_relabel - before_relabel, 0));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user