Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp897805ybd; Wed, 26 Jun 2019 07:49:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqy+Nkh+TTtRtN1zuD0E9p16SeexxaYmIwSzhvhNiAsV5hKwngc5FjTAwbunBt7n+tMkgz4l X-Received: by 2002:a17:90a:9905:: with SMTP id b5mr5336653pjp.70.1561560556392; Wed, 26 Jun 2019 07:49:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561560556; cv=none; d=google.com; s=arc-20160816; b=pa3Cx1eQMhMpH69jWAdCOkSEjIR2LowN6V4RYqRaSk+lAihF7lUYEfR9JXpN5OydY9 f/JF6OyK/ruOBgjgrH32kysvkkcHZPs/kHJn/xWhxs/ldE97uGQHS4GBkvvAlRWPtyyV 8YPDbQxbyojBgkGuV28KD71A+RZ2iWGyfesRHHcsBwZ6HD3AdpawvJH8S4kGShBn8tkb e9sNmUGolh33Z8qDRkb83bse3J9/NeAq3rIUzYA5mns2xg2J2G4XAr7PTe7qEo44mrgN SF8P7flMVW3IvOQ5FyKDDQuqR2YAQRlvkwGckKHr29KdkFNtu7xiMqbEyaeEocIV/7se 60tw== 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 :message-id:date:subject:cc:to:from; bh=AY7K742AYPJBD1JPej/aPQDR9/x6sh6avW+xWRi2urE=; b=jV0OLUJ+9zHg3Fxw3HeGlG9UYIHwdibXZQlifqxvGCaLTaoFl2jEAbBYdpdxUMcZUp iB5QL98kpPbXPwGmJ28LCv9kqulXnjhUMl7ICVNns5TUSgTefyGIw5WTwzWHb6uA9GGk Cul9m4FseHzbqq8rt92F8RVnMBmqyKwSrMztftMWe7d+Pq+LkJHLieStFxKfS3ZOSOs5 eKnbJ7WQGhsen7GvJyVFNqlkASlBqnJ/dpW1edgGe5IA1CKBVSSatAM/79iN6ryxuOx0 nDfyk5z5TaTiOHvqJxkHbDxHb9/DZvwz79eyzR4DxjfcVO7QpacPdmDd5mUUQRfnHUWA J7ew== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w23si3652118ply.230.2019.06.26.07.48.59; Wed, 26 Jun 2019 07:49:16 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728469AbfFZOsR (ORCPT + 99 others); Wed, 26 Jun 2019 10:48:17 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:52400 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728373AbfFZOrv (ORCPT ); Wed, 26 Jun 2019 10:47:51 -0400 Received: from 1.general.cking.uk.vpn ([10.172.193.212] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1hg9D8-0007AG-Ck; Wed, 26 Jun 2019 14:47:46 +0000 From: Colin King To: Hans Verkuil , Mauro Carvalho Chehab , linux-media@vger.kernel.org Cc: kernel-janitors@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH][next][V2] media: vivid: fix potential integer overflow on left shift Date: Wed, 26 Jun 2019 15:47:46 +0100 Message-Id: <20190626144746.27607-1-colin.king@canonical.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Colin Ian King There is a potential integer overflow when int 2 is left shifted as this is evaluated using 32 bit arithmetic but is being used in a context that expects an expression of type s64. Fix this by shifting 2ULL to avoid a 32 bit overflow. Addresses-Coverity: ("Unintentional integer overflow") Fixes: 8a99e9faa131 ("media: vivid: add HDMI (dis)connect RX emulation") Fixes: 79a792dafac6 ("media: vivid: add HDMI (dis)connect TX emulation") Signed-off-by: Colin Ian King --- V2: use intermediate variables for the shifted expression to make code a bit more readable. --- drivers/media/platform/vivid/vivid-ctrls.c | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/media/platform/vivid/vivid-ctrls.c b/drivers/media/platform/vivid/vivid-ctrls.c index 3e916c8befb7..df1598e81c7a 100644 --- a/drivers/media/platform/vivid/vivid-ctrls.c +++ b/drivers/media/platform/vivid/vivid-ctrls.c @@ -1613,6 +1613,8 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap, } if (dev->num_hdmi_inputs) { + s64 hdmi_input = (2ULL << (dev->num_hdmi_inputs - 1)) - 1; + dev->ctrl_dv_timings_signal_mode = v4l2_ctrl_new_custom(hdl_vid_cap, &vivid_ctrl_dv_timings_signal_mode, NULL); @@ -1633,12 +1635,13 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap, V4L2_CID_DV_RX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL, 0, V4L2_DV_RGB_RANGE_AUTO); dev->ctrl_rx_power_present = v4l2_ctrl_new_std(hdl_vid_cap, - NULL, V4L2_CID_DV_RX_POWER_PRESENT, 0, - (2 << (dev->num_hdmi_inputs - 1)) - 1, 0, - (2 << (dev->num_hdmi_inputs - 1)) - 1); + NULL, V4L2_CID_DV_RX_POWER_PRESENT, 0, hdmi_input, + 0, hdmi_input); } if (dev->num_hdmi_outputs) { + s64 hdmi_output = (2ULL << (dev->num_hdmi_outputs - 1)) - 1; + /* * We aren't doing anything with this at the moment, but * HDMI outputs typically have this controls. @@ -1652,17 +1655,14 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap, dev->ctrl_display_present = v4l2_ctrl_new_custom(hdl_vid_out, &vivid_ctrl_display_present, NULL); dev->ctrl_tx_hotplug = v4l2_ctrl_new_std(hdl_vid_out, - NULL, V4L2_CID_DV_TX_HOTPLUG, 0, - (2 << (dev->num_hdmi_outputs - 1)) - 1, 0, - (2 << (dev->num_hdmi_outputs - 1)) - 1); + NULL, V4L2_CID_DV_TX_HOTPLUG, 0, hdmi_output, + 0, hdmi_output); dev->ctrl_tx_rxsense = v4l2_ctrl_new_std(hdl_vid_out, - NULL, V4L2_CID_DV_TX_RXSENSE, 0, - (2 << (dev->num_hdmi_outputs - 1)) - 1, 0, - (2 << (dev->num_hdmi_outputs - 1)) - 1); + NULL, V4L2_CID_DV_TX_RXSENSE, 0, hdmi_output, + 0, hdmi_output); dev->ctrl_tx_edid_present = v4l2_ctrl_new_std(hdl_vid_out, - NULL, V4L2_CID_DV_TX_EDID_PRESENT, 0, - (2 << (dev->num_hdmi_outputs - 1)) - 1, 0, - (2 << (dev->num_hdmi_outputs - 1)) - 1); + NULL, V4L2_CID_DV_TX_EDID_PRESENT, 0, hdmi_output, + 0, hdmi_output); } if ((dev->has_vid_cap && dev->has_vid_out) || (dev->has_vbi_cap && dev->has_vbi_out)) -- 2.20.1