[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f724e17d-51ae-ad20-6c78-4be21d39180b@xs4all.nl>
Date: Thu, 16 Apr 2020 14:13:51 +0200
From: Hans Verkuil <hverkuil-cisco@...all.nl>
To: Sergey Senozhatsky <sergey.senozhatsky@...il.com>
Cc: Mauro Carvalho Chehab <mchehab@...nel.org>,
Tomasz Figa <tfiga@...omium.org>, linux-media@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [RFC][PATCH] media: v4l2-ctrls: add more NULL pointer checks
On 16/04/2020 13:32, Sergey Senozhatsky wrote:
> On (20/04/16 10:53), Hans Verkuil wrote:
> [..]
>>> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
>>> @@ -2869,6 +2869,9 @@ EXPORT_SYMBOL(v4l2_ctrl_add_handler);
>>>
>>> bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
>>> {
>>> + if (WARN_ON(!ctrl))
>>> + return false;
>>> +
>>> if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
>>> return true;
>>> if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
>>> @@ -3794,7 +3797,9 @@ s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl)
>>> struct v4l2_ext_control c;
>>>
>>> /* It's a driver bug if this happens. */
>>> - WARN_ON(!ctrl->is_int);
>>> + if (WARN_ON(!ctrl || !ctrl->is_int))
>>> + return -EINVAL;
>>
>> Just return 0 here. The return value is the control's value, not an error code.
>> So all you can do here is return 0 in the absence of anything better.
>
> OK.
>
>>> +
>>> c.value = 0;
>>> get_ctrl(ctrl, &c);
>>> return c.value;
>>> @@ -4212,6 +4217,9 @@ EXPORT_SYMBOL(v4l2_s_ctrl);
>>>
>>> int __v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)
>>> {
>>> + if (!ctrl)
>>
>> Change this to 'if (WARN_ON(!ctrl))'
>>
>> I don't think NULL pointers should be silently ignored: it really
>> indicates a driver bug. It it certainly a good idea to WARN instead.
>
> Should WARN_ON() be only in unlocked versions of ctrl API? It probably
> would make sense to add WARNs to both - e.g. to v4l2_ctrl_s_ctrl() and
Yes, it should be done for both.
> to __v4l2_ctrl_s_ctrl(). By the way, why don't locked and unlocked
> versions live together in v4l2-ctrls.c file? Any reason for, e.g.,
> v4l2_ctrl_s_ctrl() to be in header and __v4l2_ctrl_s_ctrl() to be C-file?
The v4l2_ctrl_s_ctrl() work fine as a static inline (only compiled if
they are actually used). But with an additional 'if (WARN_ON(!ctrl))'
it becomes a bit questionable. I would not be opposed if these static
inlines are now moved into the source code.
Regards,
Hans
>
>> The same is true for the functions below.
>
> OK.
>
> -ss
>
Powered by blists - more mailing lists