From ca23e64eb4a39c14ca57a5b08954163e4f4a4384 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Sat, 6 Jan 2018 12:45:59 +0000 Subject: [PATCH] Sanity check sysconf return value to ensure it's positive before we use it. Use proper cast to convert long to size_t (instead of blksize_t) to preclude sign extension issues. CID: 1193754 --- bin/cat/cat.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bin/cat/cat.c b/bin/cat/cat.c index 4632b88f56c..b69adbdcd7f 100644 --- a/bin/cat/cat.c +++ b/bin/cat/cat.c @@ -300,6 +300,7 @@ ilseq: static void raw_cat(int rfd) { + long pagesize; int off, wfd; ssize_t nr, nw; static size_t bsize; @@ -316,9 +317,12 @@ raw_cat(int rfd) bsize = MIN(BUFSIZE_MAX, MAXPHYS * 8); else bsize = BUFSIZE_SMALL; - } else - bsize = MAX(sbuf.st_blksize, - (blksize_t)sysconf(_SC_PAGESIZE)); + } else { + bsize = sbuf.st_blksize; + pagesize = sysconf(_SC_PAGESIZE); + if (pagesize > 0) + bsize = MAX(bsize, (size_t)pagesize); + } if ((buf = malloc(bsize)) == NULL) err(1, "malloc() failure of IO buffer"); }