aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorChristian Schoenebeck <qemu_oss@crudebyte.com>2021-06-04 16:46:45 +0200
committerChristian Schoenebeck <qemu_oss@crudebyte.com>2021-07-05 13:03:16 +0200
commit8bf27550effb124221100c3c6f5d513dd29ec37d (patch)
tree683531d5ca7a3e703e9b8d8d001dce916a207b6e /hw
parent232a4d2c25c3a83e148116a15f992f728c3579e6 (diff)
9pfs: fix not_same_qid()
There is only one user of not_same_qid() which is v9fs_walk() and the latter is using it for comparing a client supplied path with the 9p export root path, for the sole purpose to prevent a Twalk request from escaping from the exported 9p tree via "..". However for that specific purpose the implementation of not_same_qid() is wrong; if mtime of the 9p export root path changed between Tattach and Twalk then not_same_qid() returns true when actually comparing against the export root path. To fix for the actual semantic being used, only compare QID path members, but do not compare version or type members. Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Reviewed-by: Greg Kurz <groug@kaod.org> Message-Id: <ca0abae4a899d81c6e87f683732d6c1f56915232.1622821729.git.qemu_oss@crudebyte.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/9pfs/9p.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 89aa07db78..e10a02f71d 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -1707,10 +1707,7 @@ static bool name_is_illegal(const char *name)
static bool not_same_qid(const V9fsQID *qid1, const V9fsQID *qid2)
{
- return
- qid1->type != qid2->type ||
- qid1->version != qid2->version ||
- qid1->path != qid2->path;
+ return qid1->path != qid2->path;
}
static void coroutine_fn v9fs_walk(void *opaque)