summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-10-23 23:59:16 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-10-23 23:59:16 +0200
commit89e63156991a50263eb6481934ce1c40e4a13036 (patch)
treec681c9ce67566738f225496fd3277ad9771bf373
parent16e08adb32778864035cc582c3a9163d3032ca4b (diff)
downloadplan9front-89e63156991a50263eb6481934ce1c40e4a13036.tar.xz
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
-rw-r--r--sys/src/lib9p/file.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/src/lib9p/file.c b/sys/src/lib9p/file.c
index 1dc324f63..54e09d278 100644
--- a/sys/src/lib9p/file.c
+++ b/sys/src/lib9p/file.c
@@ -254,7 +254,8 @@ walkfile1(File *dir, char *elem)
rlock(dir);
if(strcmp(elem, "..") == 0){
fp = dir->parent;
- incref(fp);
+ if(fp != nil)
+ incref(fp);
runlock(dir);
closefile(dir);
return fp;