Package: sshfs
Version: 3.7.1+repack-1
Severity: important

Dear Maintainer,

the following steps crash sshfs with SIGSEGV when a file is open while
the folder containing it is renamed.

Steps to reproduce:

#!/usr/bin/python3
import os

os.mkdir('old_name')
f = open('old_name/f', 'w')
os.rename('old_name', 'new_name')
f.close()  # crashes here


Output from gdb:

user@media:~/sshfs/sshfs-fuse-3.7.1+repack/build$ gdb -ex r --args sshfs
mia.arbitrary.ch:/ /home/user/b -f -d -o max_conns=2
GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from sshfs...
Reading symbols from
/usr/lib/debug/.build-id/0c/1ef7b947ed8cfbdddaa25f2bf189b9bf14347e.debug...
Starting program: /usr/bin/sshfs mia.arbitrary.ch:/ /home/user/b -f -d
-o max_conns=2
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
SSHFS version 3.7.1
[Detaching after fork from child process 15132]
[Detaching after fork from child process 15134]
executing <ssh> <-x> <-a> <-oClearAllForwardings=yes> <-2>
<mia.arbitrary.ch> <-s> <sftp>
Server version: 3
Extension: posix-ren...@openssh.com <1>
Extension: stat...@openssh.com <2>
Extension: fstat...@openssh.com <2>
Extension: hardl...@openssh.com <1>
Extension: fs...@openssh.com <1>
Extension: lsets...@openssh.com <1>
[New Thread 0x7ffff7be1700 (LWP 15136)]
[New Thread 0x7ffff72de700 (LWP 15137)]
[New Thread 0x7ffff69db700 (LWP 15138)]
[00001] LSTAT
  [00001]          ATTRS       41bytes (3ms)
[00002] LSTAT
  [00002]          ATTRS       41bytes (2ms)
[00003] LSTAT
  [00003]          ATTRS       41bytes (1ms)
[00004] LSTAT
  [00004]          ATTRS       41bytes (1ms)
[00005] LSTAT
  [00005]         STATUS       33bytes (3ms)
[00006] LSTAT
  [00006]         STATUS       33bytes (3ms)
[00007] MKDIR
  [00007]         STATUS       28bytes (2ms)
[00008] LSTAT
  [00008]          ATTRS       41bytes (2ms)
[00009] LSTAT
  [00009]         STATUS       33bytes (1ms)
[00010] OPEN
[00011] LSTAT
  [00010]         HANDLE       17bytes (1ms)
  [00011]          ATTRS       41bytes (1ms)
[00012] FSTAT
  [00012]          ATTRS       41bytes (1ms)
[Detaching after fork from child process 15140]
executing <ssh> <-x> <-a> <-oClearAllForwardings=yes> <-2>
<mia.arbitrary.ch> <-s> <sftp>
Server version: 3
Extension: posix-ren...@openssh.com <1>
Extension: stat...@openssh.com <2>
Extension: fstat...@openssh.com <2>
Extension: hardl...@openssh.com <1>
Extension: fs...@openssh.com <1>
Extension: lsets...@openssh.com <1>
[New Thread 0x7ffff61da700 (LWP 15142)]
[00013] LSTAT
  [00013]         STATUS       33bytes (1ms)
[00014] EXTENDED
  [00014]         STATUS       28bytes (1ms)
[New Thread 0x7ffff59d9700 (LWP 15143)]
[00015] CLOSE

Thread 2 "sshfs" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7be1700 (LWP 15136)]
--Type <RET> for more, q to quit, c to continue without paging--c
0x0000555555560423 in sshfs_release (path=0x7ffff0000f60
"/media/_unsorted/_in/new_name/f", fi=0x7ffff7be0d30) at ../sshfs.c:2890
2890                    ce->refcount--;
(gdb) t 2
[Switching to thread 2 (Thread 0x7ffff7be1700 (LWP 15136))]
#0  0x0000555555560423 in sshfs_release (path=0x7ffff0000f60
"/media/_unsorted/_in/new_name/f",
    fi=0x7ffff7be0d30) at ../sshfs.c:2890
2890                    ce->refcount--;
(gdb) bt
#0  0x0000555555560423 in sshfs_release (path=0x7ffff0000f60
"/media/_unsorted/_in/new_name/f",
    fi=0x7ffff7be0d30) at ../sshfs.c:2890
#1  0x00007ffff7f82cba in fuse_do_release (f=0x555555571080, ino=6,
    path=0x7ffff0000f60 "/media/_unsorted/_in/new_name/f", fi=<optimized
out>) at ../lib/fuse.c:3142
#2  0x00007ffff7f85cb6 in fuse_lib_release (req=0x7ffff0001fb0, ino=6,
fi=0x7ffff7be0d30) at ../lib/fuse.c:4121
#3  0x00007ffff7f8c8c6 in do_release (req=<optimized out>,
nodeid=<optimized out>, inarg=<optimized out>)
    at ../lib/fuse_lowlevel.c:1455
#4  0x00007ffff7f8ea73 in fuse_session_process_buf_int
(se=0x555555571460, buf=buf@entry=0x555555591bb0,
    ch=<optimized out>) at ../lib/fuse_lowlevel.c:2666
#5  0x00007ffff7f8a383 in fuse_do_work (data=0x555555591b90) at
../lib/fuse_loop_mt.c:163
#6  0x00007ffff7f5cea7 in start_thread (arg=<optimized out>) at
pthread_create.c:477
#7  0x00007ffff7d5ddef in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) print ce
$1 = <optimized out>
(gdb) print ce->refcount
value has been optimized out
(gdb) list
2885            chunk_put_locked(sf->readahead);
2886            if (sshfs.max_conns > 1) {
2887                    pthread_mutex_lock(&sshfs.lock);
2888                    sf->conn->file_count--;
2889                    ce = g_hash_table_lookup(sshfs.conntab, path);
2890                    ce->refcount--;
2891                    if(ce->refcount == 0) {
2892                            g_hash_table_remove(sshfs.conntab, path);
2893                            g_free(ce);
2894                    }


Output from dmesg:

[15894.745037] sshfs[11446]: segfault at 0 ip 00005ce63a6cd423 sp
00007579c9fc9c20 error 6 in sshfs[5ce63a6c5000+b000]


Looks to me like `ce` on line 2890 shown above is NULL.


-- System Information:
Debian Release: bullseye/sid
  APT prefers testing-debug
  APT policy: (500, 'testing-debug'), (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 5.10.13-1.fc25.qubes.x86_64 (SMP w/4 CPU threads)
Kernel taint flags: TAINT_OOT_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE
not set
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages sshfs depends on:
ii  fuse3           3.10.1-3
ii  libc6           2.31-9
ii  libfuse3-3      3.10.1-3
ii  libglib2.0-0    2.66.6-2
ii  openssh-client  1:8.4p1-3

sshfs recommends no packages.

sshfs suggests no packages.

-- no debconf information

Reply via email to