diff options
author | Archana Sriram <apsrir@codeaurora.org> | 2017-04-27 12:49:42 +0530 |
---|---|---|
committer | Archana Sriram <apsrir@codeaurora.org> | 2017-04-28 11:57:05 +0530 |
commit | 8f8881570528a3fcc626002380bd82b465a2e99d (patch) | |
tree | 12eb343948690e9a4e4026e9727c6ed327d340c9 /libmemtrack | |
parent | 2515da1f0539fa35fda76d0f61a17be75ffad305 (diff) | |
download | display-8f8881570528a3fcc626002380bd82b465a2e99d.tar.gz |
libmemtrack: Fix fd leak in kgsl function
Added code to close fd for error cases in kgsl
function to prevent possible leak in fd.
CRs-Fixed: 2039493
Change-Id: I353423de286bf42c22b4726b519690d70303574f
Diffstat (limited to 'libmemtrack')
-rw-r--r-- | libmemtrack/kgsl.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/libmemtrack/kgsl.c b/libmemtrack/kgsl.c index 3f36b8dc..69ee9018 100644 --- a/libmemtrack/kgsl.c +++ b/libmemtrack/kgsl.c @@ -93,31 +93,41 @@ int kgsl_memtrack_get_memory(pid_t pid, enum memtrack_type type, continue; } - if (size == 0) + if (size == 0) { + fclose(fp); return -EINVAL; + } - if (unaccounted_size + size < size) + if (unaccounted_size + size < size) { + fclose(fp); return -ERANGE; + } if (type == MEMTRACK_TYPE_GL && strcmp(line_type, "gpumem") == 0) { if (flags[6] == 'Y') { - if (accounted_size + mapsize < accounted_size) + if (accounted_size + mapsize < accounted_size) { + fclose(fp); return -ERANGE; + } accounted_size += mapsize; - if (mapsize > size) + if (mapsize > size) { + fclose(fp); return -EINVAL; - + } unaccounted_size += size - mapsize; - } else + } else { unaccounted_size += size; + } } else if (type == MEMTRACK_TYPE_GRAPHICS && strcmp(line_type, "ion") == 0) { - if (strcmp(line_usage, "egl_surface") == 0) + if (strcmp(line_usage, "egl_surface") == 0) { unaccounted_size += size; - else if (egl_surface_count == 0) + } + else if (egl_surface_count == 0) { unaccounted_size += size / (egl_image_count ? egl_image_count : 1); + } } } |