git: 9front

Download patch

ref: 41357e0d28a94b5759e81d5c1833e281df07f23d
parent: b7b7c2d8f1e741829d333c760e2a219feaadfb2b
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Oct 23 19:59:16 EDT 2014

lib9p: fix .. walk crash in deleted directory (thanks BurnZeZ)

to reproduce:

 % ramfs; cd /tmp
 % mkdir foo; cd foo
 % pwd
 /tmp/foo
 % rm /tmp/foo
 % pwd
 /tmp/foo
 % ls
 % ls /tmp
 % ls ..
 ramfs 202751: suicide: sys: trap: fault read addr=0x0 pc=0x0000e46d
 ls: ..: '..' mount rpc error

--- a/sys/src/lib9p/file.c
+++ b/sys/src/lib9p/file.c
@@ -254,7 +254,8 @@
 	rlock(dir);
 	if(strcmp(elem, "..") == 0){
 		fp = dir->parent;
-		incref(fp);
+		if(fp != nil)
+			incref(fp);
 		runlock(dir);
 		closefile(dir);
 		return fp;
--