The potential overflow issue arises at "size += ret;" because "size"
is of type ssize_t (signed) while "len" is size_t (unsigned). Repeatedly
adding read sizes, "ret", to "size" can potentially exceed the maximum
value of ssize_t, causing it to overflow into a negative or incorrect value.
The fix is to ensure "len" is within the range of SSIZE_MAX.
Fixes: CID 473850
Fixes: CID 473863
Signed-off-by: Lidong Chen <lidong.chen@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
{
ssize_t size = 0;
+ if (len > SSIZE_MAX)
+ return -1;
+
while (len)
{
ssize_t ret = read (fd, buf, len);
{
ssize_t size = 0;
+ if (len > SSIZE_MAX)
+ return -1;
+
while (len)
{
ssize_t ret = write (fd, buf, len);