https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=289686

            Bug ID: 289686
           Summary: [panic] kernel panic: null pointer defererence in
                    fuse_vnops.c:286
           Product: Base System
           Version: 14.3-RELEASE
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: [email protected]
          Reporter: [email protected]

Kernel: 14.3-RELEASE-p2

Unread portion of the kernel message buffer:
rdi: fffffe13be744c70 rsi: 0000000000000001 rdx: fffff85ee4b83201
rcx: 0000000000000000  r8: 0000000000000201  r9: fffff857376a7900
rax: 0000000000000000 rbx: fffff85ee4b831c0 rbp: fffffe13be744c30
r10: 0000000000000218 r11: 0000000000000c01 r12: fffff89ffa412000
r13: fffff88551397000 r14: fffff8564a211600 r15: fffffe143354b100
trap number             = 12
panic: page fault
cpuid = 43
time = 1757978146
KDB: stack backtrace:
#0 0xffffffff80ba8f1d at kdb_backtrace+0x5d
#1 0xffffffff80b5aa11 at vpanic+0x161
#2 0xffffffff80b5a8a3 at panic+0x43
#3 0xffffffff8104dbfa at trap_pfault+0x3da
#4 0xffffffff81023d98 at calltrap+0x8
#5 0xffffffff811102dd at VOP_CLOSE_APV+0x1d
#6 0xffffffff80c5aa0c at vn_close1+0x14c
#7 0xffffffff80c58e0d at vn_closefile+0x3d
#8 0xffffffff80af6e61 at _fdrop+0x11
#9 0xffffffff80c0df29 at unp_dispose+0x269
#10 0xffffffff80c0476e at soshutdown+0x10e
#11 0xffffffff80c0bb21 at kern_shutdown+0x51
#12 0xffffffff8104e547 at amd64_syscall+0x117
#13 0xffffffff810246ab at fast_syscall_common+0xf8

__curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
57              __asm("movq %%gs:%P1,%0" : "=r" (td) : "n" (offsetof(struct
pcpu,
(kgdb) bt
#0  __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
#1  doadump (textdump=<optimized out>) at /usr/src/sys/kern/kern_shutdown.c:405
#2  0xffffffff80b5a56b in kern_reboot (howto=260) at
/usr/src/sys/kern/kern_shutdown.c:523
#3  0xffffffff80b5aa69 in vpanic (fmt=0xffffffff811a03c8 "%s",
ap=ap@entry=0xfffffe13be744a00)
    at /usr/src/sys/kern/kern_shutdown.c:967
#4  0xffffffff80b5a8a3 in panic (fmt=<unavailable>) at
/usr/src/sys/kern/kern_shutdown.c:891
#5  0xffffffff8104dbfa in trap_fatal (frame=<optimized out>, eva=<optimized
out>) at /usr/src/sys/amd64/amd64/trap.c:1000
#6  0xffffffff8104dbfa in trap_pfault (frame=0xfffffe13be744a80,
usermode=false, signo=<optimized out>, ucode=<optimized out>)
#7  <signal handler called>
#8  0xffffffff8418d4a5 in fuse_vnop_close (ap=0xfffffe13be744c70) at
/usr/src/sys/fs/fuse/fuse_vnops.c:286
#9  0xffffffff811102dd in VOP_CLOSE_APV (vop=0xffffffff84196d88 <fuse_vnops>,
a=a@entry=0xfffffe13be744c70) at vnode_if.c:496
#10 0xffffffff80c5aa0c in VOP_CLOSE (vp=0xfffff85ee4b831c0, fflag=1,
cred=0xfffff8564a211600, td=0x0) at ./vnode_if.h:247
#11 vn_close1 (vp=vp@entry=0xfffff85ee4b831c0, flags=1,
file_cred=0xfffff8564a211600, td=0x0, keep_ref=false)
    at /usr/src/sys/kern/vfs_vnops.c:543
#12 0xffffffff80c58e0d in vn_closefile (fp=0xfffff93fb97d42d0, td=0x0) at
/usr/src/sys/kern/vfs_vnops.c:1872
#13 0xffffffff80af6e61 in fo_close (fp=0xfffffe13be744c70, td=0x1,
td@entry=0x0) at /usr/src/sys/sys/file.h:396
#14 _fdrop (fp=0xfffffe13be744c70, td=0x1, td@entry=0x0) at
/usr/src/sys/kern/kern_descrip.c:3711
#15 0xffffffff80afa73a in closef_nothread (fp=0xfffffe13be744c70) at
/usr/src/sys/kern/kern_descrip.c:2852
#16 0xffffffff80c0e208 in unp_discard (fp=0xfffffe13be744c70,
fp@entry=0xfffff93fb97d42d0)
    at /usr/src/sys/kern/uipc_usrreq.c:2921
#17 0xffffffff80c0df29 in unp_freerights (fdep=0xfffff8c087015830, fdcount=1)
at /usr/src/sys/kern/uipc_usrreq.c:2431
#18 unp_scan (m0=0xfffff941ae168500, op=<optimized out>) at
/usr/src/sys/kern/uipc_usrreq.c:3333
#19 unp_dispose (so=<optimized out>) at /usr/src/sys/kern/uipc_usrreq.c:3302
#20 0xffffffff80c0476e in soshutdown (so=<optimized out>, how=how@entry=2) at
/usr/src/sys/kern/uipc_socket.c:3661
#21 0xffffffff80c0bb21 in kern_shutdown (td=0xfffff89ffa412000, s=<optimized
out>, how=2)
    at /usr/src/sys/kern/uipc_syscalls.c:1210
#22 0xffffffff8104e547 in syscallenter (td=0xfffff89ffa412000) at
/usr/src/sys/amd64/amd64/../../kern/subr_syscall.c:193
#23 amd64_syscall (td=0xfffff89ffa412000, traced=0) at
/usr/src/sys/amd64/amd64/trap.c:1241
#24 <signal handler called>
#25 0x0000000825796a7a in ?? ()
Backtrace stopped: Cannot access memory at address 0x8456c4ef8

Looks like the problem is in sys/fs/fuse/fuse_vnops.c:788 where ap->a_td
returned NULL:

788     struct thread *td = ap->a_td;

In line 789, it's trying to dereference td->td_proc->p_pid and crashes because
td is NULL.

Based on my modest knowledge, the fix is quite simple. At line 789:
- pid_t pid = td->td_proc->p_pid;
+ pid_t pid = (td != NULL) ? td->td_proc->p_pid : 0;

Looking deeper into the code, it's allowed to have a pid equal to 0, and it
shouldn't crash.

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to