Index: hurd-0.6/trans/fakeroot.c =================================================================== --- hurd-0.6.orig/trans/fakeroot.c +++ hurd-0.6/trans/fakeroot.c @@ -91,7 +91,11 @@ new_node (file_t file, mach_port_t idpor } nn = netfs_node_netnode (*np); nn->file = file; - nn->openmodes = openmodes; + + /* FIXME: Forbid nn->openmodes == 0 and openmodes == 0? */ + /* XXX: Limit nn->openmodes */ + nn->openmodes = openmodes & (O_RDWR | O_EXEC); + if (idport != MACH_PORT_NULL) nn->idport = idport; else @@ -207,11 +211,13 @@ check_openmodes (struct netnode *nn, int { error_t err = 0; - if (newmodes &~ nn->openmodes) + /* XXX: Limit nn->openmodes */ + nn->openmodes &= (O_RDWR | O_EXEC); + if (~nn->openmodes & newmodes) { /* The user wants openmodes we haven't tried before. */ - if (file != MACH_PORT_NULL && (nn->openmodes & ~newmodes)) + if (file != MACH_PORT_NULL && (nn->openmodes & newmodes )) { /* Intersecting sets. We need yet another new peropen on this node. */ @@ -388,7 +394,7 @@ netfs_S_dir_lookup (struct protid *dirus } err = check_openmodes (netfs_node_netnode (np), - (flags & (O_RDWR|O_EXEC)), file); + flags & (O_RDWR|O_EXEC), file); pthread_mutex_unlock (&idport_ihash_lock); } else