Dan Aloni
fddac3b457
nfsd: under NFSv4.1, fix double svc_xprt_put on rpc_create failure
[ Upstream commit 3bc8edc98bd43540dbe648e4ef91f443d6d20a24 ]
On error situation `clp->cl_cb_conn.cb_xprt` should not be given
a reference to the xprt otherwise both client cleanup and the
error handling path of the caller call to put it. Better to
delay handing over the reference to a later branch.
[ 72.530665] refcount_t: underflow; use-after-free.
[ 72.531933] WARNING: CPU: 0 PID: 173 at lib/refcount.c:28 refcount_warn_saturate+0xcf/0x120
[ 72.533075] Modules linked in: nfsd(OE) nfsv4(OE) nfsv3(OE) nfs(OE) lockd(OE) compat_nfs_ssc(OE) nfs_acl(OE) rpcsec_gss_krb5(OE) auth_rpcgss(OE) rpcrdma(OE) dns_resolver fscache netfs grace rdma_cm iw_cm ib_cm sunrpc(OE) mlx5_ib mlx5_core mlxfw pci_hyperv_intf ib_uverbs ib_core xt_MASQUERADE nf_conntrack_netlink nft_counter xt_addrtype nft_compat br_netfilter bridge stp llc nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set overlay nf_tables nfnetlink crct10dif_pclmul crc32_pclmul ghash_clmulni_intel xfs serio_raw virtio_net virtio_blk net_failover failover fuse [last unloaded: sunrpc]
[ 72.540389] CPU: 0 PID: 173 Comm: kworker/u16:5 Tainted: G OE 5.15.82-dan #1
[ 72.541511] Hardware name: Red Hat KVM/RHEL-AV, BIOS 1.16.0-3.module+el8.7.0+1084+97b81f61 04/01/2014
[ 72.542717] Workqueue: nfsd4_callbacks nfsd4_run_cb_work [nfsd]
[ 72.543575] RIP: 0010:refcount_warn_saturate+0xcf/0x120
[ 72.544299] Code: 55 00 0f 0b 5d e9 01 50 98 00 80 3d 75 9e 39 08 00 0f 85 74 ff ff ff 48 c7 c7 e8 d1 60 8e c6 05 61 9e 39 08 01 e8 f6 51 55 00 <0f> 0b 5d e9 d9 4f 98 00 80 3d 4b 9e 39 08 00 0f 85 4c ff ff ff 48
[ 72.546666] RSP: 0018:ffffb3f841157cf0 EFLAGS: 00010286
[ 72.547393] RAX: 0000000000000026 RBX: ffff89ac6231d478 RCX: 0000000000000000
[ 72.548324] RDX: ffff89adb7c2c2c0 RSI: ffff89adb7c205c0 RDI: ffff89adb7c205c0
[ 72.549271] RBP: ffffb3f841157cf0 R08: 0000000000000000 R09: c0000000ffefffff
[ 72.550209] R10: 0000000000000001 R11: ffffb3f841157ad0 R12: ffff89ac6231d180
[ 72.551142] R13: ffff89ac6231d478 R14: ffff89ac40c06180 R15: ffff89ac6231d4b0
[ 72.552089] FS: 0000000000000000(0000) GS:ffff89adb7c00000(0000) knlGS:0000000000000000
[ 72.553175] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 72.553934] CR2: 0000563a310506a8 CR3: 0000000109a66000 CR4: 0000000000350ef0
[ 72.554874] Call Trace:
[ 72.555278] <TASK>
[ 72.555614] svc_xprt_put+0xaf/0xe0 [sunrpc]
[ 72.556276] nfsd4_process_cb_update.isra.11+0xb7/0x410 [nfsd]
[ 72.557087] ? update_load_avg+0x82/0x610
[ 72.557652] ? cpuacct_charge+0x60/0x70
[ 72.558212] ? dequeue_entity+0xdb/0x3e0
[ 72.558765] ? queued_spin_unlock+0x9/0x20
[ 72.559358] nfsd4_run_cb_work+0xfc/0x270 [nfsd]
[ 72.560031] process_one_work+0x1df/0x390
[ 72.560600] worker_thread+0x37/0x3b0
[ 72.561644] ? process_one_work+0x390/0x390
[ 72.562247] kthread+0x12f/0x150
[ 72.562710] ? set_kthread_struct+0x50/0x50
[ 72.563309] ret_from_fork+0x22/0x30
[ 72.563818] </TASK>
[ 72.564189] ---[ end trace 031117b1c72ec616 ]---
[ 72.566019] list_add corruption. next->prev should be prev (ffff89ac4977e538), but was ffff89ac4763e018. (next=ffff89ac4763e018).
[ 72.567647] ------------[ cut here ]------------
Fixes: a4abc6b12eb1 ("nfsd: Fix svc_xprt refcnt leak when setup callback client failed")
Cc: Xiyu Yang <xiyuyang19@fudan.edu.cn>
Cc: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Dan Aloni <dan.aloni@vastdata.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
2023-01-18 11:41:31 +01:00 |
| .. |
|
9p
|
9p: missing chunk of "fs/9p: Don't update file type when updating file attributes"
|
2022-06-22 14:11:02 +02:00 |
|
adfs
|
|
|
|
affs
|
|
|
|
afs
|
afs: Fix fileserver probe RTT handling
|
2022-12-08 11:23:03 +01:00 |
|
autofs
|
|
|
|
befs
|
|
|
|
bfs
|
|
|
|
btrfs
|
btrfs: send: avoid unaligned encoded writes when attempting to clone range
|
2022-12-14 11:30:41 +01:00 |
|
cachefiles
|
|
|
|
ceph
|
ceph: avoid putting the realm twice when decoding snaps fails
|
2022-12-08 11:23:00 +01:00 |
|
cifs
|
cifs: add check for returning value of SMB2_set_info_init
|
2022-11-25 17:42:16 +01:00 |
|
coda
|
|
|
|
configfs
|
configfs: fix possible memory leak in configfs_create_dir()
|
2023-01-18 11:41:09 +01:00 |
|
cramfs
|
|
|
|
crypto
|
fscrypt: add fscrypt_symlink_getattr() for computing st_size
|
2021-09-12 08:56:38 +02:00 |
|
debugfs
|
debugfs: fix error when writing negative value to atomic_t debugfs file
|
2023-01-18 11:40:56 +01:00 |
|
devpts
|
fsnotify: fix fsnotify hooks in pseudo filesystems
|
2022-02-01 17:24:34 +01:00 |
|
dlm
|
fs: dlm: handle -EBUSY first in lock arg validation
|
2022-10-26 13:22:14 +02:00 |
|
ecryptfs
|
Revert "ecryptfs: replace BUG_ON with error handling code"
|
2021-05-26 12:05:19 +02:00 |
|
efivarfs
|
|
|
|
efs
|
|
|
|
erofs
|
erofs: avoid consecutive detection for Highmem memory
|
2022-08-25 11:17:36 +02:00 |
|
exportfs
|
|
|
|
ext2
|
ext2: Add more validity checks for inode counts
|
2022-08-25 11:17:28 +02:00 |
|
ext4
|
ext4: fix BUG_ON() when directory entry has invalid rec_len
|
2022-11-10 17:57:56 +01:00 |
|
f2fs
|
f2fs: avoid victim selection from previous victim section
|
2023-01-18 11:41:20 +01:00 |
|
fat
|
fat: add ratelimit to fat*_ent_bread()
|
2022-06-14 18:11:30 +02:00 |
|
freevxfs
|
|
|
|
fscache
|
fscache: Fix cookie key hashing
|
2021-09-22 12:26:25 +02:00 |
|
fuse
|
fuse: lock inode unconditionally in fuse_fallocate()
|
2022-12-08 11:23:01 +01:00 |
|
gfs2
|
gfs2: Switch from strlcpy to strscpy
|
2022-11-25 17:42:22 +01:00 |
|
hfs
|
hfs: Fix OOB Write in hfs_asc2mac
|
2023-01-18 11:40:59 +01:00 |
|
hfsplus
|
hfsplus: prevent corruption in shrinking truncate
|
2021-05-19 10:08:29 +02:00 |
|
hostfs
|
|
|
|
hpfs
|
|
|
|
hugetlbfs
|
mm, hugetlb: allow for "high" userspace addresses
|
2022-05-09 09:03:28 +02:00 |
|
iomap
|
iomap: iomap_write_failed fix
|
2022-06-14 18:11:36 +02:00 |
|
isofs
|
isofs: Fix out of bound access for corrupted isofs image
|
2021-11-12 14:43:03 +01:00 |
|
jbd2
|
jbd2: wake up journal waiters in FIFO order, not LIFO
|
2022-10-26 13:22:17 +02:00 |
|
jffs2
|
jffs2: fix memory leak in jffs2_do_fill_super
|
2022-06-14 18:11:55 +02:00 |
|
jfs
|
fs: jfs: fix possible NULL pointer dereference in dbFree()
|
2022-06-14 18:11:29 +02:00 |
|
kernfs
|
kernfs: fix use-after-free in __kernfs_remove
|
2022-11-03 23:56:54 +09:00 |
|
lockd
|
lockd: lockd server-side shouldn't set fl_ops
|
2021-09-22 12:26:34 +02:00 |
|
minix
|
minix: fix bug when opening a file with O_DIRECT
|
2022-04-15 14:18:35 +02:00 |
|
nfs
|
NFSv4.x: Fail client initialisation if state manager thread can't run
|
2023-01-18 11:41:10 +01:00 |
|
nfs_common
|
|
|
|
nfsd
|
nfsd: under NFSv4.1, fix double svc_xprt_put on rpc_create failure
|
2023-01-18 11:41:31 +01:00 |
|
nilfs2
|
nilfs2: fix NULL pointer dereference in nilfs_palloc_commit_free_entry()
|
2022-12-08 11:23:04 +01:00 |
|
nls
|
|
|
|
notify
|
fsnotify: fix wrong lockdep annotations
|
2022-06-14 18:11:34 +02:00 |
|
ntfs
|
ntfs: check overflow when iterating ATTR_RECORDs
|
2022-11-25 17:42:22 +01:00 |
|
ocfs2
|
ocfs2: fix memory leak in ocfs2_mount_volume()
|
2023-01-18 11:40:56 +01:00 |
|
omfs
|
|
|
|
openpromfs
|
|
|
|
orangefs
|
orangefs: Fix sysfs not cleanup when dev init failed
|
2023-01-18 11:41:20 +01:00 |
|
overlayfs
|
ovl: drop WARN_ON() dentry is NULL in ovl_encode_fh()
|
2022-08-25 11:17:23 +02:00 |
|
proc
|
mm: /proc/pid/smaps_rollup: fix no vma's null-deref
|
2022-10-29 10:20:36 +02:00 |
|
pstore
|
pstore: Avoid kcore oops by vmap()ing with VM_IOREMAP
|
2023-01-18 11:40:52 +01:00 |
|
qnx4
|
qnx4: work around gcc false positive warning bug
|
2021-09-30 10:09:26 +02:00 |
|
qnx6
|
|
|
|
quota
|
quota: Check next/prev free block number after reading from quota file
|
2022-10-26 13:22:14 +02:00 |
|
ramfs
|
|
|
|
reiserfs
|
reiserfs: check directory items on read from disk
|
2021-08-12 13:21:05 +02:00 |
|
romfs
|
|
|
|
squashfs
|
squashfs: fix divide error in calculate_skip()
|
2021-05-19 10:08:29 +02:00 |
|
sysfs
|
|
|
|
sysv
|
fs: sysv: Fix sysv_nblocks() returns wrong value
|
2023-01-18 11:40:58 +01:00 |
|
tracefs
|
tracefs: Only clobber mode/uid/gid on remount if asked
|
2022-09-20 12:28:00 +02:00 |
|
ubifs
|
ubifs: Rectify space amount budget for mkdir/tmpfile operations
|
2022-04-15 14:18:31 +02:00 |
|
udf
|
udf: Fix extending file within last block
|
2023-01-18 11:40:47 +01:00 |
|
ufs
|
|
|
|
unicode
|
|
|
|
verity
|
fs-verity: fix signed integer overflow with i_size near S64_MAX
|
2021-10-06 15:42:30 +02:00 |
|
xfs
|
xfs: drain the buf delwri queue before xfsaild idles
|
2022-11-25 17:42:03 +01:00 |
|
aio.c
|
aio: fix use-after-free due to missing POLLFREE handling
|
2021-12-14 14:49:02 +01:00 |
|
anon_inodes.c
|
|
|
|
attr.c
|
vfs: Check the truncate maximum size in inode_newsize_ok()
|
2022-08-25 11:17:21 +02:00 |
|
bad_inode.c
|
|
|
|
binfmt_aout.c
|
|
|
|
binfmt_elf.c
|
elf: don't use MAP_FIXED_NOREPLACE for elf interpreter mappings
|
2021-10-06 15:42:35 +02:00 |
|
binfmt_elf_fdpic.c
|
|
|
|
binfmt_em86.c
|
|
|
|
binfmt_flat.c
|
binfmt_flat: do not stop relocating GOT entries prematurely on riscv
|
2022-06-14 18:11:23 +02:00 |
|
binfmt_misc.c
|
|
|
|
binfmt_script.c
|
|
|
|
block_dev.c
|
block: reexpand iov_iter after read/write
|
2021-05-22 11:38:29 +02:00 |
|
buffer.c
|
mm: fs: initialize fsdata passed to write_begin/write_end interface
|
2022-11-25 17:42:22 +01:00 |
|
char_dev.c
|
chardev: fix error handling in cdev_device_add()
|
2023-01-18 11:41:25 +01:00 |
|
compat.c
|
|
|
|
compat_binfmt_elf.c
|
|
|
|
compat_ioctl.c
|
compat_ioctl: remove /dev/random commands
|
2022-06-22 14:11:03 +02:00 |
|
coredump.c
|
|
|
|
d_path.c
|
|
|
|
dax.c
|
dax: fix cache flush on PMD-mapped pages
|
2022-06-14 18:11:41 +02:00 |
|
dcache.c
|
|
|
|
dcookies.c
|
|
|
|
direct-io.c
|
|
|
|
drop_caches.c
|
|
|
|
eventfd.c
|
|
|
|
eventpoll.c
|
epoll: check for events when removing a timed out thread from the wait queue
|
2022-12-08 11:23:05 +01:00 |
|
exec.c
|
exec: Force single empty string when argv is empty
|
2022-06-06 08:33:50 +02:00 |
|
fcntl.c
|
fcntl: fix potential deadlock for &fasync_struct.fa_lock
|
2021-09-15 09:47:28 +02:00 |
|
fhandle.c
|
|
|
|
file.c
|
fget: clarify and improve __fget_files() implementation
|
2022-03-02 11:41:18 +01:00 |
|
file_table.c
|
SUNRPC: Ensure we flush any closed sockets before xs_xprt_free()
|
2022-05-25 09:14:34 +02:00 |
|
filesystems.c
|
|
|
|
fs-writeback.c
|
fs-writeback: writeback_sb_inodes:Recalculate 'wrote' according skipped pages
|
2022-06-14 18:11:44 +02:00 |
|
fs_context.c
|
memcg: charge fs_context and legacy_fs_context
|
2022-02-08 18:24:29 +01:00 |
|
fs_parser.c
|
|
|
|
fs_pin.c
|
|
|
|
fs_struct.c
|
|
|
|
fs_types.c
|
|
|
|
fsopen.c
|
|
|
|
inode.c
|
fs: fix UAF/GPF bug in nilfs_mdt_destroy
|
2022-10-15 07:54:36 +02:00 |
|
internal.h
|
cgroup1: fix leaked context root causing sporadic NULL deref in LTP
|
2021-07-31 08:19:37 +02:00 |
|
io_uring.c
|
io_uring/af_unix: defer registered files gc to io_uring release
|
2022-10-26 13:22:59 +02:00 |
|
ioctl.c
|
|
|
|
Kconfig
|
|
|
|
Kconfig.binfmt
|
|
|
|
libfs.c
|
libfs: add DEFINE_SIMPLE_ATTRIBUTE_SIGNED for signed value
|
2023-01-18 11:40:55 +01:00 |
|
locks.c
|
|
|
|
Makefile
|
|
|
|
mbcache.c
|
|
|
|
mount.h
|
|
|
|
mpage.c
|
|
|
|
namei.c
|
mm: fs: initialize fsdata passed to write_begin/write_end interface
|
2022-11-25 17:42:22 +01:00 |
|
namespace.c
|
fs: warn about impending deprecation of mandatory locks
|
2021-08-26 08:36:22 -04:00 |
|
no-block.c
|
|
|
|
nsfs.c
|
|
|
|
open.c
|
|
|
|
pipe.c
|
pipe: increase minimum default pipe size to 2 pages
|
2021-08-12 13:21:02 +02:00 |
|
pnode.c
|
|
|
|
pnode.h
|
|
|
|
posix_acl.c
|
|
|
|
proc_namespace.c
|
|
|
|
read_write.c
|
|
|
|
readdir.c
|
|
|
|
select.c
|
select: Fix indefinitely sleeping task in poll_schedule_timeout()
|
2022-01-29 10:25:11 +01:00 |
|
seq_file.c
|
seq_file: disallow extremely large seq buffer allocations
|
2021-07-20 16:10:54 +02:00 |
|
signalfd.c
|
io_uring: disable polling pollfree files
|
2022-09-05 10:27:47 +02:00 |
|
splice.c
|
Revert "fs: check FMODE_LSEEK to control internal pipe splicing"
|
2022-10-17 17:24:32 +02:00 |
|
stack.c
|
|
|
|
stat.c
|
stat: fix inconsistency between struct stat and struct compat_stat
|
2022-04-27 13:50:48 +02:00 |
|
statfs.c
|
|
|
|
super.c
|
vfs: make freeze_super abort when sync_filesystem returns error
|
2022-02-23 11:59:55 +01:00 |
|
sync.c
|
|
|
|
timerfd.c
|
|
|
|
userfaultfd.c
|
userfaultfd: open userfaultfds with O_RDONLY
|
2022-10-26 13:22:21 +02:00 |
|
utimes.c
|
|
|
|
xattr.c
|
fs: don't audit the capability check in simple_xattr_list()
|
2023-01-18 11:40:53 +01:00 |