diff options
-rw-r--r-- | boot/boot.c | 5 | ||||
-rw-r--r-- | libmachdev/ds_routines.c | 8 | ||||
-rw-r--r-- | libmachdev/trivfs_server.c | 8 |
3 files changed, 15 insertions, 6 deletions
diff --git a/boot/boot.c b/boot/boot.c index 0a7091e3..eb78a1c6 100644 --- a/boot/boot.c +++ b/boot/boot.c @@ -559,9 +559,10 @@ main (int argc, char **argv, char **envp) if (want_privileged) { - get_privileged_ports (&privileged_host_port, &master_device_port); - privileged = MACH_PORT_VALID (master_device_port); + if (get_privileged_ports (&privileged_host_port, &master_device_port)) + error (1, 0, "Must be run as root for privileged subhurds"); + privileged = MACH_PORT_VALID (master_device_port); if (! privileged) error (1, 0, "Must be run as root for privileged subhurds"); } diff --git a/libmachdev/ds_routines.c b/libmachdev/ds_routines.c index c5a7cd00..cc99e296 100644 --- a/libmachdev/ds_routines.c +++ b/libmachdev/ds_routines.c @@ -117,9 +117,11 @@ ds_device_open (mach_port_t open_port, mach_port_t reply_port, /* Fall back to opening kernel device master */ if (err) { - get_privileged_ports(NULL, &dev_master); - err = device_open (dev_master, mode, name, devp); - *devicePoly = MACH_MSG_TYPE_MOVE_SEND; + err = get_privileged_ports(NULL, &dev_master); + if (!err) + err = device_open (dev_master, mode, name, devp); + if (!err) + *devicePoly = MACH_MSG_TYPE_MOVE_SEND; } return err; } diff --git a/libmachdev/trivfs_server.c b/libmachdev/trivfs_server.c index 979741d1..9c9f817d 100644 --- a/libmachdev/trivfs_server.c +++ b/libmachdev/trivfs_server.c @@ -221,8 +221,14 @@ static void essential_task (void) { mach_port_t host, startup; + error_t err; - get_privileged_ports (&host, 0); + err = get_privileged_ports (&host, 0); + if (err) + { + mach_print ("WARNING: Cannot register as essential task\n"); + return; + } startup = file_name_lookup (_SERVERS_STARTUP, 0, 0); if (startup == MACH_PORT_NULL) { |