From fe863ad1bce26683d63a314e6077ad4dec3378a5 Mon Sep 17 00:00:00 2001 From: Victor Hsieh Date: Tue, 14 Jul 2020 08:51:24 -0700 Subject: [PATCH] p9: fix lcreate to respect the open mode lcreate is not just used for creat(2), but open(2) as well. So it is possible that the read/write mode is specified manually. BUG=chromium:1105484 TEST=Run the test program in the bug. Read returns 0 like on other filesystem. Change-Id: I4fb642deb09831f00d3bd83e973e8a42c54ec5d6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2297228 Tested-by: Victor Hsieh Tested-by: kokoro Reviewed-by: Chirantan Ekbote Auto-Submit: Victor Hsieh Commit-Queue: Victor Hsieh --- p9/src/server.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/p9/src/server.rs b/p9/src/server.rs index 3988252a27..3761c43f1b 100644 --- a/p9/src/server.rs +++ b/p9/src/server.rs @@ -540,8 +540,8 @@ impl Server { } let file = fs::OpenOptions::new() - .read(false) - .write(true) + .read((lcreate.flags & P9_NOACCESS) == 0 || (lcreate.flags & P9_RDWR) != 0) + .write((lcreate.flags & P9_WRONLY) != 0 || (lcreate.flags & P9_RDWR) != 0) .truncate(true) .create(true) .append((lcreate.flags & P9_APPEND) != 0)