Index: sys/compat/linux/linux_stats.c =================================================================== --- sys/compat/linux/linux_stats.c +++ sys/compat/linux/linux_stats.c @@ -661,8 +661,21 @@ int error, dfd, flag; struct stat buf; - if (args->flag & ~LINUX_AT_SYMLINK_NOFOLLOW) + if (args->flag & ~(LINUX_AT_SYMLINK_NOFOLLOW | LINUX_AT_EMPTY_PATH)) { + linux_msg(td, "fstatat unsupported flag 0x%x", args->flag); return (EINVAL); + } + + if (args->flag & LINUX_AT_EMPTY_PATH) { + if (args->dfd == AT_FDCWD) { + linux_msg(td, "unsupported fstatat with AT_FDCWD"); + return (EBADF); + } + error = kern_fstat(td, args->dfd, &buf); + translate_fd_major_minor(td, args->dfd, &buf); + goto out; + } + flag = (args->flag & LINUX_AT_SYMLINK_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0; @@ -675,6 +688,7 @@ error = linux_kern_statat(td, flag, dfd, path, UIO_SYSSPACE, &buf); LFREEPATH(path); } +out: if (error == 0) error = newstat_copyout(&buf, args->statbuf);