On Mon, Dec 02, 2024 at 05:22:23PM +0100, Alexander Bluhm wrote:
> panic: Data modified on freelist: word 11 of object 0xd7632800 size 0x270
> previous type mount (0xdead410f != 0xdead4110)
It looks like the struct mount mnt_lock rwl_readers was derecemented
after free. rwl_readers = 3735896335 = 0xdead410f
This happens in vfs_busy() with RW_READ. New rw_do_enter_read()
function added call to rw_dec(&rwl->rwl_readers) there.
I have the impression that the reimplementation of rw-lock makes
the problem visible. Accessing struct mount after sleep is
questionalble. Does anything prevent a file system unount while
sleeping in vfs_busy()?
bluhm
ddb{0}> show struct mount 0xd7632800
struct mount at 0xd7632800 (624 bytes) {mnt_list = {tqe_next = (struct mount
*)0xdead4110, tqe_prev = 0xdead4110}, mnt_dounmount = {sle_next = (struct mount
*)0xdead4110}, mnt_op = (const vfsops *)0xdead4110, mnt_vfc = (struct vfsconf
*)0xdead4110, mnt_vnodecovered = (struct vnode *)0xdead4110, mnt_syncer =
(struct vnode *)0xdead4110, mnt_vnodelist = {tqh_first = (struct vnode
*)0xdead4110, tqh_last = 0xdead4110}, mnt_lock = {rwl_owner = 3735896336,
rwl_waiters =735896336, rwl_readers = 3735896335, rwl_name = (const char
*)0xdead4110}, mnt_flag = -559070960, mnt_stat = {f_flags = 3735896336, f_bsize
= 3735896336, f_iosize = 16384, f_blocks = 504711, f_bfree = 504710, f_bavail =
479475, f_files = 155518, f_ffree = 155517, f_favail = 155517, f_syncwrites =
66, f_syncreads = 7262, f_asyncwrites = 2403, f_asyncreads = 0, f_fsid = {val =
[3584,-539189856]}, f_namemax = 255, f_owner = 0, f_ctime = 1733155970,
f_fstypename = [102,102,115,0,0,0,0,0,0,0,0,0,0,0,0,0], f_mntonname =
[47,109,110,116,47,114,101,103,114,101,115,115,45,109,111,117,110,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
f_mntfromname =
[47,100,101,118,47,118,110,100,48,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
f_mntfromspec =
[47,100,101,118,47,118,110,100,48,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
mount_info = {ufs_args = {fspec = (char *)0xcf7c412e, export_info = {ex_flags
= 0, ex_root = 4294967294, ex_anon = {cr_uid = 0, cr_gid = 0, cr_ngroups =
-12305, cr_groups =
[0,0,354339725,0,4096,3,354339848,1983602688,4096,1,891120276,4096,0,0,891094272,3481026492]},
ex_addr = (struct sockaddr *)0x151ecc60, ex_addrlen = 354341792, ex_mask =
(struct sockaddr *)0x0, ex_masklen = 0}}, mfs_args = {fspec = (char
*)0xcf7c412e, export_info = {ex_flags = 0, ex_root = 4294967294, ex_anon =
{cr_uid = 0, cr_gid = 0, cr_ngroups = -12305, cr_groups =
[0,0,354339725,0,4096,3,354339848,1983602688,4096,1,891120276,4096,0,0,891094272,3481026492]},
ex_addr = (struct sockaddr *)0x151ecc60, ex_addrlen = 354341792, ex_mask =
(struct sockaddr *)0x0, ex_masklen = 0}, base = (char *)0x0, size = 0},
nfs_args = {version = -813940434, addr = (struct sockaddr *)0x0, addrlen = -2,
sotype = 0, proto = 0, fh = (u_char *)0x151ecfef, fhsize = 0, flags = 0, wsize
= 354339725, rsize = 0, readdirsize = 4096, timeo = 3, retrans = 354339848,
maxgrouplist = 1983602688, readahead = 4096, leaseterm = 1, deadthresh =
891120276, hostname = (char *)0x1000, acregmin = 0, acregmax = 0, acdirmin =
891094272, acdirmax = -813940804}, iso_args = {fspec = (char *)0xcf7c412e,
export_info = {ex_flags = 0, ex_root = 4294967294, ex_anon = {cr_uid = 0,
cr_gid = 0, cr_ngroups = -12305, cr_groups =
[0,0,354339725,0,4096,3,354339848,1983602688,4096,1,891120276,4096,0,0,891094272,3481026492]},
ex_addr = (struct sockaddr *)0x151ecc60, ex_addrlen = 354341792, ex_mask =
(struct sockaddr *)0x0, ex_masklen = 0}, flags = 0, sess = 0}, msdosfs_args =
{fspec = (char *)0xcf7c412e, export_info = {ex_flags = 0, ex_root = 4294967294,
ex_anon = {cr_uid = 0, cr_gid = 0, cr_ngroups = -12305, cr_groups =
[0,0,354339725,0,4096,3,354339848,1983602688,4096,1,891120276,4096,0,0,891094272,3481026492]},
ex_addr = (struct sockaddr *)0x151ecc60, ex_addrlen = 354341792, ex_mask =
(struct sockaddr *)0x0, ex_masklen = 0}, uid = 0, gid = 0, mask = 0, flags =
0}, ntfs_args = {fspec = (char *)0xcf7c412e, export_info = {ex_flags = 0,
ex_root = 4294967294, ex_anon = {cr_uid = 0, cr_gid = 0, cr_ngroups = -12305,
cr_groups =
[0,0,354339725,0,4096,3,354339848,1983602688,4096,1,891120276,4096,0,0,891094272,3481026492]},
ex_addr = (struct sockaddr *)0x151ecc60, ex_addrlen = 354341792, ex_mask =
(struct sockaddr *)0x0, ex_masklen = 0}, uid = 0, gid = 0, mode = 0, flag = 0},
tmpfs_args = {ta_version = -813940434, ta_nodes_max = 18446744065119617024,
ta_size_max = 0, ta_root_uid = 354340847, ta_root_gid = 0, ta_root_mode = 0},
__align =
[46,65,124,-49,0,0,0,0,-2,-1,-1,-1,0,0,0,0,0,0,0,0,-17,-49,30,21,0,0,0,0,0,0,0,0,-115,-53,30,21,0,0,0,0,0,16,0,0,3,0,0,0,8,-52,30,21,0,96,59,118,0,16,0,0,1,0,0,0,-108,106,29,53,0,16,0,0,0,0,0,0,0,0,0,0,0,5,29,53,-68,63,124,-49,96,-52,30,21,-96,-45,30,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},
mnt_data = (void *)0x0}
ddb{0}> x/x 0xd7632800,0t78
0xd7632800: dead4110
0xd7632804: dead4110
0xd7632808: dead4110
0xd763280c: dead4110
0xd7632810: dead4110
0xd7632814: dead4110
0xd7632818: dead4110
0xd763281c: dead4110
0xd7632820: dead4110
0xd7632824: dead4110
0xd7632828: dead4110
0xd763282c: dead410f
0xd7632830: dead4110
0xd7632834: dead4110
0xd7632838: dead4110
0xd763283c: dead4110
0xd7632840: 4000
0xd7632844: 7b387
0xd7632848: 0
0xd763284c: 7b386
0xd7632850: 0
0xd7632854: 750f3
0xd7632858: 0
0xd763285c: 25f7e
0xd7632860: 0
0xd7632864: 25f7d
0xd7632868: 0
0xd763286c: 25f7d
0xd7632870: 0
0xd7632874: 42
0xd7632878: 0
0xd763287c: 1c5e
0xd7632880: 0
0xd7632884: 963
0xd7632888: 0
0xd763288c: 0
0xd7632890: 0
0xd7632894: e00
0xd7632898: dfdc9da0
0xd763289c: ff
0xd76328a0: 0
0xd76328a4: 674ddc82
0xd76328a8: 0
0xd76328ac: 736666
0xd76328b0: 0
0xd76328b4: 0
0xd76328b8: 0
0xd76328bc: 746e6d2f
0xd76328c0: 6765722f
0xd76328c4: 73736572
0xd76328c8: 756f6d2d
0xd76328cc: 746e
0xd76328d0: 0
0xd76328d4: 0
0xd76328d8: 0
0xd76328dc: 0
0xd76328e0: 0
0xd76328e4: 0
0xd76328e8: 0
0xd76328ec: 0
0xd76328f0: 0
0xd76328f4: 0
0xd76328f8: 0
0xd76328fc: 0
0xd7632900: 0
0xd7632904: 0
0xd7632908: 0
0xd763290c: 0
0xd7632910: 0
0xd7632914: 642f0000
0xd7632918: 762f7665
0xd763291c: 6130646e
0xd7632920: 0
0xd7632924: 0
0xd7632928: 0
0xd763292c: 0
0xd7632930: 0
0xd7632934: 0