[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] machdev: Fix parent proc passthrough in fsys_init
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 1/2] machdev: Fix parent proc passthrough in fsys_init |
Date: |
Sat, 20 Mar 2021 00:03:31 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Damien Zammit, le ven. 19 mars 2021 13:15:11 +1100, a ecrit:
> ---
> 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
>
>
--
Samuel
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and
the Ugly)."
(By Matt Welsh)