mirror of
https://github.com/libfuse/libfuse.git
synced 2026-07-07 14:47:41 +08:00
dc6ce72129
Bernd received a complaint via github that the "unmount" command in the
new fuse service API is prone to malicious symlink creation races
because the umount2 call doesn't use UMOUNT_NOFOLLOW. Therefore, if you
can trick a fuse service into asking the mount service helper to undo
the mount just after you've replaced the mount with a symlink to a
sensitive mount (e.g. /sys) then you whack a system hard.
I don't know why this unmounting functionality exists in libfuse, and
apparently Bernd doesn't like it. Since the fuse service API has not
yet been released, let's just rip out the command and pretend it never
existed.
Fixes: 5d8b9a39a1 ("mount_service: add systemd socket service mounting helper")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
261 lines
5.1 KiB
Plaintext
261 lines
5.1 KiB
Plaintext
FUSE_3.0 {
|
|
global:
|
|
fuse_destroy;
|
|
fuse_exit;
|
|
fuse_loop;
|
|
fuse_loop_mt;
|
|
fuse_reply_attr;
|
|
fuse_reply_buf;
|
|
fuse_reply_entry;
|
|
fuse_reply_err;
|
|
fuse_reply_none;
|
|
fuse_reply_readlink;
|
|
fuse_reply_write;
|
|
fuse_reply_xattr;
|
|
fuse_req_userdata;
|
|
fuse_session_destroy;
|
|
fuse_session_exit;
|
|
fuse_session_exited;
|
|
fuse_session_loop;
|
|
fuse_session_loop_mt;
|
|
fuse_session_reset;
|
|
fuse_session_fd;
|
|
fuse_opt_parse;
|
|
fuse_opt_add_opt;
|
|
fuse_opt_add_arg;
|
|
fuse_opt_free_args;
|
|
fuse_opt_match;
|
|
fuse_parse_cmdline;
|
|
fuse_remove_signal_handlers;
|
|
fuse_reply_create;
|
|
fuse_reply_open;
|
|
fuse_reply_statfs;
|
|
fuse_set_signal_handlers;
|
|
fuse_add_direntry;
|
|
fuse_add_direntry_plus;
|
|
fuse_daemonize;
|
|
fuse_get_session;
|
|
fuse_interrupted;
|
|
fuse_session_new;
|
|
fuse_main_real;
|
|
fuse_mount;
|
|
fuse_session_custom_io;
|
|
fuse_session_mount;
|
|
fuse_new;
|
|
fuse_opt_insert_arg;
|
|
fuse_reply_lock;
|
|
fuse_req_interrupt_func;
|
|
fuse_req_interrupted;
|
|
fuse_unmount;
|
|
fuse_session_unmount;
|
|
fuse_fs_access;
|
|
fuse_fs_bmap;
|
|
fuse_fs_chmod;
|
|
fuse_fs_chown;
|
|
fuse_fs_create;
|
|
fuse_fs_destroy;
|
|
fuse_fs_flush;
|
|
fuse_fs_fsync;
|
|
fuse_fs_fsyncdir;
|
|
fuse_fs_getattr;
|
|
fuse_fs_getxattr;
|
|
fuse_fs_init;
|
|
fuse_fs_link;
|
|
fuse_fs_listxattr;
|
|
fuse_fs_lock;
|
|
fuse_fs_mkdir;
|
|
fuse_fs_mknod;
|
|
fuse_fs_new;
|
|
fuse_fs_open;
|
|
fuse_fs_opendir;
|
|
fuse_fs_read;
|
|
fuse_fs_readdir;
|
|
fuse_fs_readlink;
|
|
fuse_fs_release;
|
|
fuse_fs_releasedir;
|
|
fuse_fs_removexattr;
|
|
fuse_fs_rename;
|
|
fuse_fs_rmdir;
|
|
fuse_fs_setxattr;
|
|
fuse_fs_statfs;
|
|
fuse_fs_symlink;
|
|
fuse_fs_truncate;
|
|
fuse_fs_unlink;
|
|
fuse_fs_utimens;
|
|
fuse_fs_write;
|
|
fuse_reply_iov;
|
|
fuse_version;
|
|
fuse_pkgversion;
|
|
fuse_reply_bmap;
|
|
cuse_lowlevel_new;
|
|
cuse_lowlevel_main;
|
|
cuse_lowlevel_setup;
|
|
cuse_lowlevel_teardown;
|
|
fuse_fs_ioctl;
|
|
fuse_fs_poll;
|
|
fuse_get_context;
|
|
fuse_getgroups;
|
|
fuse_lowlevel_notify_inval_entry;
|
|
fuse_lowlevel_notify_inval_inode;
|
|
fuse_lowlevel_notify_poll;
|
|
fuse_notify_poll;
|
|
fuse_opt_add_opt_escaped;
|
|
fuse_pollhandle_destroy;
|
|
fuse_reply_ioctl;
|
|
fuse_reply_ioctl_iov;
|
|
fuse_reply_ioctl_retry;
|
|
fuse_reply_poll;
|
|
fuse_req_ctx;
|
|
fuse_req_getgroups;
|
|
fuse_buf_copy;
|
|
fuse_buf_size;
|
|
fuse_fs_read_buf;
|
|
fuse_fs_write_buf;
|
|
fuse_lowlevel_notify_retrieve;
|
|
fuse_lowlevel_notify_store;
|
|
fuse_reply_data;
|
|
fuse_session_process_buf;
|
|
fuse_session_receive_buf;
|
|
fuse_start_cleanup_thread;
|
|
fuse_stop_cleanup_thread;
|
|
fuse_clean_cache;
|
|
fuse_lowlevel_notify_delete;
|
|
fuse_fs_flock;
|
|
fuse_fs_fallocate;
|
|
fuse_lowlevel_help;
|
|
fuse_lowlevel_version;
|
|
fuse_cmdline_help;
|
|
fuse_apply_conn_info_opts;
|
|
fuse_parse_conn_info_opts;
|
|
fuse_fs_lseek;
|
|
fuse_reply_lseek;
|
|
|
|
local:
|
|
*;
|
|
};
|
|
|
|
FUSE_3.1 {
|
|
global:
|
|
fuse_lib_help;
|
|
fuse_invalidate_path;
|
|
fuse_new_30;
|
|
fuse_new_31;
|
|
fuse_new;
|
|
} FUSE_3.0;
|
|
|
|
FUSE_3.2 {
|
|
global:
|
|
fuse_session_loop_mt;
|
|
fuse_session_loop_mt_31;
|
|
fuse_session_loop_mt_32;
|
|
fuse_loop_mt;
|
|
fuse_loop_mt_31;
|
|
} FUSE_3.1;
|
|
|
|
FUSE_3.3 {
|
|
global:
|
|
fuse_open_channel;
|
|
} FUSE_3.2;
|
|
|
|
FUSE_3.4 {
|
|
global:
|
|
fuse_fs_copy_file_range;
|
|
} FUSE_3.3;
|
|
|
|
FUSE_3.7 {
|
|
global:
|
|
fuse_set_log_func;
|
|
fuse_log;
|
|
} FUSE_3.4;
|
|
|
|
FUSE_3.12 {
|
|
global:
|
|
fuse_session_loop_mt;
|
|
fuse_session_loop_mt_312;
|
|
fuse_loop_mt;
|
|
fuse_loop_mt_32;
|
|
fuse_loop_mt_312;
|
|
fuse_loop_cfg_create;
|
|
fuse_loop_cfg_destroy;
|
|
fuse_loop_cfg_set_idle_threads;
|
|
fuse_loop_cfg_set_max_threads;
|
|
fuse_loop_cfg_set_clone_fd;
|
|
fuse_loop_cfg_convert;
|
|
fuse_parse_cmdline;
|
|
fuse_parse_cmdline_30;
|
|
fuse_parse_cmdline_312;
|
|
fuse_lowlevel_notify_expire_entry;
|
|
} FUSE_3.4;
|
|
|
|
FUSE_3.17 {
|
|
global:
|
|
fuse_main_real_versioned;
|
|
fuse_session_new_versioned;
|
|
_fuse_new_30;
|
|
_fuse_new_31;
|
|
fuse_passthrough_open;
|
|
fuse_passthrough_close;
|
|
fuse_session_custom_io_30;
|
|
fuse_session_custom_io_317;
|
|
fuse_set_fail_signal_handlers;
|
|
fuse_log_enable_syslog;
|
|
fuse_log_close_syslog;
|
|
} FUSE_3.12;
|
|
|
|
FUSE_3.17.3 {
|
|
global:
|
|
fuse_set_feature_flag;
|
|
fuse_unset_feature_flag;
|
|
fuse_get_feature_flag;
|
|
|
|
# Not part of public API, for internal testing only
|
|
fuse_convert_to_conn_want_ext;
|
|
} FUSE_3.17;
|
|
|
|
FUSE_3.18 {
|
|
global:
|
|
fuse_req_is_uring;
|
|
fuse_req_get_payload;
|
|
fuse_lowlevel_notify_increment_epoch;
|
|
|
|
fuse_reply_statx;
|
|
fuse_fs_statx;
|
|
} FUSE_3.17;
|
|
|
|
FUSE_3.19 {
|
|
global:
|
|
fuse_session_start_teardown_watchdog;
|
|
fuse_session_stop_teardown_watchdog;
|
|
fuse_lowlevel_notify_prune;
|
|
fuse_daemonize_early_start;
|
|
fuse_daemonize_early_success;
|
|
fuse_daemonize_early_fail;
|
|
fuse_daemonize_early_is_active;
|
|
fuse_session_set_debug;
|
|
fuse_session_set_sync_init;
|
|
fuse_service_accept;
|
|
fuse_service_append_args;
|
|
fuse_service_can_allow_other;
|
|
fuse_service_can_fuseblk;
|
|
fuse_service_cmdline;
|
|
fuse_service_destroy;
|
|
fuse_service_exit;
|
|
fuse_service_expect_mount_format;
|
|
fuse_service_finish_file_requests;
|
|
fuse_service_main_real_versioned;
|
|
fuse_service_parse_cmdline_opts;
|
|
fuse_service_receive_file;
|
|
fuse_service_release;
|
|
fuse_service_request_file;
|
|
fuse_service_request_blockdev;
|
|
fuse_service_send_goodbye;
|
|
fuse_service_session_mount;
|
|
fuse_req_secctx_count;
|
|
fuse_req_secctx_reset;
|
|
fuse_req_secctx_next;
|
|
} FUSE_3.18;
|
|
|
|
# Local Variables:
|
|
# indent-tabs-mode: t
|
|
# End:
|