X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Freadwrite.c;h=a862d1cffd1f9e195ed294e13f1a3438dbf094f4;hb=847a5916c26ab9cc0dfc9322cccd2c748c54747e;hp=0098f759b2d57dc156088126d457a86226517e65;hpb=aeb162609d6ef1f16ec0e818d3750eb6dfff8b30;p=lttng-tools.git diff --git a/src/common/readwrite.c b/src/common/readwrite.c index 0098f759b..a862d1cff 100644 --- a/src/common/readwrite.c +++ b/src/common/readwrite.c @@ -15,8 +15,11 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _GNU_SOURCE +#define _LGPL_SOURCE #include #include +#include #include #include "readwrite.h" @@ -34,9 +37,16 @@ ssize_t lttng_read(int fd, void *buf, size_t count) size_t i = 0; ssize_t ret; - assert(fd >= 0); 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) { @@ -64,9 +74,16 @@ ssize_t lttng_write(int fd, const void *buf, size_t count) size_t i = 0; ssize_t ret; - assert(fd >= 0); 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) {