Module Name: src
Committed By: christos
Date: Sat Aug 26 21:56:23 UTC 2023
Modified Files:
src/sys/ufs/ext2fs: ext2fs_vfsops.c
Log Message:
fix kmem_free size for e2fs_gd
To generate a diff of this commit:
cvs rdiff -u -r1.223 -r1.224 src/sys/ufs/ext2fs/ext2fs_vfsops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/ufs/ext2fs/ext2fs_vfsops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.223 src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.224
--- src/sys/ufs/ext2fs/ext2fs_vfsops.c:1.223 Sat Aug 26 01:22:50 2023
+++ src/sys/ufs/ext2fs/ext2fs_vfsops.c Sat Aug 26 17:56:23 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: ext2fs_vfsops.c,v 1.223 2023/08/26 05:22:50 riastradh Exp $ */
+/* $NetBSD: ext2fs_vfsops.c,v 1.224 2023/08/26 21:56:23 christos Exp $ */
/*
* Copyright (c) 1989, 1991, 1993, 1994
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.223 2023/08/26 05:22:50 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vfsops.c,v 1.224 2023/08/26 21:56:23 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -767,11 +767,8 @@ ext2fs_mountfs(struct vnode *devvp, stru
EXT2_FSBTODB(m_fs, m_fs->e2fs.e2fs_first_dblock +
1 /* superblock */ + i),
m_fs->e2fs_bsize, 0, &bp);
- if (error) {
- kmem_free(m_fs->e2fs_gd,
- m_fs->e2fs_ngdb * m_fs->e2fs_bsize);
- goto out;
- }
+ if (error)
+ goto out1;
e2fs_cgload(bp->b_data, &m_fs->e2fs_gd[i * sh],
m_fs->e2fs_bsize, m_fs->e2fs_group_desc_shift);
brelse(bp, 0);
@@ -779,10 +776,8 @@ ext2fs_mountfs(struct vnode *devvp, stru
}
error = ext2fs_cg_verify_and_initialize(devvp, m_fs, ronly);
- if (error) {
- kmem_free(m_fs->e2fs_gd, m_fs->e2fs_ngdb * m_fs->e2fs_bsize);
- goto out;
- }
+ if (error)
+ goto out1;
mp->mnt_data = ump;
mp->mnt_stat.f_fsidx.__fsid_val[0] = (long)dev;
@@ -807,6 +802,8 @@ ext2fs_mountfs(struct vnode *devvp, stru
spec_node_setmountedfs(devvp, mp);
return 0;
+out1:
+ kmem_free(m_fs->e2fs_gd, m_fs->e2fs_ngdb * sh * sizeof(struct ext2_gd));
out:
if (bp != NULL)
brelse(bp, 0);
@@ -847,7 +844,8 @@ ext2fs_unmount(struct mount *mp, int mnt
error = VOP_CLOSE(ump->um_devvp, fs->e2fs_ronly ? FREAD : FREAD|FWRITE,
NOCRED);
vput(ump->um_devvp);
- kmem_free(fs->e2fs_gd, fs->e2fs_ngdb * fs->e2fs_bsize);
+ int32_t sh = fs->e2fs_bsize >> fs->e2fs_group_desc_shift;
+ kmem_free(fs->e2fs_gd, fs->e2fs_ngdb * sh * sizeof(struct ext2_gd));
kmem_free(fs, sizeof(*fs));
kmem_free(ump, sizeof(*ump));
mp->mnt_data = NULL;