Bruno_Kieba.SBDERX@xerox.com (06/23/88)
When I implemented the capability-based protection in Minix 1.1, I came across
a little bug (or is there?) in the original file system source file "link.c". I
corrected it anyhow in my source. If Dr. Andy Tanenbaum reads this mail note
then this bug could be corrected before the release of 1.3 (please tell me if I
am wrong!).
In the source file "link.c" (File System, Minix 1.1), if the final directory of
"name2" does not exist (line #11304) then the i-node of "name", previously read
into the i-node table (line #11287), is never "put-inoded" and thus wastes
resources (ie: i-node table entries and file descriptor entries in process table
if many unsuccessful linking to "name2" happen).
If Minix was locking files (UNIX does), then this could entail a deadlock!
The code I guess should be like:
11304 if (fetch-name(name2, name2-length, M1) != OK) {
11304.1 -----> put-inode(rip); /* put "name"'s i-node first */
11304.2 return(err-code); /* before returning an error */
11304.3 }
11305 .....(same).....
Am I right?
Bruno ast@cs.vu.nl (Andy Tanenbaum) (06/27/88)
In article <3089@louie.udel.EDU> Bruno_Kieba.SBDERX@xerox.com writes: >... a little bug [in] file system source file "link.c". >11304 if (fetch-name(name2, name2-length, M1) != OK) { >11304.1 -----> put-inode(rip); /* put "name"'s i-node first */ >11304.2 return(err-code); /* before returning an error */ >11304.3 } >11305 .....(same)..... This analysis is correct and has already been noted in this group and fixed in 1.3. Andy Tanenbaum (ast@cs.vu.nl) -- Andy Tanenbaum (ast@cs.vu.nl)