git: bbab525fc11b - stable/13 - msdosfs: handle inconsistently hashed denodes
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 15 Jan 2022 00:51:36 UTC
The branch stable/13 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=bbab525fc11b7c71e92908d0c646944f36da60ec
commit bbab525fc11b7c71e92908d0c646944f36da60ec
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-12-23 23:21:53 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-01-14 18:11:01 +0000
msdosfs: handle inconsistently hashed denodes
(cherry picked from commit 595ed4d76713c1e9cab7d8a160ed59f8f4e5ecb4)
---
sys/fs/msdosfs/msdosfs_denode.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/sys/fs/msdosfs/msdosfs_denode.c b/sys/fs/msdosfs/msdosfs_denode.c
index de73579c7d16..bdc7436079ea 100644
--- a/sys/fs/msdosfs/msdosfs_denode.c
+++ b/sys/fs/msdosfs/msdosfs_denode.c
@@ -142,9 +142,23 @@ deget(struct msdosfsmount *pmp, u_long dirclust, u_long diroffset,
return (error);
if (nvp != NULL) {
*depp = VTODE(nvp);
- KASSERT((*depp)->de_dirclust == dirclust, ("wrong dirclust"));
- KASSERT((*depp)->de_diroffset == diroffset, ("wrong diroffset"));
+ if ((*depp)->de_dirclust != dirclust) {
+ printf("%s: wrong dir cluster %lu %lu\n",
+ pmp->pm_mountp->mnt_stat.f_mntonname,
+ (*depp)->de_dirclust, dirclust);
+ goto badoff;
+ }
+ if ((*depp)->de_diroffset != diroffset) {
+ printf("%s: wrong dir offset %lu %lu\n",
+ pmp->pm_mountp->mnt_stat.f_mntonname,
+ (*depp)->de_diroffset, diroffset);
+ goto badoff;
+ }
return (0);
+badoff:
+ vgone(nvp);
+ vput(nvp);
+ return (EBADF);
}
ldep = malloc(sizeof(struct denode), M_MSDOSFSNODE, M_WAITOK | M_ZERO);