aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_descrip.c
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2021-11-22 22:36:56 +0000
committerBrooks Davis <brooks@FreeBSD.org>2021-11-22 22:36:56 +0000
commit6eefabd4ca40348f0bc0ab829bceb3a308e577b7 (patch)
treee3859170b99f3b7d17959d33a2d68008f644901a /sys/kern/kern_descrip.c
parent8460d3e9e6cbc78f4ae363b7894d765189b2ad44 (diff)
downloadsrc-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.c7
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 */