The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=afb36e289c1d96053b6063b0e548fc7d31dbd239

commit afb36e289c1d96053b6063b0e548fc7d31dbd239
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2021-06-06 23:00:10 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2021-06-15 23:00:18 +0000

    sigwait(2) and sigtimedwait(2) must not be restarted.
    
    Reported by:    dchagin
    Reviewed by:    dchagin, markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D30675
---
 sys/kern/kern_sig.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 0453d3b2702c..a2709f38c5cb 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1168,9 +1168,7 @@ sys_sigwait(struct thread *td, struct sigwait_args *uap)
        error = kern_sigtimedwait(td, set, &ksi, NULL);
        if (error) {
                if (error == EINTR && td->td_proc->p_osrel < P_OSREL_SIGWAIT)
-                       error = ERESTART;
-               if (error == ERESTART)
-                       return (error);
+                       return (ERESTART);
                td->td_retval[0] = error;
                return (0);
        }
@@ -1329,15 +1327,13 @@ kern_sigtimedwait(struct thread *td, sigset_t waitset, 
ksiginfo_t *ksi,
 
                error = msleep(ps, &p->p_mtx, PPAUSE|PCATCH, "sigwait", timo);
 
-               if (timeout != NULL) {
-                       if (error == ERESTART) {
-                               /* Timeout can not be restarted. */
-                               error = EINTR;
-                       } else if (error == EAGAIN) {
-                               /* We will calculate timeout by ourself. */
-                               error = 0;
-                       }
-               }
+               /* The syscalls can not be restarted. */
+               if (error == ERESTART)
+                       error = EINTR;
+
+               /* We will calculate timeout by ourself. */
+               if (timeout != NULL && error == EAGAIN)
+                       error = 0;
 
                /*
                 * If PTRACE_SCE or PTRACE_SCX were set after
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to