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;