git: 0f23fc29f90f - stable/13 - linux(4): Avoid direct manipulation of td_sigmask

From: Dmitry Chagin <dchagin_at_FreeBSD.org>
Date: Fri, 17 Jun 2022 19:41:24 UTC
The branch stable/13 has been updated by dchagin:

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

commit 0f23fc29f90f6ce49975f2576b149ce9e1e35784
Author:     Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2022-05-30 16:48:20 +0000
Commit:     Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2022-06-17 19:35:37 +0000

    linux(4): Avoid direct manipulation of td_sigmask
    
    Use kern_sigprocmask() instead of direct manipulation of td_sigmask
    to reschedule newly blocked signals.
    
    MFC after:              2 weeks
    
    (cherry picked from commit 2ab9b59faafb68402dbebc285b424cfb06b59cf3)
---
 sys/amd64/linux/linux_sysvec.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/sys/amd64/linux/linux_sysvec.c b/sys/amd64/linux/linux_sysvec.c
index 329a0a2567c0..83aa646fee20 100644
--- a/sys/amd64/linux/linux_sysvec.c
+++ b/sys/amd64/linux/linux_sysvec.c
@@ -465,6 +465,7 @@ linux_rt_sigreturn(struct thread *td, struct linux_rt_sigreturn_args *args)
 	struct l_sigcontext *context;
 	struct trapframe *regs;
 	unsigned long rflags;
+	sigset_t bmask;
 	int error;
 	ksiginfo_t ksi;
 
@@ -513,11 +514,8 @@ linux_rt_sigreturn(struct thread *td, struct linux_rt_sigreturn_args *args)
 		return (EINVAL);
 	}
 
-	PROC_LOCK(p);
-	linux_to_bsd_sigset(&uc.uc_sigmask, &td->td_sigmask);
-	SIG_CANTMASK(td->td_sigmask);
-	signotify(td);
-	PROC_UNLOCK(p);
+	linux_to_bsd_sigset(&uc.uc_sigmask, &bmask);
+	kern_sigprocmask(td, SIG_SETMASK, &bmask, NULL, 0);
 
 	regs->tf_rdi    = context->sc_rdi;
 	regs->tf_rsi    = context->sc_rsi;