Since stipping S_SIGID should check S_IXGRP, so umask it to check whether works well. Signed-off-by: Yang Xu <xuyang2018.jy@xxxxxxxxxxx> --- src/idmapped-mounts/idmapped-mounts.c | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/idmapped-mounts/idmapped-mounts.c b/src/idmapped-mounts/idmapped-mounts.c index d2638c64..d6769f08 100644 --- a/src/idmapped-mounts/idmapped-mounts.c +++ b/src/idmapped-mounts/idmapped-mounts.c @@ -8031,6 +8031,27 @@ out: return fret; } +static int setgid_create_umask(void) +{ + pid_t pid; + + umask(S_IXGRP); + pid = fork(); + if (pid < 0) + die("failure: fork"); + + if (pid == 0) { + if (setgid_create()) + die("failure: setgid"); + exit(EXIT_SUCCESS); + } + + if (wait_for_pid(pid)) + return -1; + else + return 0; +} + static int setgid_create_idmapped(void) { int fret = -1; @@ -8157,6 +8178,27 @@ out: return fret; } +static int setgid_create_idmapped_umask(void) +{ + pid_t pid; + + umask(S_IXGRP); + pid = fork(); + if (pid < 0) + die("failure: fork"); + + if (pid == 0) { + if (setgid_create_idmapped()) + die("failure: setgid"); + exit(EXIT_SUCCESS); + } + + if (wait_for_pid(pid)) + return -1; + else + return 0; +} + static int setgid_create_idmapped_in_userns(void) { int fret = -1; @@ -8492,6 +8534,27 @@ out: return fret; } +static int setgid_create_idmapped_in_userns_umask(void) +{ + pid_t pid; + + umask(S_IXGRP); + pid = fork(); + if (pid < 0) + die("failure: fork"); + + if (pid == 0) { + if (setgid_create_idmapped_in_userns()) + die("failure: setgid"); + exit(EXIT_SUCCESS); + } + + if (wait_for_pid(pid)) + return -1; + else + return 0; +} + #define PTR_TO_INT(p) ((int)((intptr_t)(p))) #define INT_TO_PTR(u) ((void *)((intptr_t)(u))) @@ -14100,8 +14163,11 @@ struct t_idmapped_mounts t_setattr_fix_968219708108[] = { struct t_idmapped_mounts t_setgid[] = { { setgid_create, false, "create operations in directories with setgid bit set", }, + { setgid_create_umask, false, "create operations in directories with setgid bit set by umask(S_IXGRP)", }, { setgid_create_idmapped, true, "create operations in directories with setgid bit set on idmapped mounts", }, + { setgid_create_idmapped_umask, true, "create operations in directories with setgid bit set on idmapped mounts by umask(S_IXGRP)", }, { setgid_create_idmapped_in_userns, true, "create operations in directories with setgid bit set on idmapped mounts in user namespace", }, + { setgid_create_idmapped_in_userns_umask, true, "create operations in directories with setgid bit set on idmapped mounts in user namespace by umask(S_IXGRP)", }, }; static bool run_test(struct t_idmapped_mounts suite[], size_t suite_size) -- 2.27.0