X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Freadwrite.c;h=d33e0519088049bdb4895198d167d872522d9671;hb=00c76ceaeb0074e47167be56c0920284e6a0360e;hp=a559de76b1ea5f85387ab178eee47a21b7f101f1;hpb=6cd525e813795a1d5e38feac8dedf2c73ffb1274;p=lttng-tools.git diff --git a/src/common/readwrite.c b/src/common/readwrite.c index a559de76b..d33e05190 100644 --- a/src/common/readwrite.c +++ b/src/common/readwrite.c @@ -15,9 +15,11 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include -#include #include +#include +#include +#include + #include "readwrite.h" /* @@ -33,6 +35,16 @@ ssize_t lttng_read(int fd, void *buf, size_t count) size_t i = 0; ssize_t ret; + assert(buf); + + /* + * Deny a read count that can be bigger then the returned value max size. + * This makes the function to never return an overflow value. + */ + if (count > SSIZE_MAX) { + return -EINVAL; + } + do { ret = read(fd, buf + i, count - i); if (ret < 0) { @@ -60,6 +72,16 @@ ssize_t lttng_write(int fd, const void *buf, size_t count) size_t i = 0; ssize_t ret; + assert(buf); + + /* + * Deny a write count that can be bigger then the returned value max size. + * This makes the function to never return an overflow value. + */ + if (count > SSIZE_MAX) { + return -EINVAL; + } + do { ret = write(fd, buf + i, count - i); if (ret < 0) {