public inbox for development@lists.ipfire.org
 help / color / mirror / Atom feed
From: Adolf Belka <adolf.belka@ipfire.org>
To: development@lists.ipfire.org
Cc: Adolf Belka <adolf.belka@ipfire.org>
Subject: [PATCH] fuse: Update to version 3.18.3
Date: Mon, 21 Sep 2026 16:09:55 +0200	[thread overview]
Message-ID: <20260921140958.515074-7-adolf.belka@ipfire.org> (raw)
In-Reply-To: <20260921140958.515074-1-adolf.belka@ipfire.org>

- Update from version 3.18.1 to 3.18.3
- Update of rootfile
- Changelog
3.18.3
Security Fixes
	* ``fuse_session_custom_io()`` is disabled unless libfuse is built with
	  ``-Denable-custom-io=true``, and returns ``-ENOTSUP`` otherwise. The
	  ``hello_ll_uds`` example is built only with that option, and enabling it
	  warns at configure time.
	  Reason is a custom io peer might not be a kernel and can
	  forge requests that libfuse parses without bounds checks, crashing or
	  corrupting the filesystem process. See ``doc/README.custom-io``.
	* fusermount3: resolve the mountpoint once, through an ``O_PATH|O_NOFOLLOW``
	  descriptor. A symlink swapped in between the type check and the second
	  lookup could redirect the mount.
	* fusermount3: run the auto-unmount probe as the calling user. It opened the
	  caller-supplied mountpoint with elevated privileges before, so a symlink
	  could get an attacker-chosen path opened as root.
	* mount_util: terminate the ``/bin/mount`` and ``/bin/umount`` argument
	  vectors with ``--``. ``fsname`` reaches them straight from ``-ofsname=`` in
	  setuid-root fusermount3, and the child raises the real uid to 0 before
	  ``execle()``, so an unprivileged caller controlled a positional operand of a
	  mount(8) that was not in restricted mode.
	* mount_util: skip the mtab update entirely for option-like mount arguments.
	  BusyBox mount(8) does not honour ``--``.
	* fusermount3: unmount through ``unmount_fuse()`` when passing the device
	  descriptor to the caller fails, so that path drops privileges and runs the
	  ``fusermount3 -u`` checks instead of calling ``umount2()`` as root on a
	  caller-supplied path.
	* fusermount3 and lib: pass ``UMOUNT_NOFOLLOW`` on the kernel and non-setuid
	  unmount paths.
	* fusermount3: check the ``fstat()`` return value when validating the
	  communication file descriptor.
	* fusermount3: fix an out-of-bounds read at index -1 in ``get_mnt_opts()``
	  when the option string is empty, which a read-only mount with no further
	  options reaches.
	* util: avoid a pointer underflow when trimming ``fuse.conf`` lines.
	* fusermount3: reject a negative ``mount_max`` other than the documented -1.
	  A typo such as -2 made the limit comparison always true and blocked every
	  non-root mount.
	* lib: relay the KILLPRIV_V2 kill-suidgid flags to the filesystem in the new
	  ``fuse_file_info::kill_suidgid``. Only ``setattr`` saw them before, so a
	  filesystem that had taken over clearing suid/sgid never learned of it on
	  ``O_TRUNC`` open and on write, and the bits survived.
	Note: ``fuse_file_info::kill_suidgid`` is new in 3.18.3 and ``FUSE_VERSION``
	carries no patch level. A filesystem built against these headers but running
	against an older 3.18 library finds the field permanently zero, so require
	3.18.3 at run time as well.
