summaryrefslogtreecommitdiffhomepage
path: root/test/fuse/linux/mount_test.cc
diff options
context:
space:
mode:
authorRahat Mahmood <rahat@google.com>2020-12-07 17:58:56 -0800
committergVisor bot <gvisor-bot@google.com>2020-12-07 18:00:54 -0800
commit9c198e5df4216feb5ebbf144e3b616888dfe3c27 (patch)
tree2ac3ae16dbb8d79109deaf2b6a821990e09f1863 /test/fuse/linux/mount_test.cc
parent1aeca3bfb7dc4253126eef3cc2fc765d372b2fea (diff)
Fix error handling on fusefs mount.
Don't propagate arbitrary golang errors up from fusefs because errors that don't map to an errno result in a sentry panic. Reported-by: syzbot+697cb635346e456fddfc@syzkaller.appspotmail.com PiperOrigin-RevId: 346220306
Diffstat (limited to 'test/fuse/linux/mount_test.cc')
-rw-r--r--test/fuse/linux/mount_test.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/fuse/linux/mount_test.cc b/test/fuse/linux/mount_test.cc
new file mode 100644
index 000000000..a5c2fbb01
--- /dev/null
+++ b/test/fuse/linux/mount_test.cc
@@ -0,0 +1,41 @@
+// Copyright 2020 The gVisor Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/mount.h>
+
+#include "gtest/gtest.h"
+#include "test/util/temp_path.h"
+#include "test/util/test_util.h"
+
+namespace gvisor {
+namespace testing {
+
+namespace {
+
+TEST(FuseMount, FDNotParsable) {
+ int devfd;
+ EXPECT_THAT(devfd = open("/dev/fuse", O_RDWR), SyscallSucceeds());
+ std::string mount_opts = "fd=thiscantbeparsed";
+ TempPath mount_dir = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateDir());
+ EXPECT_THAT(mount("fuse", mount_dir.path().c_str(), "fuse",
+ MS_NODEV | MS_NOSUID, mount_opts.c_str()),
+ SyscallFailsWithErrno(EINVAL));
+}
+
+} // namespace
+
+} // namespace testing
+} // namespace gvisor