Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3780036pxj; Mon, 21 Jun 2021 06:29:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyKxA0qncrllCM/8SyjCNRMcu03+gnNebogcmrs1MXkYkY2/SqX3YvVoTTE4CcHH+h8xX80 X-Received: by 2002:a92:b111:: with SMTP id t17mr18537556ilh.208.1624282190572; Mon, 21 Jun 2021 06:29:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624282190; cv=none; d=google.com; s=arc-20160816; b=J1Qjv0B+hWgabIoCYdf5ho/DyYSbfBFquUKW2t9mqTZOg7N0sys6Zubda8m2eGAqbg +0UTlrxGhyI4laQ8Xl77tkGHY1bYhi00+2UUI25WlwaAG8Jg4TvlvBsNgGqYfrehNvdP qXYGJgs8YpTn1LNMQqyWd6ROk96oPkMIUlDwlN2jOswDKxD/3qkpmhOSdWEhLhNR9Bc0 pRyk9M4FJoeBaKzXdfSKtYL6rkQ9wlpEchG/xkYw+STYFvH0FqLDY58O6YVzlXofPlxv 8t3F+KRHBumW2HqEF5Bdu8f5AXSC2ha/EpNQglw3JjYcEPucn/kYKoGEZQd3m8MkxrzQ tLOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=9QuWkNyrYH5baFxm5AUGx7sEHsDPqWG1ZO0337rxejM=; b=BTGvjUV8i3gXiEU4BtLWAEZxZny72UnSKCND4TQK1dHxl7Cc1e2gJFEOFlzjbDOGkU 2P6o29gbH4AmWKJdKb8iEg8CTZu7P6sqHtagZy2pZEQsWNJfJrdZvImmD8zzSDruoLQg 7qxN5dkqcTTeYSIv8DpvbSyJ97FSotq9woj3JhXzYdN0YDJHZpq4ZQWe/R6f+Kvf9Trs rDuYv6iFTIQyKWXR3OPzEf314vR+eliT/AFSLMsQZsSdEZFKQoLi7txQJQ+i0vjvmL/C xY60edYLeUtCECW/mZ9IrRBUiygUMV1XyIfa/E/MGvs/vkNTk2qyVSEWxzdIfEL1cIAi Jdjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=SyT4dwT9; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u5si13465290ill.146.2021.06.21.06.29.38; Mon, 21 Jun 2021 06:29:50 -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 (test mode) header.i=@ideasonboard.com header.s=mail header.b=SyT4dwT9; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230061AbhFUNbC (ORCPT + 99 others); Mon, 21 Jun 2021 09:31:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229876AbhFUNbA (ORCPT ); Mon, 21 Jun 2021 09:31:00 -0400 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A2F1DC061574; Mon, 21 Jun 2021 06:28:46 -0700 (PDT) Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A918D4C2C; Mon, 21 Jun 2021 15:28:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1624282123; bh=J4z112JuKdJWKmcJ0RQBiB0ZWAMM+vP5EbTFkOHaTPE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=SyT4dwT9K/cJKNPWFuY7LwQhhDKtmrFcrMSGeCojfpvI6ndAkwz+rykCZZbJeNyVM N9MZ42aFxRTEyo+SJBT1E3EooJvj+a7oMwAaXcObssKulHvXrDJdxQSkrm3yhyNzut hi+n3sGUJWO+3eVIbuOO1CfJKRYNdF3XAWOcUZCU= Date: Mon, 21 Jun 2021 16:28:17 +0300 From: Laurent Pinchart To: Mauro Carvalho Chehab Cc: linuxarm@huawei.com, mauro.chehab@huawei.com, Mauro Carvalho Chehab , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, stable@vger.kernel.org Subject: Re: [PATCH v2] media: uvc: don't do DMA on stack Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Mauro, Thank you for the patch. On Mon, Jun 21, 2021 at 03:23:35PM +0200, Mauro Carvalho Chehab wrote: > As warned by smatch: > drivers/media/usb/uvc/uvc_v4l2.c:911 uvc_ioctl_g_input() error: doing dma on the stack (&i) > drivers/media/usb/uvc/uvc_v4l2.c:943 uvc_ioctl_s_input() error: doing dma on the stack (&i) > > those two functions call uvc_query_ctrl passing a pointer to > a data at the DMA stack. those are used to send URBs via > usb_control_msg(). Using DMA stack is not supported and should > not work anymore on modern Linux versions. > > So, use a temporary buffer, allocated together with > struct uvc_video_chain. The second part of the sentence isn't correct anymore. > Cc: stable@vger.kernel.org # Kernel 4.9 and upper > Signed-off-by: Mauro Carvalho Chehab > --- > drivers/media/usb/uvc/uvc_v4l2.c | 26 ++++++++++++++++++-------- > 1 file changed, 18 insertions(+), 8 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c > index 252136cc885c..d680ae8a5f87 100644 > --- a/drivers/media/usb/uvc/uvc_v4l2.c > +++ b/drivers/media/usb/uvc/uvc_v4l2.c > @@ -899,8 +899,8 @@ static int uvc_ioctl_g_input(struct file *file, void *fh, unsigned int *input) > { > struct uvc_fh *handle = fh; > struct uvc_video_chain *chain = handle->chain; > + char *buf; I'd make this u8 *buf; as the selector value is unsigned. > int ret; > - u8 i; > > if (chain->selector == NULL || > (chain->dev->quirks & UVC_QUIRK_IGNORE_SELECTOR_UNIT)) { > @@ -908,13 +908,18 @@ static int uvc_ioctl_g_input(struct file *file, void *fh, unsigned int *input) > return 0; > } > > + buf = kmalloc(1, GFP_KERNEL); MIssing error check. > + > ret = uvc_query_ctrl(chain->dev, UVC_GET_CUR, chain->selector->id, > chain->dev->intfnum, UVC_SU_INPUT_SELECT_CONTROL, > - &i, 1); > + buf, 1); > if (ret < 0) > return ret; > > - *input = i - 1; > + *input = *buf; > + > + kfree(buf); > + > return 0; > } > > @@ -922,8 +927,8 @@ static int uvc_ioctl_s_input(struct file *file, void *fh, unsigned int input) > { > struct uvc_fh *handle = fh; > struct uvc_video_chain *chain = handle->chain; > + char *buf; u8 * here too. > int ret; > - u32 i; > > ret = uvc_acquire_privileges(handle); > if (ret < 0) > @@ -939,10 +944,15 @@ static int uvc_ioctl_s_input(struct file *file, void *fh, unsigned int input) > if (input >= chain->selector->bNrInPins) > return -EINVAL; > > - i = input + 1; > - return uvc_query_ctrl(chain->dev, UVC_SET_CUR, chain->selector->id, > - chain->dev->intfnum, UVC_SU_INPUT_SELECT_CONTROL, > - &i, 1); > + buf = kmalloc(1, GFP_KERNEL); And missing error check. > + > + *buf = input + 1; > + ret = uvc_query_ctrl(chain->dev, UVC_SET_CUR, chain->selector->id, > + chain->dev->intfnum, UVC_SU_INPUT_SELECT_CONTROL, > + buf, 1); > + kfree(buf); > + > + return ret; > } > > static int uvc_ioctl_queryctrl(struct file *file, void *fh, -- Regards, Laurent Pinchart