aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorLines
2024-04-22 Use single place to define the version and increase version to 3.17.0 (#932)Bernd Schubert-7/+13
* Use single place to define the version Defining the version in fuse_common.h, is removed, it is defined through meson and provided by "libfuse_config.h". I.e. it avoids to define the version twice - once in meson and once in fuse_common.h. Ideal would be to set integers in the meson file and create the version string from these integers. However, meson requires that "project" is the first meson.build keyword - with that it requires to set the version from a string and then major/minor/hotfix integers are created from string split. Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm> * Increase the version to 3.17.0 This is to prepare the branch for the next release. Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm> --------- Signed-off-by: Bernd Schubert <bernd.schubert@fastmail.fm>
2024-04-20example/: Convert all fuse_session_loop_mt users to 3.12 API (#931)Bernd Schubert-21/+36
Convert all the remaining users of fuse_session_loop_mt() to the new 3.12 config api.
2024-04-20passthrough_ll: fix fd leaks in lo_destroy() (#929)legezywzh-0/+1
By virtio-fs and libfuse fuse_custom_io, passthrough_ll could be a virtio filesystem device backend, this bug was found when doing mount, fsstress and umount repeatedly. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com> Co-authored-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-04-18Add clone_fd to custom IO (#927)legezywzh-5/+25
Define a new clone_fd() helper for fuse_custom_io, users can implement their own clone fd logic. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-04-16fix max_write update in do_init() (#926)legezywzh-3/+3
If user updates conn->max_write in fuse_lowlevel_ops' init() method, do_init() will miss the "conn.max_write > bufsize - FUSE_BUFFER_HEADER_SIZE" judgment, and ->init method will be called after it, which obviously is a bug. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com> Co-authored-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-04-06fusermount: Fix use of uninitialized x_mnt_opts (#924)Bernd Schubert-1/+1
x_mnt_opts was not initialized to 0, but strncat was done Spotted by cppcheck running on our ddn branch.
2024-04-02Add more documentation for FUSE_CAP_EXPORT_SUPPORT (#917)Bernd Schubert-6/+16
Add more documentation for FUSE_CAP_EXPORT_SUPPORT Also remove the flag from passthrough_ll.c and passthrough_hp.cc as these implementations do _not_ handle that flag. They just cast fuse_ino_t to an inode and cause a heap buffer overflow for unknown objects (simplest reproducer are the examples in "man 2 open_by_handle_at", but to unmount/mount the file system after name_to_handle_at and before open_by_handle_at). Fixes https://github.com/libfuse/libfuse/issues/838 --------- Co-authored-by: Nikolaus Rath <Nikolaus@rath.org>
2024-03-29Add support for FUSE_CAP_HANDLE_KILLPRIV_V2Bernd Schubert-0/+29
This just adds in the basic handler, but does not use it yet in examples.
2024-03-27Fix FUSE_CAP_DIRECT_IO_ALLOW_MMAP - use new numerical valueBernd Schubert-1/+1
Commit 22741f5 accidentally re-used (1 << 27), which is already taken for FUSE_CAP_SETXATTR_EXT. Fortunately not part of any release yet.
2024-03-27Install all test/build python packages from requirements.txtAshley Pittman-14/+16
Have GitHub actions setup python on runners and install all python dependencies via pip. Signed-off-by: Ashley Pittman <ashley@pittman.co.uk>
2024-03-24fix readdirplus when filler is called with zero offset (#896)farlongsignal-8/+21
fixes #235 In fill_dir_plus(), there's a lookup for caching dirent attributes. However, when offset = 0 the cache metadata from the lookup is lost as only the entry attributes are passed when added to the list. Kernel doesn't cache the attributes since .ino = 0. This change moves the entry lookup to happen just before the relevant fuse_add_direntry_plus() calls
2024-03-21reset got_init after handling FUSE_DESTROY message (#910)legezywzh-0/+1
User may still need to mount same fuse filesystem after umounting it(In this case, the userspace filesystem server needs to keep live), and after handling FUSE_DESTROY message, new FUSE_INIT message may come, so need to reset got_init to be zero. Signed-off-by: Xiaoguang Wang <lege.wang@jaguarmicro.com>
2024-03-20ci-build.sh: Fix checking for function arguments (#909)Bernd Schubert-1/+1
Checking for an emtpy string actually doesn't work for $@, so just check for number of arguments. Co-authored-by: Bernd Schubert <bschubert@ddn.com>
2024-03-20Add FUSE_FILL_DIR_DEFAULTS enum (#903)FredyVia-10/+12
In order to use the fuse_fill_dir_t function in a C++ program, add the enum item: FUSE_FILL_DIR_DEFAULTS Without this change g++ compilation failed with example/hello.c:94:35: error: invalid conversion from ‘int’ to ‘fuse_fill_dir_flags’ [-fpermissive] 94 | filler(buf, ".", NULL, 0, 0); | ^ | | | int
2024-03-20Fix example/fix-notify_inval_inode.c (#908)Bernd Schubert-5/+27
Similar issue as fixed in commit 3c7ba570 "examples/notify_store_retrieve: Add a clean shutdown". Basically a clean shutdown was missing, but even with clean shutdown it does not work, as kernel side releases inodes before sending FUSE_DESTROY - the intervaled thread then gets -ENOENT. Co-authored-by: Bernd Schubert <bschubert@ddn.com>
2024-03-20Bump actions/checkout from 4.1.1 to 4.1.2 (#905)dependabot[bot]-2/+2
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/b4ffde65f46336ab88eb53be808477a3936bae11...9bb56186c3b09b4f86b1c65136769dd318469633) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-20Merge pull request #904 from bsbernd/s-bit-fusermountBernd Schubert-49/+119
Add back s-bit for compiled fusermount
2024-03-20Add final "meson setup --reconfigure" to README.mdBernd Schubert-1/+4
This reconfigure is recommended to ensure the build system (ninja/cmake/...) get the updated meson config. They typically do, but it depends on file time stamps - is a potential random error source.
2024-03-20/test_ctests / test_notify1: Print cmdline on failureBernd Schubert-0/+1
Tests sometimes fail with pytest.fail('file system process terminated prematurely') And it is not clear what actually happens.
2024-03-20Add glibc backtrace to signal handlerBernd Schubert-0/+17
It is very hard to see in github tests what is actually failing with signals - add the gnu-libc backtrace handler.
2024-03-20ci-build.sh: Add back test without versioned symbolsBernd Schubert-6/+15
Commit b1cdc497 ("ci-build.sh: Run ASAN and UBSAN at the same time") also accidentally removed the test for versioned symbols. Also export clang/clang++ to make sure new shells get it.
2024-03-20Build clang/sanitized build firstBernd Schubert-37/+45
This was stalling - easier to check what happens when it fails fast. And in general, sanitized builds are faster than valgrind and detect almost as much errors as valgrind (same level would be achieved with MSAN, but that is hard to use), so failures can be detected faster whan sanitizers run first.
2024-03-20Fix use-after-free in example/poll.cBernd Schubert-6/+16
As noticed by valgrind in issue #907 example/poll.c triggers a use-after-free ==85200== Thread 2: ==85200== Invalid read of size 4 ==85200== at 0x485E54A: send_notify_iov (fuse_lowlevel.c:2267) ==85200== by 0x485E54A: fuse_lowlevel_notify_poll (fuse_lowlevel.c:2289) ==85200== by 0x1096F2: fsel_producer (poll.c:245) ==85200== by 0x4897EA6: start_thread (pthread_create.c:477) ==85200== by 0x49ADA6E: clone (clone.S:95) ==85200== Address 0x5291d68 is 392 bytes inside a block of size 920 free'd ==85200== at 0x48399AB: free (vg_replace_malloc.c:538) ==85200== by 0x485A12C: fuse_destroy (fuse.c:5103) ==85200== by 0x486220F: fuse_main_real (helper.c:389) ==85200== by 0x1091D6: main (poll.c:288) ==85200== Block was alloc'd at ==85200== at 0x483AB65: calloc (vg_replace_malloc.c:760) ==85200== by 0x485BAA0: fuse_session_new (fuse_lowlevel.c:3036) ==85200== by 0x4859AF2: fuse_new@@FUSE_3.1 (fuse.c:4966) ==85200== by 0x4862129: fuse_main_real (helper.c:345) ==85200== by 0x1091D6: main (poll.c:288) Issue is that the "fsel_producer" thread is still active after fuse_destroy - it gets destructed too late.
2024-03-20Add back s-bit for compiled fusermountBernd Schubert-0/+8
This is also needed by some tests and was accidentally removed in commit aab146eea8877ee744a1b5a0da8bbbf31d14bad1
2024-03-20Fix test failures: Create missing mount dirBernd Schubert-2/+14
Tests were failing because mount dir was missing. Unclear to me why this became only recently an issue (github internal - out of the sudden tests were hanging).
2024-03-20ci-build.sh: Reduce pytest --maxfail from 99 to 1Bernd Schubert-1/+3
We want to see errors - reduce allowed errors. With --maxfail=99 tests out of the sudden started to hang in github, without a change in libfuse (I had actually tested to previous release tags). With --maxfail=1 pytest aborts and we see failing github. Also increase python log level to NOTSET - NOTSET should print all messages. Also use "pytest" has wrapper for "python3 -m"
2024-03-07Merge pull request #901 from bsbernd/posix_spawnBernd Schubert-127/+168
Switch from fork to posix_spawn
2024-03-07ci-build.sh: Always install and add s-bit for fusermount3Bernd Schubert-6/+14
As per pull #898, fusermount3 had a severe issue that should have been detected by ASAN. I guess tests used the system default and not the sanitized binary. Order of execution of fusermount3 is to try 1) full install path if that fails 2) just fusermount3 So tests should be fixed by installing libfuse, setting the s-bit on fusermount3 and then to run the tests.
2024-03-07ci-build.sh: Run ASAN and UBSAN at the same timeBernd Schubert-20/+20
Also set halt_on_error=1 to make UBSAN to fail if it would find something.
2024-03-07posix_spawn style updatesBernd Schubert-32/+64
- This adds a wrapper function for the call sequence of posix_spawn and posix_spawnp. - Replaces perror() with fuse_log - the latter can be redirected through the file system log function and gives better end user friendly output - other minor changes, like variable renames - no functional change
2024-03-07Use posix_spawn instead of fork+execMatthias Goergens-98/+99
Client code might allocate a lot of memory before starting the mount. Fork is slow for processes that are using a lot of memory. But posix_spawn fixes that. Another issue with fork is if the process is also doing RDMA - this might lead to data corruption, as least if memory used for RDMA is not marked with MADV_DONTFORK. At least with linux kernels before 5.12. Also see https://blog.nelhage.com/post/a-cursed-bug/ for more details Change by Bernd: This also prepares the new fusermount option "--comm-fd", but keeps the previous way to pass the parameter as env variable. In a future release (exact data to be determined) we are going to remove usage of the env variable and will switch to the new parameter.
2024-03-06Fix undefined loff_t in test_write_cache.c on alpineBernd Schubert-0/+2
This fixes #899. Seems that Alpine (and maybe Fedora) need _GNU_SOURCE to get loff_t.
2024-03-05fusermount: Fix head-buffer-overflow in extract_x_optionsBernd Schubert-29/+84
Commit 74b1df2e introduced a heap-buffer-overflow, as allocated memory was not initialized and extract_x_options was also not checking for the remaining buffer size. Fix is to initialize the buffer and to also not exceed the buffer size. Actually not exceeding buffer size is rather complex with C and introduced quite some code changes. Also fixed is a memory leak of allocated buffers in the commit mentioned above.
2024-02-26meson: Point OSX (darwin) to https://www.fuse-t.org/Bernd Schubert-1/+2
www.fuse-t.org is a more recent fuse extension for OSX based on NFS.
2024-02-26example/notify_store_retrieve: Fix races and handle errorsBernd Schubert-11/+38
This test was racy, the lookup counter must only be increased once kernel side has lookup completed and knows about the inode. However, this is still racy as app thread (python script) kernel-side libfuse thread kernel ---------------------------------------------------------------------- open file lookup req wait handle req reply wake app thread return new_inode() <continue file open> So actually on libfuse side even after returning from kernel side it is not ensured that the kernel has created the inode. I.e. using lookup_cnt in the test is still racy. A new variabled 'open_cnt' is added that is only increased in open Using open_cnt should be safe to use as kernel side (with atomic-open) first does lookup, from that data creates the inode and only then sends an open request. I.e. update_fs_loop() must only call fuse_lowlevel_notify_store() once it is absolutely sure kernel side has created the inode (open_cnt) and when it is sure the kernel inode still exists (lookup_cnt). Not really nice, but we actually need to accept some errors, as these still come up at umount time. Typically it is hard to hit, but tests in github actually frequently get it. Actually, it can be easily reproduced by commenting out the sleep line in update_fs_loop(). Underlying issue is that kernel side is sending ->destroy() only when it already internally released all inodes - too late for this test. The errors I run into are ENOENT and EBADFD, but I added back in ENODEV for safety. In order to avoid any other kind races mutex lock is also introduced.
2024-02-26Fix tests/test_write_cache in write back mode (#892)Bernd Schubert-8/+33
This test could fail whenever a something (kernel, userspace) decides to flush in between of two 2048B writes. These two writes are supposed to be merged into a single 4906 byte write by the kernel writeback cache, but _sometimes_ the test fails because 2048 byte writes get through. Fixes #882 Solution here is a modification how the test works - instead of requiring an exact aggregation of 2x2048B into 4096B, it now writes 64x2048B and requires in write-back modes the number of received writes requests is lower than 64 - we can expect that at least some writes get aggregated, but we do know how many. Co-authored-by: Bernd Schubert <bschubert@ddn.com>
2024-02-26Merge pull request #888 from yangyun50/masterBernd Schubert-4/+54
passthrough examples: enable direct io when open has flag: O_DIRECT
2024-02-26Enable direct IO for passthrough examples when open has flag O_DIRECTyangyun-0/+28
Shared locks (parallel_direct_writes) cannot be enabled for O_DIRECT, as O_DIRECT may be set past file open time with fcntl(fd, F_SETFD, ...). Kernel side fuse has precautions for shared lock direct-IO (direct_io in libfuse), as it needs an exclusive inode lock when direct and page cache IO happend at the same time. In order to enjoy the parallel_direct_writes feature (i.e., get a shared lock, not exclusive lock) for writes to the same file), direct_io is needed. The feature direct_io is corresponding to FOPEN_DIRECT_IO in fuse kernel. FOPEN_DIRECT_IO and O_DIRECT are not entirely the same as described above. So enable direct_io (i.e., FOPEN_DIRECT_IO in fuse kernel) to enjoy parallel direct_writes. Some patches related to FOPEN_DIRECT_IO and O_DIRECT are below: https://lore.kernel.org/all/753d6823-e984-4730-a126-d66b65ea772c@ddn.com
2024-02-24Passthrough options starting with "x-" to mtab (#894)Matthew-6/+54
This implements #651, tested with bindfs. "x-*" options are comments meant to be interpreted by userspace. #651 is about some 3rd party mount options like 'x-gvfs-notrash'. This also removes the test if /etc/mtab is a symlink. This test was added in commit 5f28cd15ab43c741f6d116be4d3a9aa5d82ab385 and the corresponding ChangeLog entry in this commit points to mount issues for read-only mtab. However, in all recent Linux distributions /etc/mtab is a symlink to /proc/self/mounts and never writable. In fact, util-linux 2.39 (libmount) entirely removed support for a writable mtab. At least since util-linux 2.19 (10-Feb-2011) /run/mount/utab is used as replacement for userspace mount entries..
2024-02-23passthrough_example: make parallel_direct_writes more clearlyyangyun-4/+26
Move the parallel_direct_writes enable action to the init function in high level API, it is more recommended just like commit 8ee553dac. Besides, add some comments to show that the feature parallel_direct_writes is depend on the feature direct_io (refer to kernel side patch series to consolidate direct IO, link: https://lwn.net/ml/linux-fsdevel/ 20230918150313.3845114-1-bschubert@ddn.com for the reason).
2024-02-20remove duplicated fuse_chan_put() (#893)yangyun50-2/+0
2024-01-29make FUSE_CAP_EXPIRE_ONLY test depend on available cap and not on versionHereThereBeDragons-2/+2
2024-01-29add support for kernel flag FUSE_HAS_EXPIRE_ONLYHereThereBeDragons-1/+1
2024-01-20Add processing for FUSE_CAP_HANDLE_KILLPRIV and disable it by defaultbigbrotherwei-2/+3
'FUSE_CAP_HANDLE_KILLPRIV' is not enabled by default anymore, as that would be a sudden security issue introduced by a new ABI and API compatible libfuse version.
2024-01-10Don't set FUSE_CAP_PARALLEL_DIROPS by defaultMiklos Szeredi-3/+0
Allowing parallel dir operations could result in a crash in a filesystem implementation that is not prepared for this. To be safe keep this flag off by default (this is not a regression, since there was no public release where this flag wasn't ignored). If the filesystem wants better performance, then it should set this flag explicitly. Fixes: c9905341ea34 ("Pass FUSE_PARALLEL_DIROPS to kernel (#861)") Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
2024-01-10Add FUSE_CAP_DIRECT_IO_ALLOW_MMAP and use in passthrough_hpBernd Schubert-0/+17
This is not called FUSE_CAP_DIRECT_IO_RELAX, as the kernel flag FUSE_DIRECT_IO_RELAX is supposed to be renamed to FUSE_DIRECT_IO_ALLOW_MMAP. The corresponding kernel patches just did not land yet.
2024-01-10Add in rename to FUSE_DIRECT_IO_ALLOW_MMAPBernd Schubert-4/+6
Add in the rename of FUSE_DIRECT_IO_RELAX to FUSE_DIRECT_IO_ALLOW_MMAP.
2024-01-10Synchronize fuse_kernel.h from current linux masterBernd Schubert-1/+62
2023-12-28examples/notify_store_retrieve: Add a clean shutdownBernd Schubert-11/+20
On shutdown update_fs_loop() was failing frequently in github test with ENOENT, but only ENODEV was tested for and only for the. With clean shutdown there is no need to test for such errors at all.
2023-12-17Allow *xattr operations on root directory (ino 1)amitgeron-5/+6