Change-Id: I66476556f1a6d5466030d23d751e9e0b748a215c
if (evinfo.mask & EVLOG_MASK_REQUEST)
{
if (evinfo.mask & EVLOG_MASK_REQUEST)
{
read_len = read (fd, &evinfo.req, sizeof(EvlogRequest));
GOTO_IF_FAIL (read_len == sizeof(EvlogRequest), print_done);
total += read_len;
read_len = read (fd, &evinfo.req, sizeof(EvlogRequest));
GOTO_IF_FAIL (read_len == sizeof(EvlogRequest), print_done);
total += read_len;
- GOTO_IF_FAIL ((evinfo.req.length * 4) < SSIZE_MAX, print_done);
+ size = (int)(evinfo.req.length * 4);
+ GOTO_IF_FAIL (size > 0, print_done);
- evinfo.req.ptr = malloc (evinfo.req.length * 4);
+ evinfo.req.ptr = malloc (size);
GOTO_IF_FAIL (evinfo.req.ptr != NULL, print_done);
GOTO_IF_FAIL (evinfo.req.ptr != NULL, print_done);
- read_len = read (fd, evinfo.req.ptr, (evinfo.req.length * 4));
- GOTO_IF_FAIL (read_len == (evinfo.req.length * 4), print_done);
+ read_len = read (fd, evinfo.req.ptr, size);
+ GOTO_IF_FAIL (read_len == size, print_done);
}
read_len = read (fd, table, sizeof (EvlogRegionTable));
}
read_len = read (fd, table, sizeof (EvlogRegionTable));
- GOTO_IF_FAIL (read_len == sizeof(EvlogRegionTable), print_done);
+ if (read_len != sizeof(EvlogRegionTable))
+ {
+ WARNING_IF_FAIL (read_len == sizeof(EvlogRegionTable));
+ free (table);
+ goto print_done;
+ }
total += read_len;
xorg_list_add(&table->link, &evinfo.evregion.list);
total += read_len;
xorg_list_add(&table->link, &evinfo.evregion.list);
if (evinfo->mask & EVLOG_MASK_ATOM)
{
if (evinfo->mask & EVLOG_MASK_ATOM)
{
+ EvlogAtomTable *table = NULL;
if (write (fd, &evinfo->evatom.size, sizeof (int)) == -1)
{
if (write (fd, &evinfo->evatom.size, sizeof (int)) == -1)
{