diff options
author | Brooks Davis <brooks@FreeBSD.org> | 2021-11-22 22:36:56 +0000 |
---|---|---|
committer | Brooks Davis <brooks@FreeBSD.org> | 2021-11-22 22:36:56 +0000 |
commit | 6eefabd4ca40348f0bc0ab829bceb3a308e577b7 (patch) | |
tree | e3859170b99f3b7d17959d33a2d68008f644901a /sys/kern/kern_descrip.c | |
parent | 8460d3e9e6cbc78f4ae363b7894d765189b2ad44 (diff) | |
download | src-6eefabd4ca40348f0bc0ab829bceb3a308e577b7.tar.gz src-6eefabd4ca40348f0bc0ab829bceb3a308e577b7.zip |
syscalls: improve nstat, nfstat, nlstat
Optionally return errors when truncating dev_t, ino_t, and nlink_t.
In the interest of code reuse, use freebsd11_cvtstat() to perform the
truncation and error handling and then convert the resulting struct
freebsd11_stat to struct nstat.
Add missing freebsd32 compat syscalls. These syscalls require
translation because struct nstat contains four instances of struct
timespec which in turn contains a time_t and a long.
Reviewed by: kib
Diffstat (limited to 'sys/kern/kern_descrip.c')
-rw-r--r-- | sys/kern/kern_descrip.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index 37d978e96de5..37fec097dcfc 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -1561,10 +1561,11 @@ freebsd11_nfstat(struct thread *td, struct freebsd11_nfstat_args *uap) int error; error = kern_fstat(td, uap->fd, &ub); - if (error == 0) { - freebsd11_cvtnstat(&ub, &nub); + if (error != 0) + return (error); + error = freebsd11_cvtnstat(&ub, &nub); + if (error != 0) error = copyout(&nub, uap->sb, sizeof(nub)); - } return (error); } #endif /* COMPAT_FREEBSD11 */ |