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;

Reply via email to