git: d2387bb8e2ac - stable/14 - compat32 wait4/6(2): only copy out when there is a pid to report
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 13 Jun 2026 01:20:06 UTC
The branch stable/14 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=d2387bb8e2acabcfd2b2975f3d389c89aedb8f2d
commit d2387bb8e2acabcfd2b2975f3d389c89aedb8f2d
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-06-09 21:33:56 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-06-13 01:04:41 +0000
compat32 wait4/6(2): only copy out when there is a pid to report
PR: 295965
(cherry picked from commit 89fa97f0a71d4988891766c4e69eeb9687016b14)
---
sys/compat/freebsd32/freebsd32_misc.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index 0d35d1291316..326c7c293356 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -233,11 +233,9 @@ freebsd32_wait4(struct thread *td, struct freebsd32_wait4_args *uap)
else
rup = NULL;
error = kern_wait(td, uap->pid, &status, uap->options, rup);
- if (error)
- return (error);
- if (uap->status != NULL)
+ if (uap->status != NULL && error == 0 && td->td_retval[0] != 0)
error = copyout(&status, uap->status, sizeof(status));
- if (uap->rusage != NULL && error == 0) {
+ if (uap->rusage != NULL && error == 0 && td->td_retval[0] != 0) {
freebsd32_rusage_out(&ru, &ru32);
error = copyout(&ru32, uap->rusage, sizeof(ru32));
}
@@ -264,11 +262,9 @@ freebsd32_wait6(struct thread *td, struct freebsd32_wait6_args *uap)
sip = NULL;
error = kern_wait6(td, uap->idtype, PAIR32TO64(id_t, uap->id),
&status, uap->options, wrup, sip);
- if (error != 0)
- return (error);
- if (uap->status != NULL)
+ if (uap->status != NULL && error == 0 && td->td_retval[0] != 0)
error = copyout(&status, uap->status, sizeof(status));
- if (uap->wrusage != NULL && error == 0) {
+ if (uap->wrusage != NULL && error == 0 && td->td_retval[0] != 0) {
freebsd32_rusage_out(&wru.wru_self, &wru32.wru_self);
freebsd32_rusage_out(&wru.wru_children, &wru32.wru_children);
error = copyout(&wru32, uap->wrusage, sizeof(wru32));