Author: dchagin
Date: Mon May 13 11:17:31 2019
New Revision: 347521
URL: https://svnweb.freebsd.org/changeset/base/347521

Log:
  MFC r346965:
  
  Follow the FreeBSD and implement PDEATH_SIG prctl ops in the Linuxulator.
  It was first introduced in r163734 and missied by me in r283383.

Modified:
  stable/11/sys/compat/linux/linux_emul.c
  stable/11/sys/compat/linux/linux_emul.h
  stable/11/sys/compat/linux/linux_misc.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/linux/linux_emul.c
==============================================================================
--- stable/11/sys/compat/linux/linux_emul.c     Mon May 13 10:43:18 2019        
(r347520)
+++ stable/11/sys/compat/linux/linux_emul.c     Mon May 13 11:17:31 2019        
(r347521)
@@ -127,7 +127,6 @@ linux_proc_init(struct thread *td, struct thread *newt
 
                em->em_tid = p->p_pid;
                em->flags = 0;
-               em->pdeath_signal = 0;
                em->robust_futexes = NULL;
                em->child_clear_tid = NULL;
                em->child_set_tid = NULL;

Modified: stable/11/sys/compat/linux/linux_emul.h
==============================================================================
--- stable/11/sys/compat/linux/linux_emul.h     Mon May 13 10:43:18 2019        
(r347520)
+++ stable/11/sys/compat/linux/linux_emul.h     Mon May 13 11:17:31 2019        
(r347521)
@@ -40,7 +40,6 @@ struct linux_emuldata {
        int    *child_set_tid;  /* in clone(): Child's TID to set on clone */
        int    *child_clear_tid;/* in clone(): Child's TID to clear on exit */
 
-       int     pdeath_signal;          /* parent death signal */
        int     flags;                  /* thread emuldata flags */
        int     em_tid;                 /* thread id */
 

Modified: stable/11/sys/compat/linux/linux_misc.c
==============================================================================
--- stable/11/sys/compat/linux/linux_misc.c     Mon May 13 10:43:18 2019        
(r347520)
+++ stable/11/sys/compat/linux/linux_misc.c     Mon May 13 11:17:31 2019        
(r347521)
@@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/namei.h>
 #include <sys/priv.h>
 #include <sys/proc.h>
+#include <sys/procctl.h>
 #include <sys/reboot.h>
 #include <sys/racct.h>
 #include <sys/random.h>
@@ -1995,7 +1996,6 @@ linux_prctl(struct thread *td, struct linux_prctl_args
        int error = 0, max_size;
        struct proc *p = td->td_proc;
        char comm[LINUX_MAX_COMM_LEN];
-       struct linux_emuldata *em;
        int pdeath_signal;
 
 #ifdef DEBUG
@@ -2009,17 +2009,18 @@ linux_prctl(struct thread *td, struct linux_prctl_args
        case LINUX_PR_SET_PDEATHSIG:
                if (!LINUX_SIG_VALID(args->arg2))
                        return (EINVAL);
-               em = em_find(td);
-               KASSERT(em != NULL, ("prctl: emuldata not found.\n"));
-               em->pdeath_signal = args->arg2;
-               break;
+               pdeath_signal = linux_to_bsd_signal(args->arg2);
+               return (kern_procctl(td, P_PID, 0, PROC_PDEATHSIG_CTL,
+                   &pdeath_signal));
        case LINUX_PR_GET_PDEATHSIG:
-               em = em_find(td);
-               KASSERT(em != NULL, ("prctl: emuldata not found.\n"));
-               pdeath_signal = em->pdeath_signal;
-               error = copyout(&pdeath_signal,
+               error = kern_procctl(td, P_PID, 0, PROC_PDEATHSIG_STATUS,
+                   &pdeath_signal);
+               if (error != 0)
+                       return (error);
+               pdeath_signal = bsd_to_linux_signal(pdeath_signal);
+               return (copyout(&pdeath_signal,
                    (void *)(register_t)args->arg2,
-                   sizeof(pdeath_signal));
+                   sizeof(pdeath_signal)));
                break;
        case LINUX_PR_GET_KEEPCAPS:
                /*
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to