The code already ignores proc_mark_important failing with EPERM; do the same for opening /servers/startup and startup_request_notification. All of these calls will fail for unprivileged mounts.
Also plug a port leak: we want to deallocate the "init" port whether the RPC succeeds or not. --- libdiskfs/init-startup.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libdiskfs/init-startup.c b/libdiskfs/init-startup.c index a4095847..0cc7f647 100644 --- a/libdiskfs/init-startup.c +++ b/libdiskfs/init-startup.c @@ -223,6 +223,8 @@ _diskfs_init_completed (void) if (init == MACH_PORT_NULL) { err = errno; + if (err == EPERM) + return; goto errout; } @@ -233,11 +235,11 @@ _diskfs_init_completed (void) err = startup_request_notification (init, notify, MACH_MSG_TYPE_COPY_SEND, name); mach_port_deallocate (mach_task_self (), notify); + mach_port_deallocate (mach_task_self (), init); free (name); - if (err) + if (err && err != EPERM) goto errout; - mach_port_deallocate (mach_task_self (), init); return; errout: -- 2.41.0