fix prevent bug
authorBoram Park <boram1288.park@samsung.com>
Tue, 2 Jul 2013 06:19:19 +0000 (15:19 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 2 Jul 2013 06:22:52 +0000 (15:22 +0900)
Change-Id: I66476556f1a6d5466030d23d751e9e0b748a215c

bin/xevlog_analyze/xevlog_analyze.c
module/xdbg_module_evlog.c

index fa5bef7..3ca0207 100644 (file)
@@ -208,17 +208,20 @@ static void _xEvlogAnalyzePrint (EvlogOption *eo, char* reply, int* len)
 
         if (evinfo.mask & EVLOG_MASK_REQUEST)
         {
+            int size;
+
             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);
 
-            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);
             total += read_len;
         }
 
@@ -313,7 +316,12 @@ static void _xEvlogAnalyzePrint (EvlogOption *eo, char* reply, int* len)
                 }
 
                 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);
index cbfd9da..9df96b5 100644 (file)
@@ -232,7 +232,7 @@ static void evtRecord (int fd, EvlogInfo *evinfo)
 
     if (evinfo->mask & EVLOG_MASK_ATOM)
     {
-        EvlogAtomTable *table;
+        EvlogAtomTable *table = NULL;
 
         if (write (fd, &evinfo->evatom.size, sizeof (int)) == -1)
         {