summaryrefslogtreecommitdiff
path: root/drivers/media/platform/amd/git@git.tavy.me:linux.git
diff options
context:
space:
mode:
authorViacheslav Dubeyko <slava@dubeyko.com>2026-07-20 11:44:15 -0700
committerViacheslav Dubeyko <slava@dubeyko.com>2026-07-27 20:25:30 -0700
commitf26da7e0381c963e3cdadba5281afc895fe80d45 (patch)
tree71e32153695e745cd5709ad671fd7d1d3549dd6e /drivers/media/platform/amd/git@git.tavy.me:linux.git
parentc86df5cbba015c40985a49ce70217c370cd57fc6 (diff)
hfs: rework MDB locking scheme
hfs_mdb_commit() used to hold the primary MDB buffer_head (mdb_bh) locked for the whole commit, including writing the alternate MDB and the volume bitmap. A corrupted image can set drVBMSt so the bitmap block aliases mdb_bh. The bitmap writeback path then calls lock_buffer() on that same buffer_head while it is already locked by hfs_mdb_commit(). Finally, we have a deadlock during flushing the MDB to the file system volume. However, even for valid images, the locking scheme of holding the mdb_bh locked across this much unrelated I/O is fragile anyway. This patch adds a dedicated sbi->mdb_lock and take it around every hfs_mdb_commit() caller (hfs_sync_fs(), flush_mdb(), and the initial hfs_mdb_get() in hfs_fill_super()). Additionally, this patch makes sbi->mdb/sbi->alt_mdb independent in-memory copies (allocated with kmemdup()) instead of pointers into mdb_bh's/alt_mdb_bh's page cache data. Every MDB field read or write in hfs_mdb_commit(), hfs_mdb_close() and hfs_mdb_get() now operates on these copies. Also, hfs_mdb_publish() and hfs_alt_mdb_publish() are the only places left that touch the buffer_heads. The hfs_mdb_put() frees the two copies. Reported-by: Yue Sun <samsun1006219@gmail.com> Link: https://lore.kernel.org/all/CAEkJfYMB47v1yOWHB8q2dc8kf=uj-rLO=+yMyudwPguJ8Kd3jA@mail.gmail.com/ Signed-off-by: Yue Sun <samsun1006219@gmail.com> cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> cc: Yangtao Li <frank.li@vivo.com> cc: linux-fsdevel@vger.kernel.org Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com> Link: https://lore.kernel.org/r/20260720184414.195213-2-slava@dubeyko.com Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
Diffstat (limited to 'drivers/media/platform/amd/git@git.tavy.me:linux.git')
0 files changed, 0 insertions, 0 deletions