[libcamera-devel] [PATCH] libcamera: thread: Fix locking when moving object
Niklas Söderlund
niklas.soderlund at ragnatech.se
Wed Nov 27 15:58:34 CET 2019
Hi Laurent,
Thanks for your patch.
On 2019-11-24 02:39:17 +0200, Laurent Pinchart wrote:
> When moving an Object to a Thread, messages posted for the object are
> move to the target thread's message queue. This requires locking the
> message queues of the current and target threads, as the target thread
> may (and is usually) running. The implementation is faulty as it locks
> the thread data instead of the message queue. This creates a race
> condition with a tiny but exploitable time window.
>
> The issue was noticed by the event-thread test rarely but reproducibly
> failing with the following assertion error:
>
> [1:39:33.850878042]FATAL default thread.cpp:440 assertion "data_ == receiver->thread()->data_" failed
>
> The issue only occurred when libcamera was compiled in release mode,
> further hinting of a race condition.
>
> Fixes: 01b930964acd ("libcamera: thread: Add a messaging passing API")
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/libcamera/thread.cpp | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/libcamera/thread.cpp b/src/libcamera/thread.cpp
> index e152af14631e..029a0e8fddd5 100644
> --- a/src/libcamera/thread.cpp
> +++ b/src/libcamera/thread.cpp
> @@ -456,8 +456,8 @@ void Thread::moveObject(Object *object)
> ThreadData *currentData = object->thread_->data_;
> ThreadData *targetData = data_;
>
> - MutexLocker lockerFrom(currentData->mutex_, std::defer_lock);
> - MutexLocker lockerTo(targetData->mutex_, std::defer_lock);
> + MutexLocker lockerFrom(currentData->messages_.mutex_, std::defer_lock);
> + MutexLocker lockerTo(targetData->messages_.mutex_, std::defer_lock);
> std::lock(lockerFrom, lockerTo);
>
> moveObject(object, currentData, targetData);
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list