diff --git a/include/linux/uidgid.h b/include/linux/uidgid.h index b0542cd11aeb09f5d0c979e1acf31ad8d550bb6d..120ef9f71914ccf2c21773a2ec4b4bad3a6ef94a 100644 --- a/include/linux/uidgid.h +++ b/include/linux/uidgid.h @@ -55,6 +55,10 @@ static inline gid_t __kgid_val(kgid_t gid) #define GLOBAL_ROOT_UID KUIDT_INIT(0) #define GLOBAL_ROOT_GID KGIDT_INIT(0) +#ifdef CONFIG_HYPERHOLD +#define GLOBAL_MEMMGR_UID KUIDT_INIT(1111) +#endif + #define INVALID_UID KUIDT_INIT(-1) #define INVALID_GID KGIDT_INIT(-1) diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c index 9f5221653f80c979ac77dfd57801c5b8ac4fb2f7..d9f8a464b7f4b9e8416bac5ae3d4c8c471434076 100644 --- a/kernel/cgroup/cgroup-v1.c +++ b/kernel/cgroup/cgroup-v1.c @@ -511,7 +511,12 @@ static ssize_t __cgroup1_procs_write(struct kernfs_open_file *of, */ cred = of->file->f_cred; tcred = get_task_cred(task); +#ifdef CONFIG_HYPERHOLD + if (!uid_eq(cred->euid, GLOBAL_MEMMGR_UID) && + !uid_eq(cred->euid, GLOBAL_ROOT_UID) && +#else if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) && +#endif !uid_eq(cred->euid, tcred->uid) && !uid_eq(cred->euid, tcred->suid)) ret = -EACCES;