Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp326893pxf; Thu, 18 Mar 2021 00:51:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyNWwDyNlVxHtJVqCGO2G9w7cRE95fX0JJUhrQQ1otuga9E5yq4dUBUlcskdSa1DPNKpPTa X-Received: by 2002:aa7:d503:: with SMTP id y3mr1999136edq.142.1616053876987; Thu, 18 Mar 2021 00:51:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616053876; cv=none; d=google.com; s=arc-20160816; b=UuQyKRd5ZlgGO9KFJ5OvHhFUpp/Q/Fm6Yhi9qzvhBvVZVUtj3Rews1i/7yyRUa7TTe YKyOAW9/T+cNVtz0l3hFK/JLMfikP3mysR+toP/3ZlNtqmRWGtwY+7kKU9/mhpg9alYB 8vMtAybP+MTm83rMHNDBcK4zSrDJJ36oznyNoCnPkTADPKVaGw5dHBWu40LbAil2+K2D TwfqdbLXdDyTAhYlbDEMgoNwFthKtl+naMixGKUDcUC4u+zxdvrf8JTmcnAS/xExVvCm h/ZTsqWxh7QUDPi2dO1Y0GVig5L7l71GkaFPTRMtTL/YOieOogXUSkC1+70agyTB5zkf qfRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=nCGPp7xDgIEFGVnmOfTAwVRTBXg0JrC/tTvPITi4f4U=; b=FmXY1mxfCNo6SxaZsw8+97LI+dzg9q9JFTArTxyAA/h44OGN6XpjXbb8IYcc+0AJFK i2MKUxXxkDRvUBVVMycA0mcrS6CLi9DxJp/laFcp7HdZPIKXG7gYt7toIOs3tXNIdXr8 YbbQ4GNOuFimZ6iJCfjNmZgyq+nfcRdCmgkQ2Yu1+HACD6BoeUItnwW22qvhPRcQxzY4 ocYq4pZV0HcyPQhyA1lqTeq4sfDVRBdjv9wP6eYo9dKTVZmb051ctSdrC7t2WR3Xg0wh JhnrpSiqWO5bnbcjxZMAxpM7dzq3ZqQgM6VCntV+RLrJmpYMsXJFPI9OtNdSEvHTUCuP /L+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Q828CewO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i15si1020612ejv.550.2021.03.18.00.50.54; Thu, 18 Mar 2021 00:51:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Q828CewO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229618AbhCRHuA (ORCPT + 99 others); Thu, 18 Mar 2021 03:50:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53028 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229600AbhCRHt3 (ORCPT ); Thu, 18 Mar 2021 03:49:29 -0400 Received: from mail-il1-x129.google.com (mail-il1-x129.google.com [IPv6:2607:f8b0:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 86A42C06174A for ; Thu, 18 Mar 2021 00:49:29 -0700 (PDT) Received: by mail-il1-x129.google.com with SMTP id v3so4024544ilj.12 for ; Thu, 18 Mar 2021 00:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nCGPp7xDgIEFGVnmOfTAwVRTBXg0JrC/tTvPITi4f4U=; b=Q828CewOTb5/edKwMjw+KtXXkAy1ua1h453tHFrXPdbm6rJgTVfTO8iTUhBnwcDGjV koPxrFJ90TvVOlRCqBlR6bslYADcKfjUjMhkd4U2jnHY3XWvFBjieegce0LFjCHLuPvr eBEeB8n82yX7wVmGMYnwyM3fx9GcIiwIoUjo8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nCGPp7xDgIEFGVnmOfTAwVRTBXg0JrC/tTvPITi4f4U=; b=mDJL9ED/q9e8ZQpAHPo9ybtx8jzuoO9pWZHLrx+puma1ykV6XQC7FNcEMredEJJKHF 4ZLImlM7dKDZaNp7XKLjFMs/P4g7XnW5YFswiZcwWnJwkU6QdljSk9UHbqMV+hAnWD6e bioicCHFZsV3zz/jC7p9+dD7aprBt26CLXpgkVpgnrqB7TsZOCSqxqwVD8DO3fl1cxvI M++lNavyBTUS7Vj6Dmf639E4kIu0jRGVV31Sfecka6MRKgHZv+YKmFIUQP40LRqwGIFy 1ZdruYUwbbGA3q2iAkeZ1YR0b2eieWxhA18uNYQ/ZNCyG4WrzbHCwFJYFficsn2GFPt6 8kZA== X-Gm-Message-State: AOAM5301PRXISnKYWhrk0Wf9jRxp4WjRiDNGyKB4B7SUp4cvIvQjP+tr Ahw7+lxb+KcNQIiYUW8tRE3caRNrZyQVIyHG X-Received: by 2002:a05:6e02:1564:: with SMTP id k4mr9983316ilu.65.1616053768680; Thu, 18 Mar 2021 00:49:28 -0700 (PDT) Received: from mail-il1-f173.google.com (mail-il1-f173.google.com. [209.85.166.173]) by smtp.gmail.com with ESMTPSA id i67sm685883ioa.3.2021.03.18.00.49.28 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 18 Mar 2021 00:49:28 -0700 (PDT) Received: by mail-il1-f173.google.com with SMTP id h1so4026969ilr.1 for ; Thu, 18 Mar 2021 00:49:28 -0700 (PDT) X-Received: by 2002:a92:c545:: with SMTP id a5mr10880851ilj.89.1616053767662; Thu, 18 Mar 2021 00:49:27 -0700 (PDT) MIME-Version: 1.0 References: <20210317164511.39967-1-ribalda@chromium.org> <20210317164511.39967-2-ribalda@chromium.org> In-Reply-To: From: Ricardo Ribalda Date: Thu, 18 Mar 2021 08:49:16 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v6 01/17] media: v4l2-ioctl: check_ext_ctrls: Fix multiclass V4L2_CTRL_WHICH_DEF_VAL To: Hans Verkuil Cc: Laurent Pinchart , Mauro Carvalho Chehab , Sergey Senozhatsky , Linux Media Mailing List , Linux Kernel Mailing List , Tomasz Figa , stable@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Hans On Thu, Mar 18, 2021 at 8:48 AM Hans Verkuil wrote: > > On 18/03/2021 08:17, Ricardo Ribalda wrote: > > Hi Hans > > > > Can I merge 1-3, but leave 4 as a separate one? It helps to tell a > > story for 5 and 6. > > I really prefer it as a single patch. All four patches are basically a single big fix > for v4l2-ioctl.c where the code for drivers that do not use the control framework had > become very outdated. Fixing it in a single patch helps backporting to stable, and > it is easier to review and see everything that had to be done to fix this. > > In this case I wondered when I was reviewing patch 1 why V4L2_CTRL_WHICH_DEF_VAL was > just accepted without checking for S/TRY_EXT_CTRLS. Basically patch 1 is a broken fix > w.r.t. DEF_VAL until patch 4, which really fixes it. > > Just do it all in a single patch, splitting it up doesn't work in this particular case. Ok, thanks for the clarification :) > > Regards, > > Hans > > > > > Thanks > > > > On Thu, Mar 18, 2021 at 8:14 AM Hans Verkuil wrote: > >> > >> Hi Ricardo, > >> > >> On 17/03/2021 17:44, Ricardo Ribalda wrote: > >>> Drivers that do not use the ctrl-framework use this function instead. > >>> > >>> - Do not check for multiple classes when getting the DEF_VAL. > >>> > >>> Fixes v4l2-compliance: > >>> Control ioctls (Input 0): > >>> fail: v4l2-test-controls.cpp(813): doioctl(node, VIDIOC_G_EXT_CTRLS, &ctrls) > >>> test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL > >> > >> Can you merge patches 1-4 into a single patch? It's really one big fix since > >> this code was never updated when new 'which' values were added. So keeping it > >> together is, for once, actually preferred. > >> > >> You can add my: > >> > >> Reviewed-by: Hans Verkuil > >> > >> after these 4 patches are merged. It looks much nicer now. > >> > >> Regards, > >> > >> Hans > >> > >>> > >>> Cc: stable@vger.kernel.org > >>> Fixes: 6fa6f831f095 ("media: v4l2-ctrls: add core request support") > >>> Suggested-by: Hans Verkuil > >>> Signed-off-by: Ricardo Ribalda > >>> Reviewed-by: Laurent Pinchart > >>> --- > >>> drivers/media/v4l2-core/v4l2-ioctl.c | 47 ++++++++++++++++------------ > >>> 1 file changed, 27 insertions(+), 20 deletions(-) > >>> > >>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > >>> index 31d1342e61e8..403f957a1012 100644 > >>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c > >>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > >>> @@ -908,7 +908,7 @@ static void v4l_print_default(const void *arg, bool write_only) > >>> pr_cont("driver-specific ioctl\n"); > >>> } > >>> > >>> -static int check_ext_ctrls(struct v4l2_ext_controls *c, int allow_priv) > >>> +static bool check_ext_ctrls(struct v4l2_ext_controls *c, unsigned long ioctl) > >>> { > >>> __u32 i; > >>> > >>> @@ -917,23 +917,30 @@ static int check_ext_ctrls(struct v4l2_ext_controls *c, int allow_priv) > >>> for (i = 0; i < c->count; i++) > >>> c->controls[i].reserved2[0] = 0; > >>> > >>> - /* V4L2_CID_PRIVATE_BASE cannot be used as control class > >>> - when using extended controls. > >>> - Only when passed in through VIDIOC_G_CTRL and VIDIOC_S_CTRL > >>> - is it allowed for backwards compatibility. > >>> - */ > >>> - if (!allow_priv && c->which == V4L2_CID_PRIVATE_BASE) > >>> - return 0; > >>> - if (!c->which) > >>> - return 1; > >>> + switch (c->which) { > >>> + case V4L2_CID_PRIVATE_BASE: > >>> + /* > >>> + * V4L2_CID_PRIVATE_BASE cannot be used as control class > >>> + * when using extended controls. > >>> + * Only when passed in through VIDIOC_G_CTRL and VIDIOC_S_CTRL > >>> + * is it allowed for backwards compatibility. > >>> + */ > >>> + if (ioctl == VIDIOC_G_CTRL || ioctl == VIDIOC_S_CROP) > >>> + return false; > >>> + break; > >>> + case V4L2_CTRL_WHICH_DEF_VAL: > >>> + case V4L2_CTRL_WHICH_CUR_VAL: > >>> + return true; > >>> + } > >>> + > >>> /* Check that all controls are from the same control class. */ > >>> for (i = 0; i < c->count; i++) { > >>> if (V4L2_CTRL_ID2WHICH(c->controls[i].id) != c->which) { > >>> c->error_idx = i; > >>> - return 0; > >>> + return false; > >>> } > >>> } > >>> - return 1; > >>> + return true; > >>> } > >>> > >>> static int check_fmt(struct file *file, enum v4l2_buf_type type) > >>> @@ -2229,7 +2236,7 @@ static int v4l_g_ctrl(const struct v4l2_ioctl_ops *ops, > >>> ctrls.controls = &ctrl; > >>> ctrl.id = p->id; > >>> ctrl.value = p->value; > >>> - if (check_ext_ctrls(&ctrls, 1)) { > >>> + if (check_ext_ctrls(&ctrls, VIDIOC_G_CTRL)) { > >>> int ret = ops->vidioc_g_ext_ctrls(file, fh, &ctrls); > >>> > >>> if (ret == 0) > >>> @@ -2263,7 +2270,7 @@ static int v4l_s_ctrl(const struct v4l2_ioctl_ops *ops, > >>> ctrls.controls = &ctrl; > >>> ctrl.id = p->id; > >>> ctrl.value = p->value; > >>> - if (check_ext_ctrls(&ctrls, 1)) > >>> + if (check_ext_ctrls(&ctrls, VIDIOC_S_CTRL)) > >>> return ops->vidioc_s_ext_ctrls(file, fh, &ctrls); > >>> return -EINVAL; > >>> } > >>> @@ -2285,8 +2292,8 @@ static int v4l_g_ext_ctrls(const struct v4l2_ioctl_ops *ops, > >>> vfd, vfd->v4l2_dev->mdev, p); > >>> if (ops->vidioc_g_ext_ctrls == NULL) > >>> return -ENOTTY; > >>> - return check_ext_ctrls(p, 0) ? ops->vidioc_g_ext_ctrls(file, fh, p) : > >>> - -EINVAL; > >>> + return check_ext_ctrls(p, VIDIOC_G_EXT_CTRLS) ? > >>> + ops->vidioc_g_ext_ctrls(file, fh, p) : -EINVAL; > >>> } > >>> > >>> static int v4l_s_ext_ctrls(const struct v4l2_ioctl_ops *ops, > >>> @@ -2306,8 +2313,8 @@ static int v4l_s_ext_ctrls(const struct v4l2_ioctl_ops *ops, > >>> vfd, vfd->v4l2_dev->mdev, p); > >>> if (ops->vidioc_s_ext_ctrls == NULL) > >>> return -ENOTTY; > >>> - return check_ext_ctrls(p, 0) ? ops->vidioc_s_ext_ctrls(file, fh, p) : > >>> - -EINVAL; > >>> + return check_ext_ctrls(p, VIDIOC_S_EXT_CTRLS) ? > >>> + ops->vidioc_s_ext_ctrls(file, fh, p) : -EINVAL; > >>> } > >>> > >>> static int v4l_try_ext_ctrls(const struct v4l2_ioctl_ops *ops, > >>> @@ -2327,8 +2334,8 @@ static int v4l_try_ext_ctrls(const struct v4l2_ioctl_ops *ops, > >>> vfd, vfd->v4l2_dev->mdev, p); > >>> if (ops->vidioc_try_ext_ctrls == NULL) > >>> return -ENOTTY; > >>> - return check_ext_ctrls(p, 0) ? ops->vidioc_try_ext_ctrls(file, fh, p) : > >>> - -EINVAL; > >>> + return check_ext_ctrls(p, VIDIOC_TRY_EXT_CTRLS) ? > >>> + ops->vidioc_try_ext_ctrls(file, fh, p) : -EINVAL; > >>> } > >>> > >>> /* > >>> > >> > > > > > -- Ricardo Ribalda