From e9857395fcb277720934f5ab4f68b816c68410cf Mon Sep 17 00:00:00 2001 From: Chris Pressey Date: Mon, 14 Feb 2005 19:18:53 +0000 Subject: [PATCH] Apply less dodgy range checks. Requested-by: joerg --- sbin/badsect/badsect.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sbin/badsect/badsect.c b/sbin/badsect/badsect.c index 89b457787c..0ec54279c7 100644 --- a/sbin/badsect/badsect.c +++ b/sbin/badsect/badsect.c @@ -33,7 +33,7 @@ * @(#) Copyright (c) 1981, 1983, 1993 The Regents of the University of California. All rights reserved. * @(#)badsect.c 8.1 (Berkeley) 6/5/93 * $FreeBSD: src/sbin/badsect/badsect.c,v 1.7.2.2 2001/07/30 10:30:04 dd Exp $ - * $DragonFly: src/sbin/badsect/badsect.c,v 1.7 2005/02/13 19:22:42 cpressey Exp $ + * $DragonFly: src/sbin/badsect/badsect.c,v 1.8 2005/02/14 19:18:53 cpressey Exp $ */ /* @@ -94,6 +94,7 @@ main(int argc, char **argv) { daddr_t diskbn; daddr_t number; + dev_t dev; struct stat stbuf, devstat; register struct dirent *dp; DIR *dirp; @@ -142,12 +143,12 @@ main(int argc, char **argv) * bit was lost by bogus sign extensions. */ diskbn = dbtofsb(fs, number); - if ((daddr_t)((dev_t)diskbn) != diskbn) { + dev = (dev_t)diskbn; + if ((daddr_t)dev != diskbn) { printf("sector %ld cannot be represented as a dev_t\n", (long)number); errs++; - } - else if (mknod(*argv, IFMT|0600, (dev_t)diskbn) < 0) { + } else if (mknod(*argv, IFMT | 0600, dev) < 0) { warn("%s", *argv); errs++; } @@ -163,7 +164,11 @@ chkuse(daddr_t blkno, int cnt) daddr_t fsbn, bn; fsbn = dbtofsb(fs, blkno); - if ((int32_t)((unsigned)(fsbn+cnt)) > fs->fs_size) { + if (fs->fs_size < 0 || fsbn + cnt < 0) { + printf("internal error: negative fs size or block number\n"); + return (1); + } + if (fsbn + cnt > fs->fs_size) { printf("block %ld out of range of file system\n", (long)blkno); return (1); } -- 2.41.0