summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-09-08 10:48:46 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-09-16 14:21:28 +0300
commitde20029a582a71a87d99388a62fb63c86e85028a (patch)
tree9bffafeabdb1104444550094fa7cdab06a0f0405
parent219cbfe76b5a7d9d8206c71aa6115ff8befcff9b (diff)
android: Protect against null callbacks
According to the Android camera HAL C interface documentation, the camera service is supposed to set callbacks after initializing the HAL and calling get_number_of_cameras(), before any other calls to the module. We rely on this behaviour and use callbacks unconditionally, which would lead to a crash if the camera service behaved incorrectly. While the camera service isn't supposed to behave incorrectly, gracefully handling the error when opening cameras isn't costly, and provides better diagnostic than a crash. While at it, removed an unneeded [[maybe_unused]] attribute. Reported-by: Coverity CID=298638 Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Umang Jain <email@uajain.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/android/camera3_hal.cpp2
-rw-r--r--src/android/camera_hal_manager.cpp7
2 files changed, 7 insertions, 2 deletions
diff --git a/src/android/camera3_hal.cpp b/src/android/camera3_hal.cpp
index 67a497b8..d6e04af2 100644
--- a/src/android/camera3_hal.cpp
+++ b/src/android/camera3_hal.cpp
@@ -32,7 +32,7 @@ static int hal_get_camera_info(int id, struct camera_info *info)
return cameraManager.getCameraInfo(id, info);
}
-static int hal_set_callbacks([[maybe_unused]] const camera_module_callbacks_t *callbacks)
+static int hal_set_callbacks(const camera_module_callbacks_t *callbacks)
{
cameraManager.setCallbacks(callbacks);
diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
index a1805ebc..05b47401 100644
--- a/src/android/camera_hal_manager.cpp
+++ b/src/android/camera_hal_manager.cpp
@@ -29,7 +29,7 @@ LOG_DECLARE_CATEGORY(HAL);
*/
CameraHalManager::CameraHalManager()
- : cameraManager_(nullptr), numInternalCameras_(0),
+ : cameraManager_(nullptr), callbacks_(nullptr), numInternalCameras_(0),
nextExternalCameraId_(firstExternalCameraId_)
{
}
@@ -70,6 +70,11 @@ CameraDevice *CameraHalManager::open(unsigned int id,
{
MutexLocker locker(mutex_);
+ if (!callbacks_) {
+ LOG(HAL, Error) << "Can't open camera before callbacks are set";
+ return nullptr;
+ }
+
CameraDevice *camera = cameraDeviceFromHalId(id);
if (!camera) {
LOG(HAL, Error) << "Invalid camera id '" << id << "'";