Important Fixes
	* Fixed a hang on ``statx`` in builds without ``HAVE_STATX``: ``_do_statx()``
	  never replied, so the kernel waited forever.
	* io-uring: the CQE dispatch validated the opcode against ``fuse_ll_ops[]``
	  but called through ``fuse_ll_ops2[]``, so an opcode with no handler there
	  was called as a null function pointer.
	* io-uring: fixed the notify-retrieve reply buffer handling. The
	  ``fuse_notify_retrieve_in`` header sits at the start of the payload buffer,
	  not in the ring header.
	* io-uring: fixed the ``req_header_sz`` calculation, which sized the header
	  buffer from the wrong struct.
	* io-uring: create the rings with ``IORING_SETUP_SUBMIT_ALL``, so one failing
	  commit SQE no longer leaves the rest of the batch unsubmitted.
	* io-uring: ``fuse_reply_none()`` commits the ring entry. A FORGET answered
	  that way leaked the entry and left the kernel-side request outstanding.
	* fusermount3: treat ``ECONNABORTED`` like ``ENOTCONN`` when deciding whether
	  to auto-unmount, so a daemon that dies with io-uring registered no longer
	  leaves the mount behind.
	* ``receive_fd()``: check ``CMSG_FIRSTHDR()`` for NULL before dereferencing it.
	* ``fuse_session_loop_mt_312()`` no longer destroys ``se->mt_lock`` before
	  ``fuse_session_destroy()`` destroys it again, which was undefined behaviour
	  on every multi-threaded shutdown.
	* ``fuse_loop_cfg_create()`` returning NULL is checked before the config is
	  dereferenced in ``fuse_session_loop_mt_312()`` and
	  ``fuse_session_loop_mt_31()``.
	* iconv: the error check after opening the ``fromfs`` descriptor tested
	  ``tofs``, so a failed ``iconv_open()`` was ignored and left an invalid
	  descriptor behind.
	* mount.fuse: a failure to clear ``FD_CLOEXEC`` went undetected, because the
	  result was compared against 1 rather than -1.
	* ``grow_pipe_to_max()`` opens ``/proc/sys/fs/pipe-max-size`` with
	  ``O_CLOEXEC``; a concurrent fork+exec leaked the descriptor into the child.
	* Fixed a build failure for ``FUSE_USE_VERSION`` 312 and newer without symbol
	  versioning, where ``fuse_loop_mt()`` expanded to an undeclared
	  ``fuse_loop_mt_312()``.
	* Fixed a Clang 21 build failure in ``ST_MTIM_NSEC``.
	* Fixed leaks: the pipe when its size cannot be grown, the mountpoint in
	  ``fuse_session_mount()`` and ``fuse_session_destroy()``, the pipe
	  descriptors when ``fork()`` or ``setsid()`` fail in ``fuse_daemonize()``,
	  the context when ``pthread_setspecific()`` fails, ``print_module_help()``,
	  and a ``fuse_pollhandle`` in ``fuse_lib_poll()``.
	* Examples: ``update_fs()`` uses ``localtime_r()``. ``localtime()`` returns a
	  shared static ``struct tm``, so it raced with the session threads and
	  ``strftime()`` could format a half-overwritten time.
	* Examples: ``cuse_client`` caps the transfer size at 16 MiB. ``do_rw()``
	  passed the SIZE argument straight to ``calloc()``.
	* Examples: memfs_ll locking, refcounting and bounds fixes, including a
	  use-after-free on rename overwrite and on a concurrent forget.
	* Examples: passthrough_hp lock-order and lifetime fixes. The directory
	  stream is protected by a per-handle lock, ``fs.mutex`` is taken before
	  ``Inode::m`` and when ``link()`` raises nlookup, and no inode lock is held
	  across a syscall or a reply.
Documentation
	* The fuse-devel mailing list moved to lists.linux.dev.
	* Man page and README corrections.
3.18.2
	* Fix two io-uring issues that might be security critical
	  * fuse-io-uring: Fix UAF and NULL deref in startup error path
	  * fuse-io-uring: Fix NULL deref and memory leak in fuse_uring_init_queue

Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
---
 config/rootfiles/common/fuse | 2 +-
 lfs/fuse                     | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/config/rootfiles/common/fuse b/config/rootfiles/common/fuse
index db16cea63..19f90b618 100644
--- a/config/rootfiles/common/fuse
+++ b/config/rootfiles/common/fuse
@@ -11,7 +11,7 @@ usr/bin/fusermount3
 #usr/include/fuse3/fuse_opt.h
 #usr/include/fuse3/libfuse_config.h
 #usr/lib/libfuse3.so
-usr/lib/libfuse3.so.3.18.1
+usr/lib/libfuse3.so.3.18.3
 usr/lib/libfuse3.so.4
 #usr/lib/pkgconfig/fuse3.pc
 usr/lib/udev/rules.d/99-fuse3.rules
diff --git a/lfs/fuse b/lfs/fuse
index aa6e3103c..cb393f06d 100644
--- a/lfs/fuse
+++ b/lfs/fuse
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 3.18.1
+VER        = 3.18.3
 
 THISAPP    = fuse-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = b0a38794b8eb932f7b23314afdaeacbdd302e9f9037794f5dceb87b22f19de8d125ec0112ee28751b94063324c872e03c26e3128c6cd817858245f7df5acd7ef
+$(DL_FILE)_BLAKE2 = d6d1312484bce853b8ad3df2be9ddc4fb9be237948cac48f4d76c1a303d2cc7dcc2c98faf1ca51093d663512040f12cd73376ec92e3f6974eaf0206f853abea3
 
 install : $(TARGET)
 
-- 
2.55.0



  parent reply	other threads:[~2026-09-21 14:10 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-21 14:09 [PATCH] core205: Ship fribidi Adolf Belka
2026-09-21 14:09 ` [PATCH] core205: Ship fuse Adolf Belka
2026-09-21 14:09 ` [PATCH] core205: Ship logwatch Adolf Belka
2026-09-21 14:09 ` [PATCH] core205: Ship ntfs-3g Adolf Belka
2026-09-21 14:09 ` [PATCH] core205: Ship pixman Adolf Belka
2026-09-21 14:09 ` [PATCH] fribidi: Update to version 1.0.17 Adolf Belka
2026-09-21 14:09 ` Adolf Belka [this message]
2026-09-21 14:09 ` [PATCH] logwatch: Update to version 7.15 Adolf Belka
2026-09-21 14:09 ` [PATCH] ntfs-3g: Update to version 2026.7.7 Adolf Belka
2026-09-21 14:09 ` [PATCH] pixman: Update to version 0.46.4 Adolf Belka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260921140958.515074-7-adolf.belka@ipfire.org \
    --to=adolf.belka@ipfire.org \
    --cc=development@lists.ipfire.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox