bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/2] machdev: Fix parent proc passthrough in fsys_init


From: Damien Zammit
Subject: [PATCH 1/2] machdev: Fix parent proc passthrough in fsys_init
Date: Fri, 19 Mar 2021 13:15:11 +1100

---
 libmachdev/trivfs_server.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/libmachdev/trivfs_server.c b/libmachdev/trivfs_server.c
index 607166f9..60711348 100644
--- a/libmachdev/trivfs_server.c
+++ b/libmachdev/trivfs_server.c
@@ -79,6 +79,9 @@ struct port_class *machdev_shutdown_notify_class;
 
 static void arrange_shutdown_notification (void);
 
+/* Our parent's task, if applicable */
+static task_t parent_task;
+
 static void
 install_as_translator (mach_port_t bootport)
 {
@@ -284,13 +287,16 @@ trivfs_S_fsys_init (struct trivfs_control *fsys,
   retry_type retry;
   string_t retry_name;
   mach_port_t right = MACH_PORT_NULL;
-  process_t proc;
+  process_t proc, parent_proc;
 
   /* Traverse to the bootstrapping server first */
   task_get_bootstrap_port (mach_task_self (), &bootstrap);
   if (bootstrap)
     {
-      err = fsys_init (bootstrap, procserver, MACH_MSG_TYPE_COPY_SEND, 
authhandle);
+
+      err = proc_task2proc (procserver, parent_task, &parent_proc);
+      assert_perror_backtrace (err);
+      err = fsys_init (bootstrap, parent_proc, MACH_MSG_TYPE_COPY_SEND, 
authhandle);
       assert_perror_backtrace (err);
     }
   err = fsys_getroot (control_port, MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND,
@@ -315,10 +321,12 @@ trivfs_S_fsys_init (struct trivfs_control *fsys,
   proc = getproc ();
   assert_backtrace (proc);
   err = proc_mark_important (proc);
-  assert_perror_backtrace (err);
+  if (err && err != EPERM)
+    assert_perror_backtrace (err);
   err = proc_mark_exec (proc);
   assert_perror_backtrace (err);
-  proc_set_exe (proc, program_invocation_short_name);
+  err = proc_set_exe (proc, program_invocation_short_name);
+  assert_perror_backtrace (err);
   mach_port_deallocate (mach_task_self (), proc);
 
   if (bootstrapping)
@@ -430,7 +438,6 @@ machdev_trivfs_init(mach_port_t bootstrap_resume_task, 
const char *name, const c
                     mach_port_t *bootstrap)
 {
   mach_port_t mybootstrap = MACH_PORT_NULL;
-  task_t parent_task;
   port_bucket = ports_create_bucket ();
   trivfs_cntl_class = ports_create_class (trivfs_clean_cntl, 0);
   trivfs_protid_class = ports_create_class (trivfs_clean_protid, 0);
-- 
2.30.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]