]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream commit
authordjm@openbsd.org <djm@openbsd.org>
Wed, 27 Jul 2016 23:18:12 +0000 (23:18 +0000)
committerDarren Tucker <dtucker@zip.com.au>
Wed, 3 Aug 2016 05:38:43 +0000 (15:38 +1000)
better bounds check on iovcnt (we only ever use fixed,
positive values)

Upstream-ID: 9baa6eb5cd6e30c9dc7398e5fe853721a3a5bdee

atomicio.c

index b1ec234f58515a6dfd9f3f5d8ce5fced2f59d139..f854a06f5f5099e984b0c6d020b4bb7039c9e7a0 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: atomicio.c,v 1.27 2015/01/16 06:40:12 deraadt Exp $ */
+/* $OpenBSD: atomicio.c,v 1.28 2016/07/27 23:18:12 djm Exp $ */
 /*
  * Copyright (c) 2006 Damien Miller. All rights reserved.
  * Copyright (c) 2005 Anil Madhavapeddy. All rights reserved.
@@ -107,12 +107,12 @@ atomiciov6(ssize_t (*f) (int, const struct iovec *, int), int fd,
        struct iovec iov_array[IOV_MAX], *iov = iov_array;
        struct pollfd pfd;
 
-       if (iovcnt > IOV_MAX) {
+       if (iovcnt < 0 || iovcnt > IOV_MAX) {
                errno = EINVAL;
                return 0;
        }
        /* Make a copy of the iov array because we may modify it below */
-       memcpy(iov, _iov, iovcnt * sizeof(*_iov));
+       memcpy(iov, _iov, (size_t)iovcnt * sizeof(*_iov));
 
 #ifndef BROKEN_READV_COMPARISON
        pfd.fd = fd;