display: Fix null pointer dereference
Change-Id: I90236ee583a6862866b74f3645ff39e96673794a
diff --git a/services/config/src/device_impl.cpp b/services/config/src/device_impl.cpp
index 97e8a82..c02de23 100644
--- a/services/config/src/device_impl.cpp
+++ b/services/config/src/device_impl.cpp
@@ -88,10 +88,12 @@
std::lock_guard<std::mutex> lock(death_service_mutex_);
auto itr = display_config_map_.find(client_handle);
std::shared_ptr<DeviceClientContext> client = itr->second;
- ConfigInterface *intf = client->GetDeviceConfigIntf();
- intf_->UnRegisterClientContext(intf);
- client.reset();
- display_config_map_.erase(itr);
+ if (client != NULL) {
+ ConfigInterface *intf = client->GetDeviceConfigIntf();
+ intf_->UnRegisterClientContext(intf);
+ client.reset();
+ display_config_map_.erase(itr);
+ }
}
DeviceImpl::DeviceClientContext::DeviceClientContext(const sp<IDisplayConfigCallback> callback) {
@@ -322,19 +324,23 @@
data_output = reinterpret_cast<int32_t *>(malloc(sizeof(int32_t) *
hdr_caps.supported_hdr_types.size() + 3 * sizeof(float)));
- for (int i = 0; i < hdr_caps.supported_hdr_types.size(); i++) {
- data_output[i] = hdr_caps.supported_hdr_types[i];
+ if (data_output != NULL) {
+ for (int i = 0; i < hdr_caps.supported_hdr_types.size(); i++) {
+ data_output[i] = hdr_caps.supported_hdr_types[i];
+ }
+ float *lum = reinterpret_cast<float *>(&data_output[hdr_caps.supported_hdr_types.size()]);
+ *lum = hdr_caps.max_luminance;
+ lum++;
+ *lum = hdr_caps.max_avg_luminance;
+ lum++;
+ *lum = hdr_caps.min_luminance;
+ output_params.setToExternal(reinterpret_cast<uint8_t*>(data_output), sizeof(int32_t) *
+ hdr_caps.supported_hdr_types.size() + 3 * sizeof(float));
+ _hidl_cb(error, output_params, {});
}
- float *lum = reinterpret_cast<float *>(&data_output[hdr_caps.supported_hdr_types.size()]);
- *lum = hdr_caps.max_luminance;
- lum++;
- *lum = hdr_caps.max_avg_luminance;
- lum++;
- *lum = hdr_caps.min_luminance;
- output_params.setToExternal(reinterpret_cast<uint8_t*>(data_output), sizeof(int32_t) *
- hdr_caps.supported_hdr_types.size() + 3 * sizeof(float));
-
- _hidl_cb(error, output_params, {});
+ else {
+ _hidl_cb(-EINVAL, {}, {});
+ }
}
void DeviceImpl::DeviceClientContext::ParseSetCameraLaunchStatus(const ByteStream &input_params,
@@ -699,6 +705,11 @@
}
std::shared_ptr<DeviceClientContext> client = itr->second;
+ if (!client) {
+ error = -EINVAL;
+ _hidl_cb(error, {}, {});
+ return Void();
+ }
switch (op_code) {
case kIsDisplayConnected:
client->ParseIsDisplayConnected(input_params, _hidl_cb);