linux: improve reporting for unsupported syscall flags

Filter out the flags we do support; previously we would print
out the flag value verbatim.

Reviewed By:	dchagin
Sponsored By:	EPSRC
Differential Revision:	https://reviews.freebsd.org/D30693
This commit is contained in:
Edward Tomasz Napierala 2021-06-15 10:18:04 +01:00
parent afce583571
commit 9d167945e8
2 changed files with 16 additions and 12 deletions

View File

@ -1757,10 +1757,11 @@ int
linux_fchownat(struct thread *td, struct linux_fchownat_args *args)
{
char *path;
int error, dfd, flag;
int error, dfd, flag, unsupported;
if (args->flag & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH)) {
linux_msg(td, "fchownat unsupported flag 0x%x", args->flag);
unsupported = args->flag & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH);
if (unsupported != 0) {
linux_msg(td, "fchownat unsupported flag 0x%x", unsupported);
return (EINVAL);
}

View File

@ -663,11 +663,12 @@ int
linux_fstatat64(struct thread *td, struct linux_fstatat64_args *args)
{
char *path;
int error, dfd, flag;
int error, dfd, flag, unsupported;
struct stat buf;
if (args->flag & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH)) {
linux_msg(td, "fstatat64 unsupported flag 0x%x", args->flag);
unsupported = args->flag & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH);
if (unsupported != 0) {
linux_msg(td, "fstatat64 unsupported flag 0x%x", unsupported);
return (EINVAL);
}
flag = (args->flag & LINUX_AT_SYMLINK_NOFOLLOW) ?
@ -696,11 +697,12 @@ int
linux_newfstatat(struct thread *td, struct linux_newfstatat_args *args)
{
char *path;
int error, dfd, flag;
int error, dfd, flag, unsupported;
struct stat buf;
if (args->flag & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH)) {
linux_msg(td, "fstatat unsupported flag 0x%x", args->flag);
unsupported = args->flag & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH);
if (unsupported != 0) {
linux_msg(td, "fstatat unsupported flag 0x%x", unsupported);
return (EINVAL);
}
@ -769,11 +771,12 @@ int
linux_statx(struct thread *td, struct linux_statx_args *args)
{
char *path;
int error, dirfd, flags;
int error, dirfd, flags, unsupported;
struct stat buf;
if (args->flags & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH)) {
linux_msg(td, "statx unsupported flags 0x%x", args->flags);
unsupported = args->flags & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH);
if (unsupported != 0) {
linux_msg(td, "statx unsupported flags 0x%x", unsupported);
return (EINVAL);
}