linux: add trivial renameat2 implementation

Just return EINVAL if flags != 0.  The Linux man page documents one
case of EINVAL as "The filesystem does not support one of the flags in
flags."

After r351723 userland binaries will try using new system calls.

Reported by:	mjg
Reviewed by:	mjg, trasz
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D21590
This commit is contained in:
Ed Maste 2019-09-11 13:01:59 +00:00
parent 65ab1fdd21
commit 2eb6ef203a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=352210
5 changed files with 20 additions and 8 deletions

View File

@ -130,8 +130,6 @@ DUMMY(kcmp);
DUMMY(finit_module);
DUMMY(sched_setattr);
DUMMY(sched_getattr);
/* Linux 3.14: */
DUMMY(renameat2);
/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);

View File

@ -137,8 +137,6 @@ DUMMY(kcmp);
DUMMY(finit_module);
DUMMY(sched_setattr);
DUMMY(sched_getattr);
/* Linux 3.14: */
DUMMY(renameat2);
/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);

View File

@ -130,8 +130,6 @@ DUMMY(kcmp);
DUMMY(finit_module);
DUMMY(sched_setattr);
DUMMY(sched_getattr);
/* Linux 3.14: */
DUMMY(renameat2);
/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);

View File

@ -685,10 +685,30 @@ linux_rename(struct thread *td, struct linux_rename_args *args)
int
linux_renameat(struct thread *td, struct linux_renameat_args *args)
{
struct linux_renameat2_args renameat2_args = {
.olddfd = args->olddfd,
.oldname = args->oldname,
.newdfd = args->newdfd,
.newname = args->newname,
.flags = 0
};
return (linux_renameat2(td, &renameat2_args));
}
int
linux_renameat2(struct thread *td, struct linux_renameat2_args *args)
{
char *from, *to;
int error, olddfd, newdfd;
if (args->flags != 0) {
linux_msg(td, "renameat2 unsupported flags 0x%x\n",
args->flags);
return (EINVAL);
}
olddfd = (args->olddfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->olddfd;
newdfd = (args->newdfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->newdfd;
LCONVPATHEXIST_AT(td, args->oldname, &from, olddfd);

View File

@ -134,8 +134,6 @@ DUMMY(finit_module);
DUMMY(sched_setattr);
DUMMY(sched_getattr);
/* Linux 3.14: */
DUMMY(renameat2);
/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);
/* Linux 3.18: */