Module Name: src
Committed By: mlelstv
Date: Sat Apr 2 19:15:09 UTC 2022
Modified Files:
src/sbin/fdisk: fdisk.c
Log Message:
Avoid crashes with invalid or tiny sector sizes.
To generate a diff of this commit:
cvs rdiff -u -r1.160 -r1.161 src/sbin/fdisk/fdisk.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/fdisk/fdisk.c
diff -u src/sbin/fdisk/fdisk.c:1.160 src/sbin/fdisk/fdisk.c:1.161
--- src/sbin/fdisk/fdisk.c:1.160 Wed Nov 3 14:30:04 2021
+++ src/sbin/fdisk/fdisk.c Sat Apr 2 19:15:09 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: fdisk.c,v 1.160 2021/11/03 14:30:04 nia Exp $ */
+/* $NetBSD: fdisk.c,v 1.161 2022/04/02 19:15:09 mlelstv Exp $ */
/*
* Mach Operating System
@@ -39,7 +39,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: fdisk.c,v 1.160 2021/11/03 14:30:04 nia Exp $");
+__RCSID("$NetBSD: fdisk.c,v 1.161 2022/04/02 19:15:09 mlelstv Exp $");
#endif /* not lint */
#define MBRPTYPENAMES
@@ -2551,6 +2551,9 @@ read_disk(daddr_t sector, void *buf)
if (*rfd == -1)
errx(1, "read_disk(); fd == -1");
+ if (secsize <= 0)
+ errx(1, "read_disk(); secsize invalid");
+
off_t offs = sector * (off_t)secsize;
off_t mod = offs & (secsize - 1);
off_t rnd = offs & ~(secsize - 1);
@@ -2558,8 +2561,8 @@ read_disk(daddr_t sector, void *buf)
if (lseek(*rfd, rnd, SEEK_SET) == (off_t)-1)
return -1;
- if (secsize == 512)
- return read(*rfd, buf, 512);
+ if (secsize <= 512)
+ return read(*rfd, buf, secsize);
if ((nr = read(*rfd, iobuf, secsize)) != secsize)
return nr;