[LTP] [PATCH v3 0/2] mount03: Convert to new API
Petr Vorel
pvorel@suse.cz
Tue Aug 16 08:57:34 CEST 2022
Hi Xu,
> >> Why here is nobody_gid?
> >>> + SAFE_SETGID(nobody_gid);
> >>> + SAFE_SETREUID(-1, nobody_uid);
> >> What problem do you meet?
> > Using original code SAFE_SETREUID(nobody_uid, nobody_gid);
> > causes mount03_setuid_test to fail (exit 1).
> > The same code is in creat08.c, creat09.c, open10.c.
> > Did I answer your question?
> I look mount03_setuid_test code today, nosuid mount option should
> expect setuid failed when using a non-privileged user even this program
> has set-user-id bit.
> Old api also think PASS when mount03_setuid_test exit 1
Ah, thanks for catching my error!
> So I think you should use SAFE_SETREUID(nobody_uid, nobody_uid);
> and then use code as below:
> if (WIFEXITED(status)) {
> switch (WEXITSTATUS(status)) {
> case EXIT_FAILURE:
> tst_res(TPASS, "%s passed", TESTBIN);
> return;
> case EXIT_SUCCESS:
> tst_res(TFAIL, "%s failed", TESTBIN);
> return;
> default:
> case TBROK:
> break;
> }
I guess we can drop the default and TBROK part, right?
It's caught later by tst_brk(TBROK, ...)
> }
https://github.com/pevik/ltp/blob/22652d668a5ccbf3c7aa835c2dab6d0eb6058ba2/testcases/kernel/syscalls/mount/mount03.c#L74-L105
static void test_nosuid(void)
{
pid_t pid;
int status;
struct stat st;
SAFE_CP(TESTBIN, BIN_PATH);
SAFE_STAT(BIN_PATH, &st);
if (st.st_mode != SUID_MODE)
SAFE_CHMOD(BIN_PATH, SUID_MODE);
pid = SAFE_FORK();
if (!pid) {
SAFE_SETREUID(nobody_uid, nobody_uid);
SAFE_EXECL(BIN_PATH, TESTBIN, NULL);
}
SAFE_WAITPID(pid, &status, 0);
if (WIFEXITED(status)) {
switch (WEXITSTATUS(status)) {
case EXIT_FAILURE:
tst_res(TPASS, "%s passed", TESTBIN);
return;
case EXIT_SUCCESS:
tst_res(TFAIL, "%s failed", TESTBIN);
return;
}
}
tst_brk(TBROK, "Child %s", tst_strstatus(status));
}
Kind regards,
Petr
> Best Regards
> Yang Xu
More information about the ltp
mailing list