Commit Graph

1997 Commits

Author SHA1 Message Date
Bernd Schubert
30a126c5f9 API update for fuse_loop_config additions
struct fuse_loop_config was passed as a plain struct, without any
version identifer. This had two implications

1) Any addition of new parameters required a FUSE_SYMVER for
fuse_session_loop_mt() and fuse_loop_mt() as otherwise a read
beyond end-of previous struct size might have happened.

2) Filesystems also might have been recompiled and the developer
might not have noticed the struct extensions and unexpected for
the developer (or people recomliling the code) uninitialized
parameters would have been passed.


Code is updated to have struct fuse_loop_config as an opaque/private
data type for file systems that want version 312
(FUSE_MAKE_VERSION(3, 12)). The deprecated fuse_loop_config_v1
is visible, but should not be used outside of internal
conversion functions

File systems that want version >= 32 < 312 get the previous
struct (through ifdefs) and the #define of fuse_loop_mt
and fuse_session_loop_mt ensures that these recompiled file
systems call into the previous API, which then converts
the struct. This is similar to existing compiled applications
when just libfuse updated, but binaries it is solved with
the FUSE_SYMVER ABI compact declarations.

Signed-off-by: Bernd Schubert <bschubert@ddn.com>
2022-09-04 13:07:15 +01:00
Nikolaus Rath
7657ec158b Revert "Increase meson min version and avoid get_pkgconfig_variable warning (#682)"
This reverts commit 8db2ba06fe. This Meson version is not
yet generally available, so we do not want to depend on it..
2022-07-02 14:39:32 +01:00
Nozomi Miyamori
e6095912e3
Remove member m from fuse_fs (#684)
fuse_fs.m is no longer used. Modules are now managed by fuse_modules.

fix: free dangling pointer of module #683
2022-07-02 14:35:15 +01:00
Bernd Schubert
8db2ba06fe
Increase meson min version and avoid get_pkgconfig_variable warning (#682)
meson was complaining:

Build targets in project: 27
NOTICE: Future-deprecated features used:
 * 0.56.0: {'Dependency.get_pkgconfig_variable'}


So change to .get_variable(pkgconfig : 'type' and also increase
the meson minimal version to be able to handle it.

Co-authored-by: Bernd Schubert <bschubert@ddn.com>
2022-06-20 13:58:12 +01:00
Bernd Schubert
8d934122df Fix a test strncpy compilation warning with recent gcc
meson configure -D buildtype=debugoptimized
meson configure -D b_sanitize=address,undefined

Results in '-fsanitize=address,undefined ... -O2 -g' that made
compilation to give errors with recent gcc versions.


bernd@t1700bs build-ubuntu>ninja -v
[1/2] ccache gcc -Itest/test_syscalls.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -fsanitize=address,undefined -fno-omit-frame-pointer -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -O2 -g -D_REENTRANT -DHAVE_CONFIG_H -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -fno-strict-aliasing -Wno-unused-result -DHAVE_SYMVER_ATTRIBUTE -MD -MQ test/test_syscalls.p/test_syscalls.c.o -MF test/test_syscalls.p/test_syscalls.c.o.d -o test/test_syscalls.p/test_syscalls.c.o -c ../test/test_syscalls.c
FAILED: test/test_syscalls.p/test_syscalls.c.o
ccache gcc -Itest/test_syscalls.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -fsanitize=address,undefined -fno-omit-frame-pointer -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -O2 -g -D_REENTRANT -DHAVE_CONFIG_H -Wno-sign-compare -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings -fno-strict-aliasing -Wno-unused-result -DHAVE_SYMVER_ATTRIBUTE -MD -MQ test/test_syscalls.p/test_syscalls.c.o -MF test/test_syscalls.p/test_syscalls.c.o.d -o test/test_syscalls.p/test_syscalls.c.o -c ../test/test_syscalls.c
In file included from /usr/include/string.h:519,
                 from ../test/test_syscalls.c:7:
In function ‘strncpy’,
    inlined from ‘test_socket’ at ../test/test_syscalls.c:1885:2,
    inlined from ‘main’ at ../test/test_syscalls.c:2030:9:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:95:10: error: ‘__builtin_strncpy’ output may be truncated copying 107 bytes from a string of length 1023 [-Werror=stringop-truncation]
   95 |   return __builtin___strncpy_chk (__dest, __src, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   96 |                                   __glibc_objsize (__dest));
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~



I disagree a bit on the gcc sanity here, as the code was behaving
correctly and even already checked the string length. But sice
the string length is already verified, that length can be used
for the final strncpy.
2022-05-06 21:21:06 +01:00
Nikolaus Rath
a56147d3cb Released 3.11.0 2022-05-02 10:11:41 +01:00
André Schröder
96ad05c8e1 patch: document ignored fill parameter of readdir 2022-04-20 11:15:08 +01:00
Bernd Schubert
7e5278c03d Add missing kernel flags up to 1ULL << 33
Just a further sync with the in-kernel flags.
2022-04-17 13:45:38 +01:00
Bernd Schubert
34a7ad5e9d Set FUSE_INIT_EXT in fuse_init_out::flags
It is better to tell the kernel that libfuse knows
about the 64 bit flag extension.
2022-04-17 13:45:18 +01:00
Dharmendra singh
646ff0bb3b Passthrough_ll should display cmd line options
Make passthrough_ll to display all its cmdline options
instead of keeping them hidden.
(I am not sure if these are intentionally kept hidden)
2022-04-08 15:36:01 +01:00
Dharmendra Singh
4df08719f3 Modify structures in libfuse to handle flags beyond 32 bits.
In fuse kernel, 'commit 53db28933e95 ("fuse: extend init flags")'
made the changes to handle flags going beyond 32 bits but i think
changes were not done in libfuse to handle the same.

This patch prepares the ground in libfuse for incoming FUSE kernel
patches (Atomic open + lookup) where flags went beyond 32 bits.
It makes struct same as in fuse kernel resulting in name change of
few fields.
2022-04-08 15:34:32 +01:00
Bernd Schubert
f0bba7ef2a passthrough_hp: Disable splice with the --nosplice option
passthrough_hp was not updated when splice got enabled by default in libfuse3.
I.e. the --nosplice option and condition on it was a noop.
2022-03-31 15:27:02 +01:00
Bernd Schubert
f8a24e9ec7 passthrough_hp: Fix inode ref in sfs_unlink
sfs_unlink may call do_lookup(), which increases the inode ref count,
but since that function does not return attributes that lookup ref
count won't get automatically decreased.
2022-03-31 15:27:02 +01:00
Nikolaus Rath
a6a01c4a76
Merge pull request #649 from fdinoff/fix_clone_fd
Fix fd leak with clone_fd
2022-03-22 08:46:33 +00:00
Frank Dinoff
2da64ec9a3 Fix fd leak with clone_fd
do_interrupt would destroy_req on the request without decrementing the
channel's refcount. With clone_fd this could leak file descriptors if
the worker thread holding the cloned fd was destroyed. (Only
max_idle_threads are kept).
2022-03-21 15:02:26 -04:00
Nikolaus Rath
2b7a6f065b
Merge pull request #635 from amir73il/fopen_noflush
Add support for FOPEN_NOFLUSH flag
2022-03-14 09:48:43 +00:00
Nikolaus Rath
66b04453b7
Merge branch 'master' into fopen_noflush 2022-03-14 09:25:00 +00:00
David Galeano
3c2ba7aa25
Removed duplicates code. (#642)
The cap for FUSE_CAP_WRITEBACK_CACHE was printed twice.
2022-02-11 20:07:00 +00:00
Jean-Pierre André
5128cee2dd
Fixed returning an error condition to ioctl(2) (#641)
When returning a negative error code by ->ioctl() to the high level
interface, no error is propagated to the low level, and the reply
message to the kernel is shown as successful.

A negative result is however returned to kernel, so the kernel can
detect the bad condition, but this appears to not be the case since
kernel 5.15.

The proposed fix is more in line with the usual processing of errors
in fuse, taking into account that ioctl(2) always returns a non-negative
value in the absence of errors.

Co-authored-by: Jean-Pierre André <jpandre@users.sourceforge.net>
2022-02-09 14:59:10 +00:00
Andrew Gaul
b08e275083
Fix ReST end-string nits (#638)
This makes the file more readable with syntax highlighting.
2022-01-23 10:17:03 +00:00
Ken Schalk
6ddd14f2b1
Avoid ENOENT response when recently invalidated fuse_ino_t is received from the kernel (#636) 2022-01-11 19:56:36 +00:00
Amir Goldstein
435a14e029 Add test for FOPEN_NOFLUSH flag
Simulate write() delay and verify that close(rofd) does not
block waiting on pending writes.

The support for the flag was added in kernel v5.16-rc1.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2022-01-05 08:43:43 +02:00
Amir Goldstein
dad15aee26 Add no_rofd_flush mount option
To disable flush for read-only fd.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2022-01-03 14:55:34 +02:00
Amir Goldstein
1b498ac9b3 Add support for FOPEN_NOFLUSH flag
Allow requesting from kernel to avoid flush on close at file open
time.  If kernel does not support FOPEN_NOFLUSH flag, the request
will be ignored.

For passthrough_hp example, request to avoid flush on close when
writeback cache is disabled and file is opened O_RDONLY.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2022-01-03 14:55:34 +02:00
Maximilian Heinzler
48ae2e72b3
Document possible NULL paths when directories are removed (#633)
When directories with open handles are removed, the releasedir and
fsyncdir operations might be called with a NULL path. That is because
there is no hiding behavior like for regular files and the nodes get
removed immediately.
2021-12-12 16:28:57 +00:00
Luis Henriques
cee6de8d66
test/test_syscalls.c: allow EBADF in fcheck_stat() (#631)
Test test/test_examples.py::test_passthrough_hp[False] fails because, on
kernels >= 5.14, fstat() will return -EBADF:

3 [check_unlinked_testfile] fcheck_stat() - fstat: Bad file descriptor
4 [check_unlinked_testfile] fcheck_stat() - fstat: Bad file descriptor
5 [check_unlinked_testfile] fcheck_stat() - fstat: Bad file descriptor
9 [check_unlinked_testfile] fcheck_stat() - fstat: Bad file descriptor
...

This patch simply whitelists the EBADF errno code.

Signed-off-by: Luís Henriques <lhenriques@suse.de>
Co-authored-by: Luís Henriques <lhenriques@suse.de>
2021-11-20 10:09:25 +00:00
Nikolaus Rath
d709c24cbd Released 3.10.5 2021-09-06 13:45:29 +01:00
lixiaokeng
aaf767a6cc
Fix: fd and memory leak in mount.fuse.c (#614)
The command isn't freed and the fuse_fd isn't
closed if execl failed. Fix it.

Signed-off-by: Lixiaokeng <lixiaokeng@huawei.com>
2021-09-06 13:37:45 +01:00
a1346054
9677eca556 use same hashbang as in rest of repository 2021-08-25 14:46:25 +02:00
a1346054
173bffc9f4 fix spelling 2021-08-25 14:46:25 +02:00
a1346054
6100b64054 remove executable file mode bit from source files 2021-08-25 14:46:25 +02:00
Giulio Benetti
5f3fec6a79 meson.build: fix wrong .symver detection
As pointed here [1] __has_attribute() is broken for many attributes and
if it doesn't support the specific attribute it returns true, so we
can't really rely on that for this check. This lead to Buildroot
libfuse3 build failure [2] where that shows up with:
```
error: symver is only supported on ELF platforms
```
Indeed Microblaze doesn't support ELF since it doesn't include elfos.h,
but __has_attribute(symver) returns true.

So let's substitute the #ifdef __has_attribute() with a stronger test on
a function foo() with __attribute__((symver ("test@TEST"))).

[1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766
[2]: http://autobuild.buildroot.net/results/d6c/d6cfaf2aafaeda3c12d127f6a2d2e175b25e654f/build-end.log

Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
2021-08-04 09:56:44 +01:00
Nikolaus Rath
624327ba00 Travis-CI: Make sure lsan supppressions file can be read by root. 2021-06-24 09:11:29 +01:00
Amir Goldstein
570933394e Do not run unlinked files test on passthrough_hp with old kernels
test_syscalls unlinked testfiles check fails on passthourhg_hp without
the kernel commit "fuse: fix illegal access to inode with reused nodeid"
queued for kernel 5.14 [1].

Make this check opt-in and do not run it with kernel version before 5.14.

[1] https://lore.kernel.org/linux-fsdevel/CAJfpegtGKjeK8E5QsHKF0=re1J9wVHuGRVgg9NDJ_OOwQdCUNg@mail.gmail.com/

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2021-06-23 11:46:19 +01:00
lixiaokeng
a1e41676e3 Fix: a potential crash on failure to setlocale
setlocale() can fail, returning NULL, which will lead
to a crash in iconv_new(). Fix it like in iconv_help().

Signed-off-by: Lixiaokeng <lixiaokeng@huawei.com>
2021-06-16 18:25:14 +01:00
Amir Goldstein
80f2b8b469 passthrough_hp: excercise reusing inode numbers
Before last unlink() release the reference on inode.fd to allow reuse
of underlying fs inode number, mark the server inode "deleted" and bump
it's generation counter.

When same inode number is found on lookup(), the server inode object will
be reused as well.

Skip this when inode has an open file and when writeback cache is enabled.

This will be used to verify inode reuse bug fix in the kernel.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2021-06-14 09:13:12 +01:00
Amir Goldstein
10ecd4fda4 test/test_syscalls.c: check unlinked testfiles at the end of the test
On some tests on regular files, open an O_PATH fd of the testfile and
record it along side the size and mode and inode.

At the end of all tests, use recorded testfiles info to re-check the size
mode and inode of the unlinked testfiles.

With O_PATH fd, the server does not have to keep the inode alive so FUSE
inode may be stale or bad.  Therefore, ESTALE and EIO are valid results
for fstat() on the old testfile fd's, but returning the wrong size or
mode is an invalid result.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2021-06-14 09:13:12 +01:00
Amir Goldstein
494e15127c test/test_syscalls.c: refactor fcheck_* helpers
Avoid multiple fstat() calls and consolidate all fcheck_* helpers
into fcheck_stat().

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2021-06-14 09:13:12 +01:00
Amir Goldstein
057d6de867 test/test_syscalls.c: use unique filename per test
Generate unique filename per test (only for regular file for now).
Make sure to unlink the unique filename after each test.

realpath variable was renamed to basepath_r to fix build warning
on conflicting symbols with realpath() function.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2021-06-14 09:13:12 +01:00
Nikolaus Rath
c56ba92047 Released 3.10.4 2021-06-09 09:13:01 +01:00
asafkahlon
c7a8b42f31
Add an option to disable building tests (#533)
Signed-off-by: Asaf Kahlon <asafka7@gmail.com>
2021-06-09 09:07:25 +01:00
Christian Menges
57b46adc35
Cuse example: Fix memory leak (#607)
* cuse example: fix memory leak

* Travis CI: re-enable leak checking
2021-06-09 09:04:41 +01:00
Sergey Fedoseev
f4187fe5fa
fix typo in man (#609) 2021-06-09 09:04:08 +01:00
Amir Goldstein
8852a22399
test/test_syscalls.c: fix test failure on xfs src dir (#611)
rename dir loop test fails when test tmp dir is xfs with an error
 test_rename_dir_loop() - rename : File exists

That is because xfs returns EEXIST for the case of renaming over
a non-empty directory.

According to rename(2) man page, EEXIST and ENOTEMPTY are both valid
error code in this case.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
2021-06-02 10:23:06 +01:00
Junichi Uekawa
0b6d97cf59
Define FUSE_USE_VERSION in Doxygen. (#608)
We currently do not pass anything in PREDEFINED and that means
FUSE_USE_VERSION is undefined.

Add that definition so that Doxygen built-in C pre-processor can use
FUSE_USE_VERSION value to find the correct comment to parse.
2021-05-19 09:32:14 +01:00
Christian Menges
7d1ba6b066
Fix memory leaks in examples (#604) 2021-05-09 11:12:01 +01:00
Christian Menges
995d46a205
Bump cxxopts from 2.2.0 to 2.2.1 (#602) 2021-05-09 10:00:57 +01:00
rfjakob
d169d512de
doc: Add "fuse (4)" to SEE ALSO sections in man pages (#601)
fuse (4) is an excellent introduction to the FUSE protocol,
and it lists fusermount (1) and mount.fuse (8) in its
SEE ALSO section.

I (the author of gocryptfs) was not aware of this man
page till March 2021, which suggest that it should be
made more discoverable.

So link back to fuse (4) in our SEE ALSO sections.
2021-05-08 14:15:55 +01:00
Junichi Uekawa
8c4d315108
Fix doxygen warnings. (#600)
Some parameters were undocumented, and @file does not mean to expand current file name.
2021-05-07 10:43:30 +01:00
Junichi Uekawa
98e261cfab
fusermount3.1: refer to mount.fuse3 (#599)
mount.fuse was renamed to mount.fuse3.
2021-05-05 10:51:08 +01:00