summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--trans/mtab.c43
1 files changed, 11 insertions, 32 deletions
diff --git a/trans/mtab.c b/trans/mtab.c
index 9b867b7b..0bcd52b4 100644
--- a/trans/mtab.c
+++ b/trans/mtab.c
@@ -282,7 +282,6 @@ mtab_populate (struct mtab *mtab, const char *path, int insecure)
/* These resources are freed in the epilogue. */
file_t node = MACH_PORT_NULL;
- fsys_t fsys = MACH_PORT_NULL;
char *argz = NULL;
size_t argz_len = 0;
char **argv = NULL;
@@ -295,16 +294,16 @@ mtab_populate (struct mtab *mtab, const char *path, int insecure)
char *children = NULL;
size_t children_len = 0;
- /* Get the underlying node. */
- node = file_name_lookup (path, O_NOTRANS, 0666);
- if (node == MACH_PORT_NULL)
- {
- err = errno;
- goto errout;
- }
-
if (! insecure)
{
+ /* Get the underlying node. */
+ node = file_name_lookup (path, O_NOTRANS, 0666);
+ if (node == MACH_PORT_NULL)
+ {
+ err = errno;
+ goto errout;
+ }
+
/* Check who owns the node the translator is bound to. */
io_statbuf_t st;
err = io_stat (node, &st);
@@ -316,28 +315,11 @@ mtab_populate (struct mtab *mtab, const char *path, int insecure)
err = EPERM;
goto errout;
}
- }
- err = file_get_translator_cntl (node, &fsys);
- if (err == EPERM)
- /* If we do not have permission to do that, it cannot be a node
- bound to our control port, so ignore this error. */
- err = 0;
-
- if (err == ENXIO && strcmp (path, "/") == 0)
- /* The root translator fails differently, but this can't be bound
- to our control port either, so ignore this error. */
- err = 0;
-
- if (err)
- return err;
-
- if (control && control->pi.port_right == fsys)
- /* This node is bound to our control port, ignore it. */
- goto errout;
+ mach_port_deallocate (mach_task_self (), node);
+ }
- /* Re-do the lookup without O_NOTRANS to get the root node. */
- mach_port_deallocate (mach_task_self (), node);
+ /* (Re-)do the lookup without O_NOTRANS to get the root node. */
node = file_name_lookup (path, 0, 0666);
if (node == MACH_PORT_NULL)
{
@@ -461,9 +443,6 @@ mtab_populate (struct mtab *mtab, const char *path, int insecure)
if (node != MACH_PORT_NULL)
mach_port_deallocate (mach_task_self (), node);
- if (fsys != MACH_PORT_NULL)
- mach_port_deallocate (mach_task_self (), fsys);
-
if (argz)
vm_deallocate (mach_task_self (), (vm_address_t) argz, argz_len);