Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8072697ybl; Thu, 16 Jan 2020 10:09:19 -0800 (PST) X-Google-Smtp-Source: APXvYqwXoq2xh/Bv7FoRXh95NJRxoiYMr3uOZkIA3JvFj9OCYVa0eojkxiJIDpmpVg1TSgGSf0Vo X-Received: by 2002:a9d:7f83:: with SMTP id t3mr2925403otp.115.1579198159793; Thu, 16 Jan 2020 10:09:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579198159; cv=none; d=google.com; s=arc-20160816; b=SgWg5rkSoU1A8V0egP4guHpD4V524Kf9LUm6q6YN1EWRpgqSKSJb0WYGi1yu7KTWXn lk4tqDfAK8LqiznpRitUqDgmaIXnDViixVFXrGtKnLr/9LUolNVr/MvOSQ/9DxAPmliq t5qXnb0lCuyCvWHAtXQiIHnHqyEKDO5s9pnqACAZp5wrclgNROmYy8JvsD2bFTTUjoaK 0BYijQdynoqM2K7N1uywMBwOLJdKsP9YUcGF4lIIVWIAUBEYwYwRye28x3J/kkdmV6fy vCREyAHIfXkcolFjbGh7Oy7YbJIA7+eJ+4NqmVpFRkBJiVouz05ZG8XkJPtsHQZdTbij p3Og== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=nyTlvzKKxgPfStRKudsaDSSW0zu/kNUM40DfKJzCBSo=; b=IXnTttequS1jTTBMijGpkeaEGfDjUPI5wKRvMNhI4NkMmnBwlWANB+LCmy2g6Hv+oi vIKetFdJcmxwP6yCrWsBsMaWlrIHtULXo5/l+OH1zdHVrmqROnSz8YjjQVEBfRk66/3W U1bw0FFwwA1M7HOW4rotHsw/e5ZeR56PliD8mD1IIGkDH1mgr0NywL72MWH+tUGTzbHY K/3L10Todyx2HXae9Eko37uofDHP5wQBAvldb2XUjsKo9m/VZ38f7Vc4b6PSl0NTXW4V UdjfqYkByj02olTb5skj+ANVAazVBz920hucvgbyj/ybQ1eCJrynDx/Bp89+cT/1uPzL nvgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wQyCYORM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p3si12632711oih.186.2020.01.16.10.09.07; Thu, 16 Jan 2020 10:09:19 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wQyCYORM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387499AbgAPSHt (ORCPT + 99 others); Thu, 16 Jan 2020 13:07:49 -0500 Received: from mail.kernel.org ([198.145.29.99]:54958 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2393394AbgAPRi4 (ORCPT ); Thu, 16 Jan 2020 12:38:56 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E22EF246C3; Thu, 16 Jan 2020 17:38:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579196335; bh=RxwM+6dQQiPlDK/OlqLM0wNGJJ+mVuVkfE7h3sIO5Yk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wQyCYORMZGDZ9WrCSfpK5hqhb7JKSsMPqGbFE7C1YPOarFijNfRxbVS82dEsH2K1h L/vcsH2E5JrDgFCaDXaKnycK42jCspk2L9Ryscb69VVEeDfpeTcJ4F75Qnc+O6aFrd FzNLjjmR1NZXyiFfQAMu0rHngJgUw0zrR7l4hiLI= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Dan Carpenter , Hans Verkuil , Mauro Carvalho Chehab , Sasha Levin , linux-media@vger.kernel.org Subject: [PATCH AUTOSEL 4.9 134/251] media: omap_vout: potential buffer overflow in vidioc_dqbuf() Date: Thu, 16 Jan 2020 12:34:43 -0500 Message-Id: <20200116173641.22137-94-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116173641.22137-1-sashal@kernel.org> References: <20200116173641.22137-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dan Carpenter [ Upstream commit dd6e2a981bfe83aa4a493143fd8cf1edcda6c091 ] The "b->index" is a u32 the comes from the user in the ioctl. It hasn't been checked. We aren't supposed to use it but we're instead supposed to use the value that gets written to it when we call videobuf_dqbuf(). The videobuf_dqbuf() first memsets it to zero and then re-initializes it inside the videobuf_status() function. It's this final value which we want. Hans Verkuil pointed out that we need to check the return from videobuf_dqbuf(). I ended up doing a little cleanup related to that as well. Fixes: 72915e851da9 ("[media] V4L2: OMAP: VOUT: dma map and unmap v4l2 buffers in qbuf and dqbuf") Signed-off-by: Dan Carpenter Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- drivers/media/platform/omap/omap_vout.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c index a31b95cb3b09..77ec70f5fef6 100644 --- a/drivers/media/platform/omap/omap_vout.c +++ b/drivers/media/platform/omap/omap_vout.c @@ -1526,23 +1526,20 @@ static int vidioc_dqbuf(struct file *file, void *fh, struct v4l2_buffer *b) unsigned long size; struct videobuf_buffer *vb; - vb = q->bufs[b->index]; - if (!vout->streaming) return -EINVAL; - if (file->f_flags & O_NONBLOCK) - /* Call videobuf_dqbuf for non blocking mode */ - ret = videobuf_dqbuf(q, (struct v4l2_buffer *)b, 1); - else - /* Call videobuf_dqbuf for blocking mode */ - ret = videobuf_dqbuf(q, (struct v4l2_buffer *)b, 0); + ret = videobuf_dqbuf(q, b, !!(file->f_flags & O_NONBLOCK)); + if (ret) + return ret; + + vb = q->bufs[b->index]; addr = (unsigned long) vout->buf_phy_addr[vb->i]; size = (unsigned long) vb->size; dma_unmap_single(vout->vid_dev->v4l2_dev.dev, addr, size, DMA_TO_DEVICE); - return ret; + return 0; } static int vidioc_streamon(struct file *file, void *fh, enum v4l2_buf_type i) -- 2.20.1