Re: [PATCH] vfs: move_mount: reject moving kernel internal mounts

Eric Biggers
2019-07-02T18:23:03Z

On Mon, Jul 01, 2019 at 07:22:39PM +0100, Al Viro wrote:
> On Mon, Jul 01, 2019 at 09:45:37AM -0700, Eric Biggers wrote:
> > On Sat, Jun 29, 2019 at 01:27:44PM -0700, Eric Biggers wrote:
> > >
> > > Reproducer:
> > >
> > > #include <unistd.h>
> > >
> > > #define __NR_move_mount 429
> > > #define MOVE_MOUNT_F_EMPTY_PATH 0x00000004
> > >
> > > int main()
> > > {
> > > int fds[2];
> > >
> > > pipe(fds);
> > > syscall(__NR_move_mount, fds[0], "", -1, "/", MOVE_MOUNT_F_EMPTY_PATH);
> > > }
> >
> > David, I'd like to add this as a regression test somewhere.
> >
> > Can you point me to the tests for the new mount syscalls?
> >
> > I checked LTP, kselftests, and xfstests, but nothing to be found.
>
> FWIW, it's not just move_mount(2) - I'd expect
>
> int fds[2];
> char s[80];
>
> pipe(fds);
> sprintf(s, "/dev/fd/%d", fds[0]);
> mount(s, "/dev/null", NULL, MS_MOVE, 0);
>
> to step into exactly the same thing. mount(2) does follow symlinks -
> always had...

Sure, but the new mount syscalls still need tests. Where are the tests?

Also, since the case of a fd with an internal mount was overlooked, probably the
man page needs to be updated clarify that move_mount(2) fails with EINVAL in
this case. Where is the man page?

- Eric