From: Hans Verkuil <hverkuil+cisco@kernel.org>
To: Rokinthan p <rokinthanp03@gmail.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
linux-media@vger.kernelorg, linux-kernel@vger.kernel.org,
syzbot+9f7405999979761b6cfc@syzkaller.appspotmail.com
Subject: Re: [PATCH v3] media: v4l2-ctrls: do nothing if controls[0] == NULL in cluster functions
Date: Tue, 22 Sep 2026 16:51:52 +0200 [thread overview]
Message-ID: <2e35f2b6-6b90-4587-8891-08846433b0d6@kernel.org> (raw)
In-Reply-To: <CAHzb5FFOq=2_piCiFdEun_s2h+Jr90pNLF5O_2umNLkM9-XjkA@mail.gmail.com>
On 17/09/2026 05:37, Rokinthan p wrote:
> The V4L2 control framework is designed to allow drivers to instantiate
> controls and clusters without checking for errors after each call,
> checking hdl->error only once at the end.
>
> However, if allocating the master control (controls[0]) fails, e.g. due to
> memory allocation failure, v4l2_ctrl_cluster() triggers a WARNING:
> ncontrols == 0 || controls[0] == NULL
> WARNING: drivers/media/v4l2-core/v4l2-ctrls-core.c:2525 at
> v4l2_ctrl_cluster
>
> Additionally, v4l2_ctrl_auto_cluster() attempts to dereference
> master->minimum without checking if controls[0] is NULL, leading to a
> NULL pointer dereference when master control creation fails.
>
> Update both v4l2_ctrl_cluster() and v4l2_ctrl_auto_cluster() to silently
> return if controls[0] is NULL, preserving the design that control
> creation errors are caught at the end when the driver checks hdl->error.
> Also update function documentation in include/media/v4l2-ctrls.h.
>
> Fixes: 71c689dc2e73 ("media: v4l2-ctrls: split up into four source files")
> Reported-by: syzbot+cf896de36144391bcde1@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=cf896de36144391bcde1
> Suggested-by: Hans Verkuil <hverkuil@kernel.org>
> Signed-off-by: Rohinthan <rokinthanp03@gmail.com>
This says Rohinthan, but your email says 'Rokinthan p', what is correct?
Also, why do you have a 'Reply-To: www.rokinthanp03@gmail.com' field? That's
not going to work.
Regards,
Hans
> ---
> v2 -> v3:
> - Fix the issue in the V4L2 core (v4l2-ctrls-core.c) instead of hackrf,
> as suggested by Hans Verkuil.
> - Return early if controls[0] == NULL in both v4l2_ctrl_cluster() and
> v4l2_ctrl_auto_cluster().
> - Update function documentation in include/media/v4l2-ctrls.h.
> - Revert hackrf driver changes.
>
> v1 -> v2:
> - Corrected commit hash in Fixes tag.
>
> drivers/media/v4l2-core/v4l2-ctrls-core.c | 16 ++++++++++++----
> include/media/v4l2-ctrls.h | 4 ++++
> 2 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-
> core/v4l2-ctrls-core.c
> --- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
> @@ -2490,7 +2490,10 @@ void v4l2_ctrl_cluster(unsigned ncontrols, struct
> v4l2_ctrl **controls)
> int i;
>
> /* The first control is the master control and it must not be
> NULL */
> - if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
> + if (WARN_ON(ncontrols == 0))
> + return;
> +
> + if (!controls[0])
> return;
>
> for (i = 0; i < ncontrols; i++) {
> @@ -2508,12 +2511,17 @@ EXPORT_SYMBOL(v4l2_ctrl_cluster);
> void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl
> **controls,
> u8 manual_val, bool set_volatile)
> {
> - struct v4l2_ctrl *master = controls[0];
> + struct v4l2_ctrl *master;
> u32 flag = 0;
> int i;
>
> + if (WARN_ON(ncontrols <= 1))
> + return;
> +
> + if (!controls[0])
> + return;
> +
> + master = controls[0];
> v4l2_ctrl_cluster(ncontrols, controls);
> - WARN_ON(ncontrols <= 1);
> WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
> WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
> master->is_auto = true;
> diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
> --- a/include/media/v4l2-ctrls.h
> +++ b/include/media/v4l2-ctrls.h
> @@ -834,6 +834,8 @@ struct v4l2_ctrl_config {
> *
> * @ncontrols: The number of controls in this cluster.
> * @controls: The cluster control array of size @ncontrols.
> + *
> + * If controls[0] is NULL, then this function does nothing and
> just returns.
> */
> void v4l2_ctrl_cluster(unsigned int ncontrols, struct v4l2_ctrl
> **controls);
>
> @@ -868,6 +870,8 @@ void v4l2_ctrl_cluster(unsigned int ncontrols, struct
> v4l2_ctrl **controls);
> * In addition, this function will set the %V4L2_CTRL_FLAG_UPDATE flag
> * on the autofoo control and %V4L2_CTRL_FLAG_INACTIVE on the foo
> control(s)
> * if autofoo is in auto mode.
> + *
> + * If controls[0] is NULL, then this function does nothing and
> just returns.
> */
> void v4l2_ctrl_auto_cluster(unsigned int ncontrols,
> struct v4l2_ctrl **controls,
next prev parent reply other threads:[~2026-09-22 14:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-17 3:37 Rokinthan p
2026-09-22 14:51 ` Hans Verkuil [this message]
2026-09-23 1:01 ` Rohinthan P
2026-09-23 7:21 ` Hans Verkuil
-- strict thread matches above, loose matches on Subject: below --
2026-09-17 3:42 Rokinthan p
2026-09-11 13:33 Rokinthan p
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2e35f2b6-6b90-4587-8891-08846433b0d6@kernel.org \
--to=hverkuil+cisco@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernelorg \
--cc=mchehab@kernel.org \
--cc=rokinthanp03@gmail.com \
--cc=syzbot+9f7405999979761b6cfc@syzkaller.appspotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®