aboutsummaryrefslogtreecommitdiffstats
path: root/util
AgeCommit message (Collapse)AuthorLines
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-03-07Use posix_spawn instead of fork+execMatthias Goergens-5/+10
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-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-24Passthrough options starting with "x-" to mtab (#894)Matthew-2/+48
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..
2023-08-25Add NTFS3 kernel driver fs to the whitelist of mount targets (#830)mrdvdrm-0/+1
With Linux Kernel 5.15 new ntfs kernel driver NTFS3 was included. It must be whitelisted as a permitted mount target.
2023-06-19Improve wording of user_allow_other usage instructions (#806)Waldir Pimenta-8/+8
* Improve wording of user_allow_other usage instructions * Remove dated comment from mount_max usage instructions
2023-06-08Error handling for fusermount's commfd (#786)Matthias Görgens-1/+13
2023-06-08util/meson.build: don't install udev.rules if udevdir cannot be determined ↵wdlkmpx-3/+11
(#801) make the udev dependency optional just show a big warning if `udevrulesdir` is empty
2023-06-08util/mount.fuse.c: compile with linux headers < 3.5 (#798)wdlkmpx-0/+4
PR_SET_NO_NEW_PRIVS was added in linux 3.5 according to prtcl(2) man page https://elixir.bootlin.com/linux/v4.3/source/include/uapi/linux/prctl.h#L174
2023-06-08Fix memory leak (#785)Matthias Görgens-0/+3
This is just to [keep address sanitizer happy](https://github.com/libfuse/libfuse/actions/runs/4730520764/jobs/8394347666?pr=784). The OS would normally clean this up anyway. Co-authored-by: Nikolaus Rath <Nikolaus@rath.org>
2023-04-12Fuse mount: make auto_unmount compatible with suid/dev mount options (#762)Matthias Görgens-3/+16
* Fuse mount: make auto_unmount compatible with suid/dev mount options > When you run as root, fuse normally does not call fusermount but uses > the mount system call directly. When you specify auto_unmount, it goes > through fusermount instead. However, fusermount is a setuid binary that > is normally called by regular users, so it cannot in general accept suid > or dev options. In this patch, we split up how fuse mounts as root when `auto_unmount` is specified. First, we mount using system calls directly, then we reach out to fusermount to set up auto_unmount only (with no actual mounting done in fusermount). Fixes: #148
2023-04-07Fix deprecated udev.get_pkgconfig_variable in mesonMatthias Goergens-1/+1
And slightly bump minimum meson version.
2023-04-06Add long `--options` to fusermount (#764)Matthias Görgens-0/+1
Mostly for consistency with mount(8). Co-authored-by: Nikolaus Rath <Nikolaus@rath.org>
2023-04-06Fix MS_LAZYTIME not defined on uclibc and move all MS_* and UMOUNT_* (#753)Giulio Benetti-21/+3
as well as <sys/mount.h> inclusion to new fuse_mount_compat.h file. Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
2023-04-02Workaround musl bug when mountdir has whitespace (#761)Matthias Görgens-5/+58
Fixes https://github.com/libfuse/libfuse/issues/634 and https://github.com/mpartel/bindfs/issues/106
2023-03-29Fix typos and configure spellcheck for PRsYaroslav Halchenko-1/+1
2023-03-28Review feedback: rename and commentsMatthias Goergens-3/+9
2023-03-28Fix `auto_unmount` to work without `allow_other`Matthias Goergens-1/+46
In https://github.com/libfuse/libfuse/blob/77d662459a0fcdf358d515477d33795837e859d5/util/fusermount.c#L1219 `open` is executed as root which does not have access to the mount point if `allow_other` was not used and the real user id is not 0. Since `allow_other` usually cannot be specified by unprivileged users, `auto_unmount` has no effect for unprivileged users. In this commit, we work around this limitation: We first try to open the mountpoint as root, and if we get `EACCES`, we retry as the user who started fusermount, and see if we get `ENOTCONN`. In my testing, I found that `setfsuid` and `setfsgid` don't work to get around the lack of `allow_other`. (Sorry, I don't know enough about the Linux kernel to tell whether that's significant.) As a workaround, I decided to use `setresuid` and `setresgid` in a forked child process, and communicate via its exit status. Please give feedback on correctness, style and suggest tests. Fixes https://github.com/libfuse/libfuse/issues/586
2023-03-20Add more time mount options to fusermount / fix lazytimeBernd Schubert-0/+8
Previous patch had forgotten fusermount. And also had "lazyatime" instead of "lazytime".
2023-01-28Install a the configure_file (config.h) and use in headersBernd Schubert-2/+2
This addresses: https://github.com/libfuse/libfuse/issues/724 HAVE_LIBC_VERSIONED_SYMBOLS configures the library if to use versioned symbols and is set at meson configuration time. External filesystems (the main target, actually) include fuse headers and the preprocessor then acts on HAVE_LIBC_VERSIONED_SYMBOLS. Problem was now that 'config.h' was not distributed with libfuse and so HAVE_LIBC_VERSIONED_SYMBOLS was never defined with external tools and the preprocessor did the wrong decision. This commit also increases the the minimal meson version, as this depends on meson feature only available in 0.50 <quote 'meson' > WARNING: Project specifies a minimum meson_ version '>= 0.42' but uses features which were added in newer versions: * 0.50.0: {'install arg in configure_file'} </quote> Additionally the config file has been renamed to "fuse_config.h" to avoid clashes - 'config.h' is not very specific.
2022-09-08Add option to specify init script locationFina Wilke-13/+12
Also allows to disable the installation if desired
2022-09-04API update for fuse_loop_config additionsBernd Schubert-1/+1
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-07-02Revert "Increase meson min version and avoid get_pkgconfig_variable warning ↵Nikolaus Rath-1/+1
(#682)" This reverts commit 8db2ba06fef10f38f90b0f3213dd39ec07678e2f. This Meson version is not yet generally available, so we do not want to depend on it..
2022-06-20Increase meson min version and avoid get_pkgconfig_variable warning (#682)Bernd Schubert-1/+1
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>
2021-09-06Fix: fd and memory leak in mount.fuse.c (#614)lixiaokeng-1/+6
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-08-25use same hashbang as in rest of repositorya1346054-1/+1
2021-01-28Ignore "-o nonempty" (#582)Stephen Kitt-1/+2
Commit 0bef21e8543d removed "-o nonempty" since mounting over non-empty directories is always allowed. But this broke tools which specify "-o nonempty". Since the expected behaviour is the same anyway, ignoring the "nonempty" option seems safe, and allows programs specifying "-o nonempty" to continue working with fusermount3. This would fix https://bugs.debian.org/939767 Signed-off-by: Stephen Kitt <steve@sk2.org>
2021-01-08fusermount: Check for argv[0] being present (#577)richardweinberger-1/+1
It is perfectly legal to execute a program with argc == 0 and therefore no argv. fusermount needs to check for this case, otherwise it will pass a NULL poiunter to strdup() and cause undefined behavior. Especially since fusermount is setuid root, we need to extra be careful. Signed-off-by: Richard Weinberger <richard@nod.at>
2020-12-27util/fusermount.c: Assume the kernel supports UMOUNT_NOFOLLOW (#574)Sargun Dhillon-23/+1
UMOUNT_NOFOLLOW was added in Kernel 2.6.34. It's been 10 years since it's been added Kernel 5.9, and 5.10 break this check mechanism[1]. Let's deprecate it. [1]: https://lore.kernel.org/linux-fsdevel/20201223102604.2078-1-sargun@sargun.me/ Signed-off-by: Sargun Dhillon <sargun@sargun.me>
2020-12-19Add exfat to whitelist (#573)Kangjing "Chaser" Huang-0/+1
2020-11-06mount.fuse.c: fix potential memory leak in main funcZhiqiang Liu-2/+11
In mount.fuse.c, there are several memory leak problems in main func. For example, setuid_name is allocated by calling xstrdup func, however it is not freed before calling execl func. Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com> Signed-off-by: Haotian Li <lihaotian9@huawei.com>
2020-11-06mount.fuse.c: fix potential accessing NULL pointerZhiqiang Liu-1/+1
In mount.fuse.c, pwd is set by calling getpwnam func. If the matching entry is not found or an error occurs in getpwnam func, pwd will be NULL. So we need to check whether pwd is NULL before accessing it. Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com> Signed-off-by: Haotian Li <lihaotian9@huawei.com>
2020-03-13Align help options (#500)Andrew Gaul-1/+1
2020-03-13State GPL version in comment (#485)Dr. David Alan Gilbert-2/+2
IN a bunch of comments we say 'under the terms of the GNU GPL', make it clear this is GPLv2 (as LICENSE says). Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2019-12-31Make ioctl prototype conditional on FUSE_USE_VERSION. (#482)Bill Zissimopoulos-1/+1
Define FUSE_USE_VERSION < 35 to get old ioctl prototype with int commands; define FUSE_USE_VERSION >= 35 to get new ioctl prototype with unsigned int commands. Fixes #463.
2019-09-15Whitelist UFSD (#451)tenzap-0/+1
2019-07-09Install init script in /etc/ instead of $sysconfdirNikolaus Rath-2/+2
sysconfdir defaults to /usr/local/etc which is almost always the wrong choice. Fixes: #427
2019-07-04Add build option to skip steps requiring root permissionsDrDaveD-7/+10
2019-06-15Fix build with IGNORE_MTAB (#425)Michael Forney-0/+2
chdir_to_parent and check_is_mount are used by should_auto_mount, added in fuse-3.3.0, regardless of whether IGNORE_MTAB is defined.
2019-05-05add defines for missing SECBITs on older kernels (#409)DrDaveD-0/+19
2019-04-03Whitelist smb2 (#392)Peter Lemenkov-4/+5
See also https://bugzilla.redhat.com/1694552#c7 Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
2019-03-09Add HFS+ to filesystem whitelist (#347)1c7718e7-0/+1
2019-03-09Correctly include config.h ("" vs <>)Nikolaus Rath-3/+3
This isn't a system header. Fixes: #349
2019-03-08fusermount: drop privileges for chdir()Sam Huffman-0/+2
cd to mountpoint's parent directory using unprivileged rather than privileged access. This is to ensure that unmount works on mountpoints where root may not have privileged access. Fixes: #376
2019-01-04Added OpenAFS to type whitelistNikolaus Rath-0/+1
Fixes: #336.
2018-11-19examples: add copy_file_range() support to passthrough(_fh)Niels de Vos-1/+1
The passthrough example filesystem can be used for validating the API and the implementation in the FUSE kernel module.
2018-11-06Avoid double unmount on normal unmount in auto_unmount mode.Kevin Vigor-11/+63
If a fuse filesystem was mounted in auto_unmount mode on top of an already mounted filesystem, we would end up doing a double-unmount when the fuse filesystem was unmounted properly. Make the auto_unmount code less eager: unmount only if the mounted filesystem has proper type and is returning 'Transport endpoint not connected'.
2018-10-19Add SpectrumScale/GPFS and Lustre to FS whitelistValentin Plugaru-0/+2
Fixes: #304 Signed-off-by: Valentin Plugaru <valentin.plugaru@uni.lu>
2018-10-09Add unprivileged option in `mount.fuse3`Mattias Nissler-17/+198
The unprivileged option allows to run the FUSE file system process without privileges by dropping capabilities and preventing them from being re-acquired via setuid / fscaps etc. To accomplish this, mount.fuse sets up the `/dev/fuse` file descriptor and mount itself and passes the file descriptor via the `/dev/fd/%u` mountpoint syntax to the FUSE file system.
2018-09-17Don't special-case bulid of mount_util.c.Nikolaus Rath-11/+1
We already support out of source builds without this.