diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-10-23 23:59:16 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-10-23 23:59:16 +0200 |
commit | 89e63156991a50263eb6481934ce1c40e4a13036 (patch) | |
tree | c681c9ce67566738f225496fd3277ad9771bf373 | |
parent | 16e08adb32778864035cc582c3a9163d3032ca4b (diff) | |
download | plan9front-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.c | 3 |
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; |