gralloc: Add missing va_end()
Add missing va_end() and additionally extra protection in the
deconstructor in case of use after free.
Bug: 30483149
Change-Id: Ib28c6312b67654e19d89c7b9acf03f26a8640ad3
diff --git a/msm8909/libgralloc/gralloc_priv.h b/msm8909/libgralloc/gralloc_priv.h
index 2d19517..6295fb0 100644
--- a/msm8909/libgralloc/gralloc_priv.h
+++ b/msm8909/libgralloc/gralloc_priv.h
@@ -248,7 +248,9 @@
numFds = sNumFds;
}
~private_handle_t() {
+ base_metadata = 0;
magic = 0;
+ fd_metadata = 0;
}
bool usesPhysicallyContiguousMemory() {
diff --git a/msm8909/libgralloc/mapper.cpp b/msm8909/libgralloc/mapper.cpp
index ba8f5be..99d309c 100644
--- a/msm8909/libgralloc/mapper.cpp
+++ b/msm8909/libgralloc/mapper.cpp
@@ -365,6 +365,7 @@
private_handle_t* hnd = va_arg(args, private_handle_t*);
int *stride = va_arg(args, int *);
if (private_handle_t::validate(hnd)) {
+ va_end(args);
return res;
}
MetaData_t *metadata = (MetaData_t *)hnd->base_metadata;
@@ -382,6 +383,7 @@
int *stride = va_arg(args, int *);
int *height = va_arg(args, int *);
if (private_handle_t::validate(hnd)) {
+ va_end(args);
return res;
}
MetaData_t *metadata = (MetaData_t *)hnd->base_metadata;
@@ -416,6 +418,7 @@
private_handle_t* hnd = va_arg(args, private_handle_t*);
int *color_space = va_arg(args, int *);
if (private_handle_t::validate(hnd)) {
+ va_end(args);
return res;
}
MetaData_t *metadata = (MetaData_t *)hnd->base_metadata;