Module Name: src
Committed By: riastradh
Date: Tue Jul 4 20:40:22 UTC 2023
Modified Files:
src/sbin/fsck_ffs: inode.c setup.c utilities.c
Log Message:
fsck_ffs(8): Ensure A divides S before aligned_alloc(A, S).
Required by C11 Sec. 7.22.3.1 The aligned_alloc function, para. 2,
p. 348:
The value of alignment shall be a valid alignment supported by the
implementation and the value of size shall be an integral multiple
of alignment.
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.75 -r1.76 src/sbin/fsck_ffs/inode.c
cvs rdiff -u -r1.106 -r1.107 src/sbin/fsck_ffs/setup.c
cvs rdiff -u -r1.68 -r1.69 src/sbin/fsck_ffs/utilities.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/fsck_ffs/inode.c
diff -u src/sbin/fsck_ffs/inode.c:1.75 src/sbin/fsck_ffs/inode.c:1.76
--- src/sbin/fsck_ffs/inode.c:1.75 Sat Jan 14 17:01:10 2023
+++ src/sbin/fsck_ffs/inode.c Tue Jul 4 20:40:22 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: inode.c,v 1.75 2023/01/14 17:01:10 kre Exp $ */
+/* $NetBSD: inode.c,v 1.76 2023/07/04 20:40:22 riastradh Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)inode.c 8.8 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: inode.c,v 1.75 2023/01/14 17:01:10 kre Exp $");
+__RCSID("$NetBSD: inode.c,v 1.76 2023/07/04 20:40:22 riastradh Exp $");
#endif
#endif /* not lint */
@@ -462,8 +462,10 @@ setinodebuf(ino_t inum)
partialcnt = fullcnt;
partialsize = inobufsize;
}
+ __CTASSERT(powerof2(DEV_BSIZE));
if (inodebuf == NULL &&
- (inodebuf = aligned_alloc(DEV_BSIZE, (unsigned)inobufsize)) == NULL)
+ (inodebuf = aligned_alloc(DEV_BSIZE,
+ roundup2((unsigned)inobufsize, DEV_BSIZE))) == NULL)
errexit("Cannot allocate space for inode buffer");
}
Index: src/sbin/fsck_ffs/setup.c
diff -u src/sbin/fsck_ffs/setup.c:1.106 src/sbin/fsck_ffs/setup.c:1.107
--- src/sbin/fsck_ffs/setup.c:1.106 Sun Jan 8 05:25:24 2023
+++ src/sbin/fsck_ffs/setup.c Tue Jul 4 20:40:22 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: setup.c,v 1.106 2023/01/08 05:25:24 chs Exp $ */
+/* $NetBSD: setup.c,v 1.107 2023/07/04 20:40:22 riastradh Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)setup.c 8.10 (Berkeley) 5/9/95";
#else
-__RCSID("$NetBSD: setup.c,v 1.106 2023/01/08 05:25:24 chs Exp $");
+__RCSID("$NetBSD: setup.c,v 1.107 2023/07/04 20:40:22 riastradh Exp $");
#endif
#endif /* not lint */
@@ -127,6 +127,7 @@ setup(const char *dev, const char *origd
lfdir = 0;
initbarea(&sblk);
initbarea(&asblk);
+ __CTASSERT((SBLOCKSIZE % DEV_BSIZE) == 0);
sblk.b_un.b_buf = aligned_alloc(DEV_BSIZE, SBLOCKSIZE);
sblock = aligned_alloc(DEV_BSIZE, SBLOCKSIZE);
asblk.b_un.b_buf = aligned_alloc(DEV_BSIZE, SBLOCKSIZE);
@@ -459,8 +460,9 @@ setup(const char *dev, const char *origd
* read in the summary info.
*/
asked = 0;
+ __CTASSERT(powerof2(DEV_BSIZE));
sblock->fs_csp = (struct csum *)aligned_alloc(DEV_BSIZE,
- sblock->fs_cssize);
+ roundup2(sblock->fs_cssize, DEV_BSIZE));
if (sblock->fs_csp == NULL) {
pwarn("cannot alloc %u bytes for summary info\n",
sblock->fs_cssize);
@@ -495,7 +497,9 @@ setup(const char *dev, const char *origd
* allocate and initialize the necessary maps
*/
bmapsize = roundup(howmany(maxfsblock, NBBY), sizeof(int16_t));
- blockmap = aligned_alloc(DEV_BSIZE, (unsigned)bmapsize);
+ __CTASSERT(powerof2(DEV_BSIZE));
+ blockmap = aligned_alloc(DEV_BSIZE,
+ roundup2((unsigned)bmapsize, DEV_BSIZE));
if (blockmap == NULL) {
pwarn("cannot alloc %u bytes for blockmap\n",
(unsigned)bmapsize);
@@ -530,7 +534,9 @@ setup(const char *dev, const char *origd
(unsigned)(numdirs * sizeof(struct inoinfo *)));
goto badsblabel;
}
- cgrp = aligned_alloc(DEV_BSIZE, sblock->fs_cgsize);
+ __CTASSERT(powerof2(DEV_BSIZE));
+ cgrp = aligned_alloc(DEV_BSIZE,
+ roundup2(sblock->fs_cgsize, DEV_BSIZE));
if (cgrp == NULL) {
pwarn("cannot alloc %u bytes for cylinder group\n",
sblock->fs_cgsize);
Index: src/sbin/fsck_ffs/utilities.c
diff -u src/sbin/fsck_ffs/utilities.c:1.68 src/sbin/fsck_ffs/utilities.c:1.69
--- src/sbin/fsck_ffs/utilities.c:1.68 Sat Jan 14 12:12:50 2023
+++ src/sbin/fsck_ffs/utilities.c Tue Jul 4 20:40:22 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: utilities.c,v 1.68 2023/01/14 12:12:50 christos Exp $ */
+/* $NetBSD: utilities.c,v 1.69 2023/07/04 20:40:22 riastradh Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)utilities.c 8.6 (Berkeley) 5/19/95";
#else
-__RCSID("$NetBSD: utilities.c,v 1.68 2023/01/14 12:12:50 christos Exp $");
+__RCSID("$NetBSD: utilities.c,v 1.69 2023/07/04 20:40:22 riastradh Exp $");
#endif
#endif /* not lint */
@@ -135,12 +135,15 @@ bufinit(void)
char *bufp;
pbp = pdirbp = (struct bufarea *)0;
- bufp = aligned_alloc(DEV_BSIZE, (unsigned int)sblock->fs_bsize);
+ __CTASSERT(powerof2(DEV_BSIZE));
+ bufp = aligned_alloc(DEV_BSIZE,
+ roundup2((unsigned int)sblock->fs_bsize, DEV_BSIZE));
if (bufp == 0)
errexit("cannot allocate buffer pool");
cgblk.b_un.b_buf = bufp;
initbarea(&cgblk);
#ifndef NO_APPLE_UFS
+ __CTASSERT((APPLEUFS_LABEL_SIZE % DEV_BSIZE) == 0);
bufp = aligned_alloc(DEV_BSIZE, (unsigned int)APPLEUFS_LABEL_SIZE);
if (bufp == 0)
errexit("cannot allocate buffer pool");
@@ -153,7 +156,9 @@ bufinit(void)
bufcnt = MINBUFS;
for (i = 0; i < bufcnt; i++) {
bp = malloc(sizeof(struct bufarea));
- bufp = aligned_alloc(DEV_BSIZE, (unsigned int)sblock->fs_bsize);
+ __CTASSERT(powerof2(DEV_BSIZE));
+ bufp = aligned_alloc(DEV_BSIZE,
+ roundup2((unsigned int)sblock->fs_bsize, DEV_BSIZE));
if (bp == NULL || bufp == NULL) {
if (i >= MINBUFS) {
if (bp)