[libcamera-devel] [PATCH 2/2] android: CameraDevice: Add more camera3_capture_request validation
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Apr 2 00:36:46 CEST 2021
Hi Hiro,
On 01/04/2021 17:15, Hirokazu Honda wrote:
> On Fri, Apr 2, 2021 at 1:09 AM Jacopo Mondi <jacopo at jmondi.org> wrote:
>>
>> Hi Hiro,
>>
>> On Fri, Apr 02, 2021 at 12:31:23AM +0900, Hirokazu Honda wrote:
>>> This adds more validation to camera3_capture_request mainly
>>> about buffer_handle values.
>>>
>>> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
>>> ---
>>> src/android/camera_device.cpp | 27 ++++++++++++++++++++++++++-
>>> 1 file changed, 26 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
>>> index 48eb471d..4ed4d3ff 100644
>>> --- a/src/android/camera_device.cpp
>>> +++ b/src/android/camera_device.cpp
>>> @@ -263,11 +263,36 @@ bool isValidRequest(camera3_capture_request_t *camera3Request)
>>> return false;
>>> }
>>>
>>> - if (!camera3Request->num_output_buffers) {
>>> + if (!camera3Request->num_output_buffers ||
>>> + !camera3Request->output_buffers) {
>>> LOG(HAL, Error) << "No output buffers provided";
>>> return -EINVAL;
>>> }
>>>
>>> + for (uint32_t i = 0; i < camera3Request->num_output_buffers; i++) {
>>> + const camera3_stream_buffer_t &outputBuffer =
>>> + camera3Request->output_buffers[i];
>>> + if (!outputBuffer.buffer || !(*outputBuffer.buffer)) {
>>> + LOG(HAL, Error) << "Invalid native handle";
>>> + return -EINVAL;
>>
>> return false ?
>>
>>> + }
>>> +
>>> + const native_handle_t *handle = *outputBuffer.buffer;
>>> + constexpr int kNativeHandleMaxFds = 1024;
>>
>> Where does the 1024 limit comes from ?
>>
>
> It comes from NATIVE_HANDLE_MAX_FDS and NATIVE_HANDLE_MAX_INTS in
> native_handle.h.
> https://android.googlesource.com/platform/system/core/+/master/libcutils/include/cutils/native_handle.h#26
> Somehow native_handle.h in include/android doesn't have the values..
>
> -Hiro
>
>>> + if (handle->numFds < 0 || handle->numFds > kNativeHandleMaxFds) {
>>> + LOG(HAL, Error) << "Invalid number of fds: "
>>> + << handle->numFds;
>>> + return -EINVAL;
>>> + }
>>> +
>>> + constexpr int kNativeHandleMaxInts = 1024;
>>> + if (handle->numInts < 0 || handle->numInts > kNativeHandleMaxInts) {
>>> + LOG(HAL, Error) << "Invalid number of data"
>>
>> "of data:" for consistency
Don't forget the space after the ':'
"Invalid number of data" doesn't make much sense to me, but I'm not
actually sure what handle->numInts is storing?
How about:
"Unsupported quantity of ints: "
But I'm not even fond of that ;-) - Perhaps it doesn't matter so much as
the error will lead the reader here somehow anyway.
>>
>> Thanks
>> j
>>
>>> + << handle->numInts;
>>> + return -EINVAL;
And of course all the return values need to be boolean.
>>> + }
>>> + }
>>> +
>>> return true;
>>> }
>>>
>>> --
>>> 2.31.0.291.g576ba9dcdaf-goog
>>>
>>> _______________________________________________
>>> libcamera-devel mailing list
>>> libcamera-devel at lists.libcamera.org
>>> https://lists.libcamera.org/listinfo/libcamera-devel
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list