1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950
|
libfuse 3.18.2 (2026-03-18)
===========================
* 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
libfuse 3.18.1 (2025-12-20)
===========================
* Fix a critical ABI issue compared to libfuse-3.17.3+
* Note: This breaks ABI compatibility to libfuse-3.18.0
(given that 3.18.0 is out for 2 days only, probably the lesser evil)
libfuse 3.18.0 (2025-12-18)
===========================
New Features
------------
* fuse-over-io-uring communication
* statx support
* Request timeouts: Prevent hung operations
* FUSE_NOTIFY_INC_EPOCH: New notification mechanism for epoch counters
Important Fixes
----------------
* Fixed double unmount on FUSE_DESTROY
* Fixed junk readdirplus results when filesystem doesn't fill stat info
* Fixed memory deallocation in fuse_session_loop_remember
* Fixed COPY_FILE_RANGE interface
Platform Support
----------------
* Improved FreeBSD support (mount error reporting, test runner, build fixes)
* Fixed 32-bit architecture builds
* Fixed build with musl libc and older kernels (< 5.9)
Other Improvements
------------------
* Added PanFS to fusermount whitelist
* Thread naming support for easier debugging
libfuse 3.17.4 (2025-08-19)
===========================
- Try to detect mount-utils by checking for /run/mount/utab
and don't try to update mtab if it does not exist
- Fix a build warning when HAVE_BACKTRACE is undefined
- fuse_loop_mt.c: fix close-on-exec flag on clone fd
- Remove struct size assertions from fuse_common.h
libfuse 3.17.3 (2025-07-16)
===========================
* more conn->want / conn->want_ext conversion fixes
* Fix feature detection for close_range
* Avoid double unmount on FUSE_DESTROY
libfuse 3.17.2 (2025-04-23)
===========================
* Fixed uninitized bufsize value (compilation warning and real
issue when HAVE_SPLICE was not defined)
* Fixed initialization races related to buffer realocation when
large buf sizes are used (/proc/sys/fs/fuse/max_pages_limit)
* Fix build with kernel < 5.9
* Fix static_assert build failure with C++ version < 11
* Compilation fix (remove second fuse_main_real_versioned declaration)
* Another conn.want flag conversion fix for high-level applications
* Check if pthread_setname_np() exists before use it
* fix example/memfs_ll rename deadlock error
* signal handlers: Store fuse_session unconditionally and restore
previous behavior that with multiple sessions the last session
was used for the signal exist handler
libfuse 3.17.1 (2025-03-24)
===========================
* fuse: Fix want conn.want flag conversion
* Prevent re-usage of stdio FDs for fusermount
* PanFS added to fusermount whitelist
libfuse 3.17.1-rc1 (2025-02-18)
===============================
* several BSD fixes
* x86 (32bit) build fixes
* nested declarations moved out of the inlined functions to avoid
build warnings
* signify public key added for future 3.18
libfuse 3.17.1-rc0 (2025-02.10)
===============================
* Fix libfuse build with FUSE_USE_VERSION 30
* Fix build of memfs_ll without manual meson reconfigure
* Fix junk readdirplus results when filesystem not filling stat info
* Fix conn.want_ext truncation to 32bit
* Fix some build warnings with -Og
* Fix fuse_main_real symbols
* Several changes related to functions/symbols that added in
the libfuse version in 3.17
* Add thread names to libfuse threads
* With auto-umounts the FUSE_COMMFD2 (parent process fd is
exported to be able to silence leak checkers
libfuse 3.17 (2025-01-01, not officially releaesed)
==================================================
* 3.11 and 3.14.2 introduced ABI incompatibilities, the ABI is restored
to 3.10, .so version was increased since there were releases with
the incompatible ABI
* The libfuse version a program was compiled against is now encoded into
that program, using inlined functions in fuse_lowlevel.h and fuse.h
* Allows to handle fatal signals and to print a backtrace.
New API function: fuse_set_fail_signal_handlers()
* Allows fuse_log() messages to be send to syslog instead of stderr
New API functions: fuse_log_enable_syslog() and fuse_log_close_syslog()
* Handle buffer misalignment for FUSE_WRITE
* Added support for filesystem passthrough read/write of files when
FUSE_PASSTHROUGH capability is enabled
New API functions: fuse_passthrough_open() and fuse_passthrough_close(),
also see example/passthrough_hp.cc
* Added fmask and dmask options to high-level API
- dmask: umask applied to directories
- fmask: umask applied to non-directories
* Added FUSE_FILL_DIR_DEFAULTS enum to support C++ programs using
fuse_fill_dir_t function
* Added support for FUSE_CAP_HANDLE_KILLPRIV_V2
Fixes:
* Fixed compilation failure on FreeBSD (mount_bsd.c now points to correct
header)
libfuse 3.16.2 (2023-10-10)
===========================
* Various small fixes and improvements.
libfuse 3.16.1 (2023-08-08)
===========================
* Readdir kernel cache can be enabled from high-level API.
libfuse 3.15.1 (2023-07-05)
===========================
Future libfuse releases will be signed with `signify`_ rather than PGP (rationale_). This
release is the last to be signed with PGP and contains the signify public key for current
(3.15.X) and upcoming (3.16.X) minor release cycle.
.. _signify: https://www.openbsd.org/papers/bsdcan-signify.html
.. _rationale: https://latacora.micro.blog/2019/07/16/the-pgp-problem.html
libfuse 3.15.0 (2023-06-09)
===========================
* Improved support for some less common systems (32 bit, alternative libcs)
* Unsupported mount options are no longer silently accepted.
* auto_unmount is now compatible with allow_other.
libfuse 3.14.1 (2023-03-26)
===========================
* The extended attribute name passed to the setxattr() handler is no longer
truncated at the beginning (bug introduced in 3.13.0).
* As a result of the above, the additional setattr() flags introduced in 3.14 are no
longer available for now. They will hopefully be reintroduced in the next release.
* Further improvements of configuration header handling.
libfuse 3.14.0 (2023-02-17)
===========================
* Properly fix the header installation issue. The fix in 3.13.1 resulted
in conflicts with other packages.
* Introduce additional setattr() flags (FORCE, KILL_SUID, KILL_SGID, FILE, KILL_PRIV,
OPEN, TIMES_SET)
libfuse 3.13.1 (2023-02-03)
===========================
* Fixed an issue that resulted in errors when attempting to compile against
installed libfuse headers (because libc symbol versioning support was not
detected correctly in this case).
libfuse 3.13.0 (2023-01-13)
===========================
* There is a new low-level API function `fuse_session_custom_io` that allows to implement
a daemon with a custom io. This can be used to create a daemon that can process incoming
FUSE requests to other destinations than `/dev/fuse`.
* A segfault when loading custom FUSE modules has been fixed.
* There is a new `fuse_notify_expire_entry` function.
* A deadlock when resolving paths in the high-level API has been fixed.
* libfuse can now be build explicitly for C libraries without symbol versioning support.
libfuse 3.12.0 (2022-09-08)
===========================
* There is a new build parameter to specify where the SysV init script should be
installed.
* The *max_idle_threads* parameter has been deprecated in favor of the new max_threads*
parameter (which avoids the excessive overhead of creating and destructing threads).
Using max_threads == 1 and calling fuse_session_loop_mt() will run single threaded
similar to fuse_session_loop().
The following changes apply when using the most recent API (-DFUSE_USE_VERSION=312,
see `example/passthrough_hp.cc` for an example for how to usse the new API):
* `struct fuse_loop_config` is now private and has to be constructed using
*fuse_loop_cfg_create()* and destroyed with *fuse_loop_cfg_destroy()*. Parameters can be
changed using `fuse_loop_cfg_set_*()` functions.
* *fuse_session_loop_mt()* now accepts `struct fuse_loop_config *` as NULL pointer.
* *fuse_parse_cmdline()* now accepts a *max_threads* option.
libfuse 3.11.0 (2022-05-02)
===========================
* Add support for flag FOPEN_NOFLUSH for avoiding flush on close.
* Fixed returning an error condition to ioctl(2)
libfuse 3.10.5 (2021-09-06)
===========================
* Various improvements to make unit tests more robust.
libfuse 3.10.4 (2021-06-09)
===========================
* Building of unit tests is now optional.
* Fixed a test failure when running tests under XFS.
* Fixed memory leaks in examples.
* Minor documentation fixes.
libfuse 3.10.3 (2021-04-12)
===========================
* Fix returning d_ino and d_type from readdir(3) in non-plus mode
libfuse 3.10.2 (2021-02-05)
===========================
* Allow "nonempty" as a mount option, for backwards compatibility with fusermount 2. The
option has no effect since mounting over non-empty directories is allowed by default.
* Fix returning inode numbers from readdir() in offset==0 mode.
* FUSE filesystems can now be mounted underneath EXFAT mountpoints.
* Various minor bugfixes.
libfuse 3.10.1 (2020-12-07)
===========================
* Various minor bugfixes.
libfuse 3.10.0 (2020-10-09)
===========================
* Add FUSE_CAP_CACHE_SYMLINKS: allow caching symlinks in kernel page cache.
* Various minor bugfixes and improvements.
libfuse 3.9.4 (2020-08-09)
==========================
This was an "accidental" release, it is equivalent to 3.9.3.
libfuse 3.9.3 (2020-08-09)
==========================
* Fixed compilation under OS X and µClibc.
* Minor bugfixes and doc updates.
libfuse 3.9.2 (2020-06-12)
==========================
* Remove obsolete workarounds in examples.
* Do not require C++ compiler for building.
* Minor bugfixes.
libfuse 3.9.1 (2020-03-19)
===========================
* Fixed memory leak in fuse_session_new().
* Fixed an issue with the linker version script.
* Make ioctl prototype conditional on FUSE_USE_VERSION. 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.
* Various small bugfixes.
libfuse 3.9.0 (2019-12-14)
==========================
* Added support for FUSE_EXPLICIT_INVAL_DATA to enable
only invalidate cached pages on explicit request.
libfuse 3.8.0 (2019-11-03)
==========================
* Added support for FUSE_LSEEK operation which can be used to report holes
in sparse files.
libfuse 3.7.0 (2019-09-27)
==========================
* Added UFSD to whitelist (so users can now mount FUSE filesystems
on mountpoints within UFSD filesystems).
* Added custom log message handler function support so that libfuse
applications can direct messages to syslog(3) or other logging systems.
stderr remains the default. See `fuse_log.h` for the new API.
libfuse 3.6.2 (2019-07-09)
==========================
* The init script is now installed to /etc/ rather than /usr/local/etc
by default.
libfuse 3.6.1 (2019-06-13)
==========================
* Fixed version number (release 3.6.0 was shipped with a declared
version of 3.0.0).
libfuse 3.6.0 (2019-06-13)
==========================
* Added a new example (passthrough_hp). The functionality is similar
to passthrough_ll, but the implementation focuses on performance and
correctness rather than simplicity.
* Added support for fuse kernel feature `max_pages` which allows to increase
the maximum number of pages that can be used per request. This feature was
introduced in kernel 4.20. `max_pages` is set based on the value in
`max_write`. By default `max_write` will be 1MiB now for kernels that support
`max_pages`. If you want smaller buffers or writes you have to set
`max_write` manually.
libfuse 3.5.0 (2019-04-16)
==========================
* Changed ioctl commands to "unsigned int" in order to support commands
which do not fit into a signed int. Commands issued by applications
are still truncated to 32 bits.
* Added SMB2 to whitelist (so users can now mount FUSE filesystems
on mountpoints within SMB 2.0 filesystems).
* Added a new `cache_readdir` flag to `fuse_file_info` to enable
caching of readdir results. Supported by kernels 4.20 and newer.
* Add support and documentation for FUSE_CAP_NO_OPENDIR_SUPPORT.
libfuse 3.4.2 (2019-03-09)
==========================
* Fixed a memory leak in `examples/passthrough_ll.c`.
* Added OpenAFS to whitelist (so users can now mount FUSE filesystems
on mountpoints within OpenAFS filesystems).
* Added HFS+ to whitelist (so users can now mount FUSE filesystems
on mountpoints within HFS+ filesystems).
* Documentation improvements.
libfuse 3.4.1 (2018-12-22)
==========================
* The `examples/passthrough_ll.c` example filesystem has been
significantly extended.
* Support for `copy_file_range` has been added.
* Build system updates for non-Linux systems.
libfuse 3.4.0
=============
* Add `copy_file_range()` to support efficient copying of data from one file to
an other.
libfuse 3.3.0 (2018-11-06)
==========================
* The `auto_unmount` mode now works correctly in combination with
autofs.
* The FUSE_CAP_READDIRPLUS_AUTO capability is no longer enabled by
default unless the file system defines both a readdir() and a
readdirplus() handler.
* The description of the FUSE_CAP_READDIRPLUS_AUTO flag has been
improved.
* Allow open `/dev/fuse` file descriptors to be passed via mountpoints of the
special format `/dev/fd/%u`. This allows mounting to be handled by the parent
so the FUSE filesystem process can run fully unprivileged.
* Add a `drop_privileges` option to mount.fuse3 which causes it to open
`/dev/fuse` and mount the file system itself, then run the FUSE file
filesystem fully unprivileged and unable to re-acquire privilege via setuid,
fscaps, etc.
* Documented under which conditions the `fuse_lowlevel_notify_*`
functions may block.
libfuse 3.2.6 (2018-08-31)
==========================
* The fuse_main() function now returns more fine-grained error codes.
* FUSE filesystems may now be mounted on mountpoint within
bcachefs, aufs and FAT filesystems.
* libfuse may now be used as a Meson subproject.
* Fix a few low-impact memory leaks.
* The `fuse.conf` file is no longer looked for in `/etc`, but in the
*sysconfdir* directory (which can be set with `meson configure`). By
default, the location is thus `/usr/local/etc/fuse.conf`.
libfuse 3.2.5 (2018-07-24)
==========================
* SECURITY UPDATE: In previous versions of libfuse it was possible to
for unprivileged users to specify the `allow_other` option even when
this was forbidden in `/etc/fuse.conf`. The vulnerability is
present only on systems where SELinux is active (including in
permissive mode).
* The fusermount binary has been hardened in several ways to reduce
potential attack surface. Most importantly, mountpoints and mount
options must now match a hard-coded whitelist. It is expected that
this whitelist covers all regular use-cases.
* Added a test of `seekdir` to test_syscalls.
* Fixed `readdir` bug when non-zero offsets are given to filler and the
filesystem client, after reading a whole directory, re-reads it from a
non-zero offset e. g. by calling `seekdir` followed by `readdir`.
libfuse 3.2.4 (2018-07-11)
==========================
* Fixed `rename` deadlock on FreeBSD.
libfuse 3.2.3 (2018-05-11)
==========================
* Fixed a number of compiler warnings.
libfuse 3.2.2 (2018-03-31)
==========================
* Added example fuse.conf file.
* Added "support" for -o nofail mount option (the option is accepted
and ignored).
* Various small bugfixes.
libfuse 3.2.1 (2017-11-14)
==========================
* Various small bugfixes.
libfuse 3.2.0 (2017-09-12)
==========================
* Support for building with autotools has been dropped.
* Added new `fuse_invalidate_path()` routine for cache invalidation
from the high-level FUSE API, along with an example and tests.
* There's a new `printcap` example that can be used to determine the
capabilities of the running kernel.
* `fuse_loop_mt()` now returns the minus the actual errno if there was
an error (instead of just -1).
* `fuse_loop()` no longer returns a positive value if the filesystem
loop was terminated without errors or signals.
* Improved documentation of `fuse_lowlevel_notify_*` functions.
* `fuse_lowlevel_notify_inval_inode()` and
`fuse_lowlevel_notify_inval_entry()` now return -ENOSYS instead of
an undefined error if the function is not supported by the kernel.
* Documented the special meaning of the *zero* offset for the
fuse_fill_dir_t function.
* The `passthrough_fh` example now works under FreeBSD.
* libfuse can now be build without libiconv.
* Fixed support for `FUSE_CAP_POSIX_ACL`: setting this capability
flag had no effect in the previous versions of libfuse 3.x;
now ACLs should actually work.
* Fixed a number of compilation problems under FreeBSD.
* Fixed installation directory for udev rules.
* Fixed compilation with LTO.
libfuse 3.1.1 (2017-08-06)
==========================
* Documentation: clarified how filesystems are supposed to process
open() and create() flags (see include/fuse_lowlevel.h).
* Fixed a compilation problem of the passthrough_ll example on
32 bit systems (wrong check and wrong error message).
* pkg-config is now used to determine the proper directory for
udev rules.
* Fixed a symbol versioning problem that resulted in very strange
failures (segfaults, unexpected behavior) in different situations.
* Fixed a test failure when /tmp is on btrfs.
* The maximum number of idle worker threads used by `fuse_loop_mt()`
is now configurable.
* `fuse_loop_mt()` and `fuse_session_loop_mt()` now take a
`struct fuse_loop_config` parameter that supersedes the *clone_fd*
parameter.
* Incorporated several patches from the FreeBSD port. libfuse should
now compile under FreeBSD without the need for patches.
* The passthrough_ll example now supports writeback caching.
libfuse 3.1.0 (2017-07-08)
==========================
* Added new `fuse_lib_help()` function. File-systems that previously
passed a ``--help`` option to `fuse_new()` must now process the
``--help`` option internally and call `fuse_lib_help()` to print the
help for generic FUSE options.
* Fixed description of the `fuse_conn_info->time_gran`. The default
value of zero actually corresponds to full nanosecond resolution,
not one second resolution.
* The init script is now installed into the right location
(``$DESTDIR/etc/init.d`` rather than ``$prefix/$sysconfdir/init.d``)
* The `example/passthrough_ll` filesystem now supports creating
and writing to files.
* `fuse_main()` / `fuse_remove_signal_handlers()`: do not reset
`SIGPIPE` handler to `SIG_DFL` if it was not set by us.
* Documented the `RENAME_EXCHANGE` and `RENAME_NOREPLACE` flags that
may be passed to the `rename` handler of both the high- and
low-level API. Filesystem authors are strongly encouraged to check
that these flags are handled correctly.
libfuse 3.0.2 (2017-05-24)
==========================
* Option parsing for the high-level API now works correctly
(previously, default values would override specified values).
* Tests should now build (and run) under FreeBSD.
* Improved documentation of `struct fuse_context`
* Internal: calculate request buffer size from page size and kernel
page limit instead of using hardcoded 128 kB limit.
libfuse 3.0.1 (2017-04-10)
==========================
* Re-introduced *examples/null.c*.
* Added experimental support for building with Meson.
* Document that `-o auto_unmount` implies `-o nodev,nosuid`.
* Document that the *use_ino* option of the high-level interface does
not affect the inode that libfuse and the kernel use internally.
* Fixed test cases for passthrough* examples (they weren't actually
testing the examples).
* Fixed several bugs in the passthrough* examples.
libfuse 3.0.0 (2016-12-08)
==========================
* NOTE TO PACKAGERS:
libfuse 3 is designed to be co-installable with libfuse 2. However,
some files will be installed by both libfuse 2 and libfuse 3
(e.g. /etc/fuse.conf, the udev and init scripts, and the
mount.fuse(8) manpage). These files should be taken from
libfuse 3. The format/content is guaranteed to remain backwards
compatible with libfuse 2.
We recommend to ship libfuse2 and libfuse3 in three separate
packages: a libfuse-common package that contains files shared by
libfuse 2+3 (taken from the libfuse3 tarball), and libfuse2 and
libfuse3 packages that contain the shared library and helper
programs for the respective version.
* Fixed test errors when running tests as root.
* Made check for util-linux version more robust.
* Added documentation for all fuse capability flags (`FUSE_CAP_*`) and
`struct fuse_conn_info` fields.
* fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
fuse_session_loop_mt() now return more detailed error codes instead
of just -1. See the documentation of fuse_session_loop() for details.
* The FUSE main loop is now aborted if the file-system requests
capabilities that are not supported by the kernel. In this case, the
session loop is exited with a return code of ``-EPROTO``.
* Most file-system capabilities that were opt-in in libfuse2 are now
enabled by default. Filesystem developers are encouraged to review
the documentation of the FUSE_CAP_* features to ensure that their
filesystem is compatible with the new semantics. As before, a
particular capability can still be disabled by unsetting the
corresponding bit of `fuse_conn_info.wants` in the init() handler.
* Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL,
FUSE_HANDLE_KILLPRIV feature flags.
* FUSE filesystems are now responsible for unsetting the setuid/setgid
flags when a file is written, truncated, or its owner
changed. Previously, this was handled by the kernel but subject to
race conditions.
* The fusermount and mount.fuse binaries have been renamed to
fusermount3 and mount.fuse3 to allow co-installation of libfuse 2.x
and 3.x
* Added a `max_read` field to `struct fuse_conn_info`. For the time
being, the maximum size of read requests has to be specified both
there *and* passed to fuse_session_new() using the ``-o
max_read=<n>`` mount option. At some point in the future, specifying
the mount option will no longer be necessary.
* Documentation: clarified that the fuse_argv structure that is passed
to `fuse_new()` and `fuse_lowlevel_new()` must always contain at
least one element.
* The high-level init() handler now receives an additional struct
fuse_config pointer that can be used to adjust high-level API
specific configuration options.
* The `nopath_flag` field of struct fuse_operations has been
removed. Instead, a new `nullpath_ok` flag can now be set
in struct fuse_config.
* File systems that use the low-level API and support lookup requests
for '.' and '..' should continue make sure to set the
FUSE_CAP_EXPORT_SUPPORT bit in fuse_conn_info->want.
(This has actually always been the case, but was not very obvious
from the documentation).
* The help text generated by fuse_lowlevel_help(), fuse_new() (and
indirectly fuse_main()) no longer includes options that are unlikely
to be of interest to end-users. The full list of accepted options is
now included in the respective function's documentation (located in
the fuse.h/fuse_lowlevel.h and doc/html).
* The ``-o nopath`` option has been dropped - it never actually did
anything (since it is unconditionally overwritten with the value of
the `nopath` flag in `struct fuse_operations`).
* The ``-o large_read`` mount option has been dropped. Hopefully no
one uses a Linux 2.4 kernel anymore.
* The `-o nonempty` mount point has been removed, mounting over
non-empty directories is now always allowed. This brings the
behavior of FUSE file systems in-line with the behavior of the
regular `mount` command.
File systems that do not want to allow mounting to non-empty
directories should perform this check themselves before handing
control to libfuse.
* The chmod, chown, truncate, utimens and getattr handlers of the
high-level API now all receive an additional struct fuse_file_info
pointer (which, however, may be NULL even if the file is currently
open).
The fgetattr and ftruncate handlers have become obsolete and have
been removed.
* The `fuse_session_new` function no longer accepts the ``-o
clone_fd`` option. Instead, this has become a parameter of the
`fuse_session_loop_mt` and `fuse_loop_mt` functions.
* For low-level file systems that implement the `write_buf` handler,
the `splice_read` option is now enabled by default. As usual, this
can be changed in the file system's `init` handler.
* The treatment of low-level options has been made more consistent:
Options that can be set in the init() handler (via the
fuse_conn_info parameter) can now be set only here,
i.e. fuse_session_new() no longer accepts arguments that change the
fuse_conn_info object before or after the call do init(). As a side
effect, this removes the ambiguity where some options can be
overwritten by init(), while others overwrite the choices made by
init().
For file systems that wish to offer command line options for these
settings, the new fuse_parse_conn_info_opts() and
fuse_apply_conn_info_opts() functions are available.
Consequently, the fuse_lowlevel_help() method has been dropped.
* The `async_read` field in `struct fuse_conn_info` has been
removed. To determine if the kernel supports asynchronous reads,
file systems should check the `FUSE_CAP_ASYNC_READ` bit of the
`capable` field. To enable/disable asynchronous reads, file systems
should set the flag in the `wanted` field.
* The `fuse_parse_cmdline` function no longer prints out help when the
``--verbose`` or ``--help`` flags are given. This needs to be done
by the file system (e.g. using the `fuse_cmdline_help()` and
`fuse_lowlevel_help()` functions).
* Added ``example/cuse_client.c`` to test ``example/cuse.c``.
* Removed ``example/null.c``. This has not been working for a while
for unknown reasons -- maybe because it tries to treat the
mountpoint as a file rather than a directory?
* There are several new examples that demonstrate the use of
the ``fuse_lowlevel_notify_*`` functions:
- ``example/notify_store_retrieve.c``
- ``example/notify_inval_inode.c``
- ``example/notify_inval_entry.c``
* The ``-o big_writes`` mount option has been removed. It is now
always active. File systems that want to limit the size of write
requests should use the ``-o max_write=<N>`` option instead.
* The `fuse_lowlevel_new` function has been renamed to
`fuse_session_new` and no longer interprets the --version or --help
options. To print help or version information, use the new
`fuse_lowlevel_help` and `fuse_lowlevel_version` functions.
* The ``allow_other`` and ``allow_root`` mount options (accepted by
`fuse_session_new()`) may now be specified together. In this case,
``allow_root`` takes precedence.
* There are new `fuse_session_unmount` and `fuse_session_mount`
functions that should be used in the low-level API. The `fuse_mount`
and `fuse_unmount` functions should be used with the high-level API
only.
* Neither `fuse_mount` nor `fuse_session_mount` take struct fuse_opts
parameters anymore. Mount options are parsed by `fuse_new` (for the
high-level API) and `fuse_session_new` (for the low-level API)
instead. To print help or version information, use the new
`fuse_mount_help` and `fuse_mount_version` functions.
* The ``fuse_lowlevel_notify_*`` functions now all take a `struct
fuse_session` parameter instead of a `struct fuse_chan`.
* The channel interface (``fuse_chan_*`` functions) has been made
private. As a result, the typical initialization sequence of a
low-level file system has changed from ::
ch = fuse_mount(mountpoint, &args);
se = fuse_lowlevel_new(&args, &lo_oper, sizeof(lo_oper), &lo);
fuse_set_signal_handlers(se);
fuse_session_add_chan(se, ch);
fuse_daemonize(fg);
if (mt)
fuse_session_loop_mt(se);
else
fuse_session_loop(se);
fuse_remove_signal_handlers(se);
fuse_session_remove_chan(ch);
fuse_session_destroy(se);
fuse_unmount(mountpoint, ch);
to ::
se = fuse_session_new(&args, &ll_ops, sizeof(ll_ops), NULL);
fuse_set_signal_handlers(se);
fuse_session_mount(se, mountpoint);
fuse_daemonize(fg);
if (mt)
fuse_session_loop_mt(se);
else
fuse_session_loop(se);
fuse_remove_signal_handlers(se);
fuse_session_unmount(se);
fuse_lowlevel_destroy(se);
The typical high-level setup has changed from ::
ch = fuse_mount(*mountpoint, &args);
fuse = fuse_new(ch, &args, op, op_size, user_data);
se = fuse_get_session(fuse);
fuse_set_signal_handlers(se);
fuse_daemonize(fg);
if (mt)
fuse_loop_mt(fuse);
else
fuse_loop(fuse);
fuse_remove_signal_handlers(se);
fuse_unmount(mountpoint, ch);
fuse_destroy(fuse);
to ::
fuse = fuse_new(&args, op, op_size, user_data);
se = fuse_get_session(fuse);
fuse_set_signal_handlers(se);
fuse_mount(fuse, mountpoint);
fuse_daemonize(fg);
if (mt)
fuse_loop_mt(fuse);
else
fuse_loop(fuse);
fuse_remove_signal_handlers(se);
fuse_unmount(fuse);
fuse_destroy(fuse);
File systems that use `fuse_main` are not affected by this change.
For integration with custom event loops, the new `fuse_session_fd`
function provides the file descriptor that's used for communication
with the kernel.
* Added *clone_fd* option. This creates a separate device file
descriptor for each processing thread, which might improve
performance.
* Added *writeback_cache* option. With kernel 3.14 and newer this
enables write-back caching which can significantly improve
performance.
* Added *async_dio* option. With kernel 3.13 and newer, this allows
direct I/O to be done asynchronously.
* The (high- and low-level) `rename` handlers now takes a *flags*
parameter (with values corresponding to the *renameat2* system call
introduced in Linux 3.15).
* The "ulockmgr_server" has been dropped.
* There is a new (low-level) `readdirplus` handler, with a
corresponding example in ``examples/fuse_lo-plus.c`` and a new
`fuse_add_direntry_plus` API function.
* The (high-level) `readdir` handler now takes a *flags* argument.
* The (high-level) `filler` function passed to `readdir` now takes an
additional *flags* argument.
* The (high-level) `getdir` handler has been dropped.
* The *flag_nullpath_ok* and *flag_utime_omit_ok* flags have been
dropped.
* The (high-level) *utime* handler has been dropped.
* The `fuse_invalidate` function has been removed.
* The `fuse_is_lib_option` function has been removed.
* The *fh_old* member of `struct fuse_file_info` has been dropped.
* The type of the *writepage* member of `struct fuse_file_info` was
changed from *int* to *unsigned int*.
* The `struct fuse_file_info` gained a new *poll_events* member.
* There is a new `fuse_pkgversion` function.
* The *fuse_off_t* and *fuse_ino_t* changed from *unsigned long* to
*uint64_t*, i.e. they are now 64 bits also on 32-bit systems.
* The type of the *generation* member of `struct fuse_entry_param*`
changed from *unsigned* to *uint64_t*.
* The (low-level) `setattr` handler gained a *FUSE_SET_ATTR_CTIME* bit
*for its *to_set* parameter.
* The `struct fuse_session_ops` data structure has been dropped.
* The documentation has been clarified and improved in many places.
FUSE 2.9.7 (2016-06-20)
=======================
* Added SELinux support.
* Fixed race-condition when session is terminated right after starting
a FUSE file system.
FUSE 2.9.6 (2016-04-23)
=======================
* Tarball now includes documentation.
* Shared-object version has now been bumped correctly.
FUSE 2.9.5 (2016-01-14)
=======================
* New maintainer: Nikolaus Rath <Nikolaus@rath.org>. Many thanks to
Miklos Szeredi <miklos@szeredi.hu> for bringing FUSE to where it is
now!
* fix warning in mount.c:receive_fd(). Reported by Albert Berger
* fix possible memory leak. Reported by Jose R. Guzman
FUSE 2.9.4 (2015-05-22)
=======================
* fix exec environment for mount and umount. Found by Tavis Ormandy
(CVE-2015-3202).
* fix fuse_remove_signal_handlers() to properly restore the default
signal handler. Reported by: Chris Johnson
* highlevel API: fix directory file handle passed to ioctl() method.
Reported by Eric Biggers
* libfuse: document deadlock avoidance for fuse_notify_inval_entry()
and fuse_notify_delete()
* fusermount, libfuse: send value as unsigned in "user_id=" and
"group_id=" options. Uids/gids larger than 2147483647 would result
in EINVAL when mounting the filesystem. This also needs a fix in
the kernel.
* Initialize stat buffer passed to ->getattr() and ->fgetattr() to
zero in all cases. Reported by Daniel Iwan
* libfuse: Add missing includes. This allows compiling fuse with
musl. Patch by Daniel Thau
Older Versions (before 2013-01-01)
==================================
Please see Git history, e.g. at
https://github.com/libfuse/libfuse/blob/fuse_2_9_3/ChangeLog.
|