Commit Graph

4360 Commits

Author SHA1 Message Date
Fabricio Voznika da07e38f7c Remove option to panic gofer
Gofer panics are suppressed by p9 server and an error
is returned to the caller, making it effectively the
same as returning EROFS.

PiperOrigin-RevId: 332282959
2020-09-17 12:01:45 -07:00
Jamie Liu f0b1bd434e Deflake vdso_clock_gettime test.
PiperOrigin-RevId: 332281930
2020-09-17 11:59:55 -07:00
Jamie Liu 51a2fe8eb4 Disable nodejs12.4 test async-hooks/test-statwatcher.
PiperOrigin-RevId: 332281912
2020-09-17 11:53:10 -07:00
Fabricio Voznika a11061d78a Add VFS2 overlay support in runsc
All tests under runsc are passing with overlay enabled.

Updates #1487, #1199

PiperOrigin-RevId: 332181267
2020-09-17 01:09:42 -07:00
Tiwei Bie ed4570e6f0 fsimpl: improve the "implements" comments
As noticed by @ayushr2, the "implements" comments are not
consistent, e.g.

// IterDirents implements kernfs.inodeDynamicLookup.
// Generate implements vfs.DynamicBytesSource.Generate.

This patch improves this by making the comments like this
consistently include the package name (when the interface
and struct are not in the same package) and method name.

Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
2020-09-17 11:45:09 +08:00
gVisor bot ae59e52979 Merge pull request #3934 from avagin:feature/fuse
PiperOrigin-RevId: 332122081
2020-09-16 17:12:57 -07:00
Chong Cai 2868308555 Implement OpenAt() for verity fs
OpenAt() for verity fs is implemented by opening both the target file or
directory and the corresponding Merkle tree file in the underlying file
system. Generally they are only open for read. In allowRuntimeEnable
mode, the Merkle tree file is also open for write.

PiperOrigin-RevId: 332116423
2020-09-16 16:43:34 -07:00
Zeling Feng 64aae6bbd6 Cleanup device name confusion in packetimpact testbench
There are two device names on the test net.
- The sniffer/injector device which is always a linux device. Only the
testbench library is interested in this device.
- The device which is on the DUT. It happens to be the same device as
the former if DUT is linux. An individual test might be interested in
this device if the test cares about the device name.

PiperOrigin-RevId: 332112968
2020-09-16 16:26:10 -07:00
Nayana Bidari b6d165fe98 Automated rollback of changelist 329526153
PiperOrigin-RevId: 332097286
2020-09-16 15:06:55 -07:00
Ghanan Gowripalan 29ce0ad160 Bind loopback subnets' lifetime to perm address
The lifetime of addreses in a loopback interface's associated subnets
should be bound to their respective permanent addresses.

This change also fixes a race when the stack attempts to get an IPv4
rereferencedNetworkEndpoint for an address in an associated subnet on
a loopback interface. Before this change, the stack would only check
if an IPv4 address is contained in an associated subnet while holding
a read lock but wouldn't do this same check after releasing the read
lock for a write lock to create a temporary address. This may cause
the stack to bind the lifetime of the address to a new (temporary)
endpoint instead of the associated subnet's permanent address.

Test: integration_test.TestLoopbackSubnetLifetimeBoundToAddr
PiperOrigin-RevId: 332094719
2020-09-16 14:56:52 -07:00
Chong Cai 3749e70a69 Implement PRead for verity fs
PRead is implemented by read from the underlying file in blocks, and
verify each block. The verified contents are saved into the output
buffer.

PiperOrigin-RevId: 332092267
2020-09-16 14:45:39 -07:00
Ting-Yu Wang 666397c5c8 Gracefully translate unknown errno.
Neither POSIX.1 nor Linux defines an upperbound for errno.

PiperOrigin-RevId: 332085017
2020-09-16 14:12:22 -07:00
Ayush Ranjan 0356c7ef32 [runtime tests] Add documentation.
Added a README describing what these tests are, how they work and how to run
them locally. Also reorganized the exclude files into a directory.

PiperOrigin-RevId: 332079697
2020-09-16 13:48:26 -07:00
gVisor bot 49857849f9 Merge pull request #3893 from lubinszARM:pr_n1_03
PiperOrigin-RevId: 332069743
2020-09-16 13:03:01 -07:00
Jinmou Li c4c302a27e fuse: fix data race in fusefs Release()
fix #3956
2020-09-16 12:22:17 -07:00
Jinmou Li 70cf503b4c fuse: fix FUSE_RELEASE reply handling
fix #3963
2020-09-16 12:22:17 -07:00
Jinmou Li 26879c32b8 FUSE readdir test fix ino initialization 2020-09-16 12:22:17 -07:00
Jinmou Li 5c080f07de Update fuse.md design doc with design details 2020-09-16 12:22:17 -07:00
Andrei Vagin 5bf05ad3ce test/fuse: use the getdents syscall instead of opendir/readdir
opendir() is a libc wrapper. Different libc-s can implement it
differently.
2020-09-16 12:22:17 -07:00
Andrei Vagin 99fca1bf9a test/fuse: clean up 2020-09-16 12:22:17 -07:00
Jinmou Li 96fb1e60c3 Fix FUSE connection control lock ordering and race in unit test 2020-09-16 12:22:17 -07:00
Andrei Vagin 3ea925a423 fuse: don't pass lock by value
copylocks: directory.go:34:7: Allocate passes lock by value:
fuse/fuse.directoryFD contains fuse/fuse.fileDescription contains
pkg/sentry/vfs/vfs.FileDescription contains pkg/sync/sync.Mutex
2020-09-16 12:22:17 -07:00
Andrei Vagin 92a020c798 fuse: fix a compile time error
readdir_test.cc:134:24: error: variable length arrays are a C99 feature [-Werror,-Wvla-extension]
  char readdir_payload[readdir_payload_size];
2020-09-16 12:22:17 -07:00
Andrei Vagin f148242aba Revert "fuse: add benchmarking support for FUSE"
test/fuse/benchmark/read_benchmark.cc:34: Failure
Expected: (fuse_prefix) != (nullptr), actual: NULL vs (nullptr)
external/com_google_benchmark/src/benchmark_runner.cc:120: RunInThread:
Check `st.iterations() >= st.max_iterations' failed. Benchmark returned
before State::KeepRunning() returned false!
--- FAIL: Benchmarks_BM_Read/262144/real_time (0.29s)
    runner.go:502: test "Benchmarks.BM_Read/262144/real_time" failed
    with error exit status 134, want nil
FAIL
2020-09-16 12:22:17 -07:00
Jinmou Li 113928754c Fix FUSE unit test after vfs interface change 2020-09-16 12:22:17 -07:00
Jinmou Li 093b0ab6c5 Fix FUSE go unit test merge conflict mistake 2020-09-16 12:22:14 -07:00
Ghanan Gowripalan 87c5c0ad25 Receive broadcast packets on interested endpoints
When a broadcast packet is received by the stack, the packet should be
delivered to each endpoint that may be interested in the packet. This
includes all any address and specified broadcast address listeners.

Test: integration_test.TestReuseAddrAndBroadcast
PiperOrigin-RevId: 332060652
2020-09-16 12:20:45 -07:00
Andrei Vagin c6e749fb32 fs/fuse: Move the 'marshal' and 'primitive' packages to the 'pkg' directory. 2020-09-16 12:19:30 -07:00
Boyuan He 8ab32686e2 fuse_open: add padding to open out request 2020-09-16 12:19:30 -07:00
Craig Chi dd10352729 Unexport fusefs.inode.nodeID 2020-09-16 12:19:30 -07:00
Boyuan He 2051260e82 Implement FUSE_UNLINK
Fixes #3696
2020-09-16 12:19:30 -07:00
Craig Chi 70cfea2377 Fix comments of TODO issues. 2020-09-16 12:19:30 -07:00
Jinmou Li d459bb3372 Add FUSE umount support
This change implements Release for the FUSE filesystem
and expected behaviors of the FUSE devices.
It includes several checks for aborted connection
in the path for making a request and a function
to abort all the ongoing FUSE requests in order.
2020-09-16 12:19:30 -07:00
Jinmou Li 4edc56d3e9 Fix FUSE_RELEASE protocol reply processing
This commit fixes the potential unexpected errors
of original handling of FUSE_RELEASE responses while
keep the same behavior (ignoring any reply).
2020-09-16 12:19:30 -07:00
Jinmou Li 826a685a95 Improve FUSE async/noreply call logic
This change adds bookkeeping variables for the
FUSE request. With them, old insecure confusing
code we used to process async requests is replaced
by new clear compiling ones. Future code can take
advantage of them to have better control of each
requests.
2020-09-16 12:19:30 -07:00
Jinmou Li f1219ec5f1 Refactor FUSE connection for readability and structure
This change decouples the code that is weakly
tied to the connection struct from connection.go,
rename variables and files with more meaningful choices,
adds detailed comments, explains lock orders,
and adds other minor improvement to make
the existing FUSE code more readable and
more organized.

Purpose is to avoid too much code in one file
and provide better structure for the
future commits.
2020-09-16 12:19:30 -07:00
Craig Chi 2fbbe3b768 Add comments for exported attributes 2020-09-16 12:19:30 -07:00
Craig Chi bf8efe8cdf Implement FUSE_SETATTR
This commit implements FUSE_SETATTR command. When a system call modifies
the metadata of a regular file or a folder by chown(2), chmod(2),
truncate(2), utime(2), or utimes(2), they should be translated to
corresponding FUSE_SETATTR command and sent to the FUSE server.

Fixes #3332
2020-09-16 12:19:30 -07:00
Craig Chi 4181e8c974 Add fh support for revise attr and fstat(2) test
According to Linux 4.4's FUSE behavior, the flags and fh attributes in
FUSE_GETATTR are only used in read, write, and lseek. fstat(2) doesn't
use them either. Add tests to ensure the requests sent from FUSE module
are consistent with Linux's.

Updates #3655
2020-09-16 12:19:30 -07:00
Craig Chi 1146ab6bac Add fuse_fd_util library to include common fuse fd test functions 2020-09-16 12:19:30 -07:00
Craig Chi e63abd82dd Add default attr in fuse_util
fuse_util provides utilities for fuse testing. Add a function to return
a stub fuse_attr struct with specified mode and nodeid.
2020-09-16 12:19:30 -07:00
Jinmou Li 98faed55e6 Implement FUSE_WRITE
This commit adds basic write(2) support for FUSE.
2020-09-16 12:19:30 -07:00
Craig Chi 18f1e1c91b Implement FUSE_CREATE
FUSE_CREATE is called when issuing creat(2) or open(2) with O_CREAT. It
creates a new file on the FUSE filesystem.

Fixes #3825
2020-09-16 12:19:30 -07:00
Jinmou Li 7ed4e46a71 FUSE device: clean up readLocked
This change removes the unnecessary loop and avoids
the recursive call. It also fixes minor bugs in this
function.
2020-09-16 12:19:30 -07:00
Jinmou Li e91c026672 Downgrade FUSE minor version support and clarify comments 2020-09-16 12:19:30 -07:00
Craig Chi 1d8029022e fuse: remove unused marshalling functions
This commit removes unused marshalling functions in linux abi package
and moves self-defined FUSEInitRes wrapper to fuse package.

Updates #3707
2020-09-16 12:19:30 -07:00
Boyuan He & Ridwan Sharif cb9a2a1ad4 fuse: add benchmarking support for FUSE
This change adds the following:
-  Add support for containerizing syscall tests for FUSE
-  Mount tmpfs in the container so we can run benchmarks against it
-  Run the server in a background process
-  benchmarks for fuse syscall

Co-authored-by: Ridwan Sharif <ridwanmsharif@google.com>
2020-09-16 12:19:30 -07:00
Craig Chi 449986264f Support multiple FUSE kernel versions of FUSE_INIT response struct
The fuse_init_out struct changes in different FUSE kernel versions. A
FUSE server may implement older versions of fuse_init_out, but they
share common attributes from the beginning. Implement variable-length
marshallable interface to support older versions of ABI.

Fixes #3707
2020-09-16 12:19:30 -07:00
Craig Chi 983e30c016 Implementing inode.Getlink
kernfs uses inode.Getlink to resolve symlink when look up paths.

Updates #3452
2020-09-16 12:19:30 -07:00
Craig Chi 21cac9dd04 Fix FUSE_READDIR offset issue
According to readdir(3), the offset attribute in struct dirent is the
offset to the next dirent instead of the offset of itself. Send the
successive FUSE_READDIR requests with the offset retrieved from the last
entry.

Updates #3255
2020-09-16 12:19:30 -07:00