There seems to be a bug in sys_umount().

Note that prototype for namei() is:

int namei (char *pathname, struct inode **res_inode, int dir, int perm);

However in sys_umount() at line 353 of fs/super.c,  namei() is being
called with too few arguments. This causes the flow through namei()
to be based on what random garbage it finds on the stack. It causes 
the value of "retval" to be non-deterministic and therefore it causes
sys_umount() to have non-deterministic behavior. Here is the error:

retval = namei(name,&inode);  /* THIS IS THE OFFENDING LINE super.c:353*/
if (retval) {
        retval = lnamei(name,&inode);
        if (retval)
                return retval;
}

I'm not sure of the best way to fix this (some constants should
be passed for the  "dir" and "perm" arguments, I guess). Maybe 
someone more familiar with this code can offer the correct fix.

later,

Thomas
[EMAIL PROTECTED]

Reply via email to