aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRatna_Bolla@dell.com <Ratna_Bolla@dell.com>2013-02-04 18:30:14 +0100
committerMiklos Szeredi <mszeredi@suse.cz>2013-02-04 18:30:14 +0100
commit3a2bd4da6b0b713276528d0c818f9e7be515e8ec (patch)
treed09bfa03060438a1797540c19dd4e7f3113bb3ac
parentad38195a88c80d73cb46507851ebb870f3bd588d (diff)
downloadandroid_external_fuse-3a2bd4da6b0b713276528d0c818f9e7be515e8ec.tar.gz
android_external_fuse-3a2bd4da6b0b713276528d0c818f9e7be515e8ec.tar.bz2
android_external_fuse-3a2bd4da6b0b713276528d0c818f9e7be515e8ec.zip
libfuse: fix crash in unlock_path()
Patch by Ratna Manoj. queue_element_unlock() should set ->first_locked and ->second_locked to false. Discovered with 'fs_racer'. The assert(wnode->treelock == TREELOCK_WRITE) in unlock_path() was hit within minutes. Miklos: simplified patch
-rw-r--r--ChangeLog4
-rw-r--r--lib/fuse.c2
2 files changed, 6 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index dbd10e8..076bcaf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-02-04 Miklos Szeredi <miklos@szeredi.hu>
+
+ * libfuse: fix crash in unlock_path(). Patch by Ratna Manoj
+
2012-10-01 Miklos Szeredi <miklos@szeredi.hu>
* Released 2.9.2
diff --git a/lib/fuse.c b/lib/fuse.c
index 599a587..1917346 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -1021,10 +1021,12 @@ static void queue_element_unlock(struct fuse *f, struct lock_queue_element *qe)
if (qe->first_locked) {
wnode = qe->wnode1 ? *qe->wnode1 : NULL;
unlock_path(f, qe->nodeid1, wnode, NULL);
+ qe->first_locked = false;
}
if (qe->second_locked) {
wnode = qe->wnode2 ? *qe->wnode2 : NULL;
unlock_path(f, qe->nodeid2, wnode, NULL);
+ qe->second_locked = false;
}
}