bug-hurd
[Top][All Lists]
Advanced

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

[PATCH v2] Fix /proc/?/exe values for bootstrap processes


From: Damien Zammit
Subject: [PATCH v2] Fix /proc/?/exe values for bootstrap processes
Date: Sun, 11 Jul 2021 11:20:42 +1000

TESTED: normal boot and pci+rump

TODO: fix rumpdisk's /proc/6/stat
---
 libmachdev/trivfs_server.c | 15 +--------------
 startup/startup.c          | 16 ++++++++++++++--
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/libmachdev/trivfs_server.c b/libmachdev/trivfs_server.c
index bbd73555..9c604595 100644
--- a/libmachdev/trivfs_server.c
+++ b/libmachdev/trivfs_server.c
@@ -289,13 +289,12 @@ 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, parent_proc;
+  process_t parent_proc;
 
   /* Traverse to the bootstrapping server first */
   task_get_bootstrap_port (mach_task_self (), &bootstrap);
   if (bootstrap)
     {
-
       err = proc_task2proc (procserver, parent_task, &parent_proc);
       assert_perror_backtrace (err);
       err = fsys_init (bootstrap, parent_proc, MACH_MSG_TYPE_COPY_SEND, 
authhandle);
@@ -322,18 +321,6 @@ trivfs_S_fsys_init (struct trivfs_control *fsys,
   _hurd_libc_proc_init(machdev_argv);
 #endif
 
-  /* Mark us as important.  */
-  proc = getproc ();
-  assert_backtrace (proc);
-  err = proc_mark_important (proc);
-  if (err && err != EPERM)
-    assert_perror_backtrace (err);
-  err = proc_mark_exec (proc);
-  assert_perror_backtrace (err);
-  err = proc_set_exe (proc, program_invocation_short_name);
-  assert_perror_backtrace (err);
-  mach_port_deallocate (mach_task_self (), proc);
-
   if (bootstrapping)
     {
       if (devnode)
diff --git a/startup/startup.c b/startup/startup.c
index 9faeb462..90cdaa85 100644
--- a/startup/startup.c
+++ b/startup/startup.c
@@ -1462,7 +1462,7 @@ S_startup_essential_task (mach_port_t server,
                          char *name,
                          mach_port_t credential)
 {
-  static int authinit, procinit, execinit;
+  static int authinit, procinit, execinit, fsinit;
   int fail;
 
   /* Always deallocate the extra reference this message carries.  */
@@ -1494,11 +1494,21 @@ S_startup_essential_task (mach_port_t server,
         }
       else if (!strcmp (name, "proc"))
        procinit = 1;
+      else if (!strcmp (name, "ext2fs"))
+        fsinit = 1;
+      else
+        {
+          mach_port_t otherproc;
+          proc_child (procserver, task);
+          proc_task2proc (procserver, task, &otherproc);
+          proc_mark_important (otherproc);
+          proc_set_exe (otherproc, name);
+        }
 
       if (verbose)
         fprintf (stderr, "  still waiting for:");
 
-      if (authinit && execinit && procinit)
+      if (authinit && execinit && procinit && fsinit)
        {
           if (verbose)
             fprintf (stderr, " none!\n");
@@ -1524,6 +1534,8 @@ S_startup_essential_task (mach_port_t server,
             fprintf (stderr, " exec");
           if (! procinit)
             fprintf (stderr, " proc");
+          if (! fsinit)
+            fprintf (stderr, " fs");
           fprintf (stderr, "\n");
         }
     }
-- 
2.31.0




reply via email to

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