summaryrefslogtreecommitdiff
path: root/libmemtrack
diff options
context:
space:
mode:
authorArchana Sriram <apsrir@codeaurora.org>2017-04-27 12:49:42 +0530
committerArchana Sriram <apsrir@codeaurora.org>2017-04-28 11:57:05 +0530
commit8f8881570528a3fcc626002380bd82b465a2e99d (patch)
tree12eb343948690e9a4e4026e9727c6ed327d340c9 /libmemtrack
parent2515da1f0539fa35fda76d0f61a17be75ffad305 (diff)
downloaddisplay-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.c26
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);
+ }
}
}