Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2442778imm; Mon, 28 May 2018 08:10:30 -0700 (PDT) X-Google-Smtp-Source: AB8JxZp/knE8ZDPvawC8dr3J72qB3jVghmL4PbnfK+Aqiyng7+1zZqpbzZVJeqhyposIq5cz1iUT X-Received: by 2002:a63:4281:: with SMTP id p123-v6mr10980662pga.144.1527520230072; Mon, 28 May 2018 08:10:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527520230; cv=none; d=google.com; s=arc-20160816; b=wSPY/sKK/NI/oqE5oh8GOOolNMLjHcZWnBpwVhsWFlqnFYDTuXeVEoqtvxttigpcjx xXJGyXqTO4Lv9cdZXwmLwe124y0IZ1KgLRFivfDLsDllTaRXiDqtfGVqhY9HR5A5qMYs wFDUSdawwOnas0LpapG+tePfnBr1CDeEUhFYlQgwvA2SdIK+h9kjz2X30hXCzfJ7OiF/ MWoLgw6/2iv2h1HZYFKEdvjLYDF8b6kZtRCU/yn9Gy9uZepoqIFCWEs0Z4boj+zmfIYf SL9E+sfSWzz8AZf4C634Q1OGuClYDVYxKAwH1r0/Cq9XE5JbtWZKQYja4od+URn1fwgV e1aA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=PoVH/OJuu13rdf3eaXX3X23S0ZcEBZl+qUaoNUKrYJA=; b=yzriiZDMKWDkmfu6wWsBCgMQN6vx8L4fdJpyVfJ9BL+nS24iGU7tf9kVrpctCYPy/c KDFlEL1vARJkgijrTkbRyZOFgMvHYXHaWgJJCikOKD+GJ8CWOUI77n5F53FxxpdgHp+g RCTstYPTLnhtua4D10lOZMEBSoE24pdugyTDP8ZpWXUUR/fKS1lggBUiarJwzYtfKjBH 6UJ9snuUUVGgY5EJcTtOZ9MEuaKMQXpMKHOdAwgh3TJodufuZyvlgnARgPQtvP3uQvMI ktQq5Vycx4FBisIF7FsclxbsnyDnpTLx7ZT1Jup8E2l7m4nOgTjGSC1H6sM7u4a0W9G0 a9vw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2vCf65L0; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x67-v6si29771655pfx.216.2018.05.28.08.10.15; Mon, 28 May 2018 08:10:30 -0700 (PDT) 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=2vCf65L0; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1165969AbeE1PJg (ORCPT + 99 others); Mon, 28 May 2018 11:09:36 -0400 Received: from mail.kernel.org ([198.145.29.99]:43700 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1033572AbeE1KYX (ORCPT ); Mon, 28 May 2018 06:24:23 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C738E20883; Mon, 28 May 2018 10:24:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527503063; bh=QKQChf2ec2x9RdoPpQhvGZvjQZ2JODsVr3rOgHNpyak=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2vCf65L0s7hu3KP5Pbkqke4r181MNsEPeKuKbbdfIG2lt48vS27Q/12eZ+l/cYKJl 7REwcA/7WILzF4dPAJHQESG5q7kW2brhqVCyQtrjvBB+9e8cO0k1klD1S1qYKD3Zet VuKdcEHEmLFnebJvqK79locii2tE/d5G5FqLQJEQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Arnd Bergmann , Laurent Pinchart , Sakari Ailus , Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 4.4 230/268] media: s3c-camif: fix out-of-bounds array access Date: Mon, 28 May 2018 12:03:24 +0200 Message-Id: <20180528100229.338506210@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100202.045206534@linuxfoundation.org> References: <20180528100202.045206534@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Arnd Bergmann [ Upstream commit a398e043637a4819a0e96467bfecaabf3224dd62 ] While experimenting with older compiler versions, I ran into a warning that no longer shows up on gcc-4.8 or newer: drivers/media/platform/s3c-camif/camif-capture.c: In function '__camif_subdev_try_format': drivers/media/platform/s3c-camif/camif-capture.c:1265:25: error: array subscript is below array bounds This is an off-by-one bug, leading to an access before the start of the array, while newer compilers silently assume this undefined behavior cannot happen and leave the loop at index 0 if no other entry matches. As Sylvester explains, we actually need to ensure that the value is within the range, so this reworks the loop to be easier to parse correctly, and an additional check to fall back on the first format value for any unexpected input. I found an existing gcc bug for it and added a reduced version of the function there. Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69249#c3 Fixes: babde1c243b2 ("[media] V4L: Add driver for S3C24XX/S3C64XX SoC series camera interface") Signed-off-by: Arnd Bergmann Reviewed-by: Laurent Pinchart Acked-by: Sakari Ailus Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/media/platform/s3c-camif/camif-capture.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --- a/drivers/media/platform/s3c-camif/camif-capture.c +++ b/drivers/media/platform/s3c-camif/camif-capture.c @@ -1268,16 +1268,17 @@ static void __camif_subdev_try_format(st { const struct s3c_camif_variant *variant = camif->variant; const struct vp_pix_limits *pix_lim; - int i = ARRAY_SIZE(camif_mbus_formats); + unsigned int i; /* FIXME: constraints against codec or preview path ? */ pix_lim = &variant->vp_pix_limits[VP_CODEC]; - while (i-- >= 0) + for (i = 0; i < ARRAY_SIZE(camif_mbus_formats); i++) if (camif_mbus_formats[i] == mf->code) break; - mf->code = camif_mbus_formats[i]; + if (i == ARRAY_SIZE(camif_mbus_formats)) + mf->code = camif_mbus_formats[0]; if (pad == CAMIF_SD_PAD_SINK) { v4l_bound_align_image(&mf->width, 8, CAMIF_MAX_PIX_WIDTH,