From: Richard Palethorpe <rpalethorpe@suse.de>
To: "xuyang2018.jy@fujitsu.com" <xuyang2018.jy@fujitsu.com>
Cc: "ltp@lists.linux.it" <ltp@lists.linux.it>
Subject: Re: [LTP] [PATCH v4 1/1] mount03: Convert to new API
Date: Tue, 18 Oct 2022 09:44:45 +0100 [thread overview]
Message-ID: <87fsflmsdx.fsf@suse.de> (raw)
In-Reply-To: <8305046c-8a3d-fe6d-f587-67e8b2c172b5@fujitsu.com>
Hello,
"xuyang2018.jy@fujitsu.com" <xuyang2018.jy@fujitsu.com> writes:
> Hi Richard, Petr
>
>>
>> "xuyang2018.jy@fujitsu.com" <xuyang2018.jy@fujitsu.com> writes:
>>
>>> Hi Petr
>>>
>>>> Hi all,
>>>>
>>>> when running in loop, I sometimes still get error:
>>>>
>>>> i=0; while true; do i=$((i+1)); echo "== $i =="; ./mount03 || break; done
>>>> ...
>>>> === 100 ===
>>>> ...
>>>> tst_device.c:434: TINFO: No device is mounted at mntpoint
>>>> tst_test.c:1599: TINFO: Testing on ext4
>>>> tst_test.c:1065: TINFO: Formatting /dev/loop0 with ext4 opts='' extra opts=''
>>>> mke2fs 1.46.5 (30-Dec-2021)
>>>> mount03.c:150: TINFO: Testing flag MS_RDONLY
>>>> mount03.c:48: TPASS: otfd = open(file, O_CREAT | O_RDWR, 0700) : EROFS (30)
>>>> mount03.c:150: TINFO: Testing flag MS_NODEV
>>>> mount03.c:153: TFAIL: mount(tst_device->dev, MNTPOINT, tst_device->fs_type, tc->flag, NULL) failed: EINVAL (22)
>>>> mount03.c:150: TINFO: Testing flag MS_NOEXEC
>>>> mount03.c:153: TFAIL: mount(tst_device->dev, MNTPOINT, tst_device->fs_type, tc->flag, NULL) failed: EINVAL (22)
>>>> mount03.c:150: TINFO: Testing flag MS_RDONLY
>>>> mount03.c:153: TFAIL: mount(tst_device->dev, MNTPOINT, tst_device->fs_type, tc->flag, NULL) failed: EINVAL (22)
>>>> mount03.c:150: TINFO: Testing flag MS_NOSUID
>>>> mount03.c:153: TFAIL: mount(tst_device->dev, MNTPOINT, tst_device->fs_type, tc->flag, NULL) failed: EINVAL (22)
>>>> mount03.c:150: TINFO: Testing flag MS_NOATIME
>>>> mount03.c:111: TPASS: st.st_atime == atime (1661183501)
>>>
>>> I also meet nosuid work not as expected.
>>>
>>> st_test.c:1599: TINFO: Testing on ext4
>>> tst_test.c:1064: TINFO: Formatting /dev/loop0 with ext4 opts='' extra
>>> opts=''
>>> mke2fs 1.46.5 (30-Dec-2021)
>>> mount03.c:151: TINFO: Testing flag MS_RDONLY
>>> mount03.c:48: TPASS: otfd = open(file, O_CREAT | O_RDWR, 0700) : EROFS (30)
>>> mount03.c:151: TINFO: Testing flag MS_NODEV
>>> mount03.c:55: TPASS: otfd = open(file, O_RDWR, 0700) : EACCES (13)
>>> mount03.c:151: TINFO: Testing flag MS_NOEXEC
>>> mount03.c:63: TPASS: execlp(file, basename(file), NULL) : EACCES (13)
>>> mount03.c:151: TINFO: Testing flag MS_RDONLY
>>> mount03.c:70: TPASS: otfd = open(file, O_CREAT | O_RDWR, 0700) returned fd 3
>>> mount03.c:151: TINFO: Testing flag MS_NOSUID
>>> mount03_suid_child.c:22: TFAIL: setreuid(getuid(), 0) succeeded
>>> mount03.c:151: TINFO: Testing flag MS_NOATIME
>>> mount03.c:112: TPASS: st.st_atime == atime (1661280863)
>>> tst_device.c:434: TINFO: No device is mounted at mntpoint
>>>
>>
>> I added some more debug info:
>>
>> @@ -86,7 +89,20 @@ static void test_nosuid(void)
>> if (st.st_mode != SUID_MODE)
>> SAFE_CHMOD(BIN_PATH, SUID_MODE);
>>
>> - SAFE_SETREUID(nobody_uid, nobody_uid);
>> + tst_res(TINFO, "dev %d:%d, rdev: %d:%d",
>> + major(st.st_dev), minor(st.st_dev), major(st.st_rdev), minor(st.st_rdev));
>> + SAFE_SETRESGID(nobody_gid, nobody_gid, nobody_gid);
>> + SAFE_SETRESUID(nobody_uid, nobody_uid, nobody_uid);
>> +
>> + uid_t uid, gid, euid, egid, suid, sgid;
>> +
>> + getresuid(&uid, &euid, &suid);
>> + getresgid(&gid, &egid, &sgid);
>> + tst_res(TINFO, "uid: %d, gid: %d, euid: %d, egid: %d, suid: %d, sgid: %d",
>> + uid, gid, euid, egid, suid, sgid);
>> +
>> + tst_system("pwd");
>> + tst_system("ls -l " MNTPOINT);
>> SAFE_EXECL(BIN_PATH, BIN_PATH, NULL);
>> tst_brk(TFAIL | TTERRNO, "Failed to execute %s", BIN_PATH);
>>
>> and in the child
>>
>> int main(void)
>> {
>> + uid_t uid, gid, euid, egid, suid, sgid;
>> tst_reinit();
>>
>> + getresuid(&uid, &euid, &suid);
>> + getresgid(&gid, &egid, &sgid);
>> + tst_res(TINFO, "uid: %d, gid: %d, euid: %d, egid: %d, suid: %d, sgid: %d",
>> + uid, gid, euid, egid, suid, sgid);
>> +
>> TST_EXP_FAIL(setreuid(getuid(), 0), EPERM);
>>
>>
>> This shows that BIN_PATH is being accessed from the wrong device AFAICT
>>
>> mount03.c:166: TINFO: Testing flag MS_NOSUID
>>
>> ...
>>
>> 30 1 0:26 / /tmp rw,relatime - tmpfs ltp rw,size=512000k,inode64
>> 31 30 0:27 / /tmp/mouLkSN2v/mntpoint rw,nosuid,relatime - tmpfs /dev/loop0 rw,inode64
>> mount03.c:92: TINFO: dev 0:26, rdev: 0:0
>> mount03.c:101: TINFO: uid: 65534, gid: 65534, euid: 65534, egid: 65534, suid: 65534, sgid: 65534
>> /tmp/mouLkSN2v
>> total 688
>> -r-s--x--x 1 root 0 702952 Oct 13 11:29 mount03_suid_child
>> mount03_suid_child.c:25: TINFO: uid: 65534, gid: 65534, euid: 0, egid: 65534, suid: 0, sgid: 65534
>> mount03_suid_child.c:28: TFAIL: setreuid(getuid(), 0) succeeded
>>
>> The device should be 0:27 not 0:26.
>>
>> Indeed if I remove SAFE_CHMOD then the euid and suid are set to
>> nobody. Also if I mount /tmp as nosuid then the test passes. Possibly we
>> need to use absoute paths to ensure we are going through the mount
>> point.
>
> I use statfs struct f_flags member to debug, then found the mounted
> filesystem doesn't have nosuid flag.
>
> It seems parent has umounted this dev and so child doesn't have nosuid
> flag, so this case failed.
>
> --- a/testcases/kernel/syscalls/mount/mount03.c
> +++ b/testcases/kernel/syscalls/mount/mount03.c
> @@ -90,6 +90,7 @@ static void test_nosuid(void)
> SAFE_EXECL(BIN_PATH, BIN_PATH, NULL);
> tst_brk(TFAIL | TTERRNO, "Failed to execute %s", BIN_PATH);
> }
> + tst_reap_children();
> }
>
>
> After this change, this case can pass when I run with -i 10.
Good catch; merged with this fix and a couple of others.
--
Thank you,
Richard.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2022-10-18 8:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-22 15:54 [LTP] [PATCH v4 1/1] mount03: Convert to new API Petr Vorel
2022-08-22 17:06 ` Petr Vorel
2022-08-23 3:58 ` xuyang2018.jy
2022-10-13 11:31 ` Richard Palethorpe
2022-10-18 6:09 ` xuyang2018.jy
2022-10-18 8:44 ` Richard Palethorpe [this message]
2022-10-18 7:19 ` xuyang2018.jy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fsflmsdx.fsf@suse.de \
--to=rpalethorpe@suse.de \
--cc=ltp@lists.linux.it \
--cc=xuyang2018.jy@fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.