Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp1375644imm; Tue, 2 Oct 2018 07:17:20 -0700 (PDT) X-Google-Smtp-Source: ACcGV63i0SBJeVhKl6WP/FinzE0sttTkuHSAdHegQ7kz7Tc85mFU+WWS/XhZ0nV+OLBnMmjpqHyS X-Received: by 2002:a17:902:8609:: with SMTP id f9-v6mr5717932plo.134.1538489840434; Tue, 02 Oct 2018 07:17:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538489840; cv=none; d=google.com; s=arc-20160816; b=08HHuD9dFbSTOxwdz9uySbnP1iZtBnRVkGEJYI7pIVO6OkT2jN3ep7JWOw8sATmFGW TfkM1MxCuF0A69HY/6eBCqE8ReJhtO4Gf38WT32v/zoKFuYYDNuE5Mi/50rJlz94Ozf/ dhquLbitLfF9w+VmiNhVko0jd9l9Rox4DHj8djGfjwf1AFRhgQb3KILL4yU3T2D7KnFC QltuCBQVE4aBYoyToU9s+qNvw6Gmmq7hLNFAwnby/Rit0Q0RWHwFyMVkMa6RgnjhPilg 9HEkxkt1mIxgtXdbTxgLbtnfb/vpYw40neTJmVhFyQnQX9S8wwz/L8Hnome4e/jTizs2 7jJg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from; bh=r5U25EjGL0AovaLa69h3FisB/EYCL4pB+ne/e/uuWcI=; b=YOvZ3UiKxK7xgCVANVjZYarF3Njz9EqQUcYO5jpnD0VD2B/slS8qiNTB/Od6B/UJb4 KqPy6vXYJSjGOB2FAZC3H2FUhv78B1HZYkrLOg6CpPlaBMRYFkljZhofWQ5BF8SZOXZj 73FyhWJdwKZ1y1W2dJvWM82/eTlT+dO2jFIn9SbFuFwysDBRnK5MV5wgeTjQpWcONMk1 LY7DuGLYDo7TJ0s4ufkw6QsUbwxBstcnhDFu7OKlleyscf7SB0xnAFc7yZHnQTOIIF8J GxZvu5lNqizKH91AvCuYGpCMiSRdlJn08EQ7wS8CElRxe44QIXMs7LkYN+R+kuHMi+EA z77g== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q10-v6si17939439pli.202.2018.10.02.07.17.05; Tue, 02 Oct 2018 07:17:20 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727077AbeJBUKJ (ORCPT + 99 others); Tue, 2 Oct 2018 16:10:09 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:59938 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726881AbeJBUKI (ORCPT ); Tue, 2 Oct 2018 16:10:08 -0400 Received: from localhost (24-104-73-23-ip-static.hfc.comcastbusiness.net [24.104.73.23]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id E4846266; Tue, 2 Oct 2018 13:26:45 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Gustavo A. R. Silva" , Harry Wentland , Alex Deucher , Sasha Levin Subject: [PATCH 4.18 025/228] drm/amd/display/dc/dce: Fix multiple potential integer overflows Date: Tue, 2 Oct 2018 06:22:02 -0700 Message-Id: <20181002132500.774246821@linuxfoundation.org> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181002132459.032960735@linuxfoundation.org> References: <20181002132459.032960735@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review 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 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: "Gustavo A. R. Silva" [ Upstream commit 6f3472a993e7cb63cde5d818dcabc8e42fc03744 ] Add suffix ULL to constant 5 and cast variables target_pix_clk_khz and feedback_divider to uint64_t in order to avoid multiple potential integer overflows and give the compiler complete information about the proper arithmetic to use. Notice that such constant and variables are used in contexts that expect expressions of type uint64_t (64 bits, unsigned). The current casts to uint64_t effectively apply to each expression as a whole, but they do not prevent them from being evaluated using 32-bit arithmetic instead of 64-bit arithmetic. Also, once the expressions are properly evaluated using 64-bit arithmentic, there is no need for the parentheses that enclose them. Addresses-Coverity-ID: 1460245 ("Unintentional integer overflow") Addresses-Coverity-ID: 1460286 ("Unintentional integer overflow") Addresses-Coverity-ID: 1460401 ("Unintentional integer overflow") Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)") Signed-off-by: Gustavo A. R. Silva Reviewed-by: Harry Wentland Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c @@ -133,7 +133,7 @@ static bool calculate_fb_and_fractional_ uint64_t feedback_divider; feedback_divider = - (uint64_t)(target_pix_clk_khz * ref_divider * post_divider); + (uint64_t)target_pix_clk_khz * ref_divider * post_divider; feedback_divider *= 10; /* additional factor, since we divide by 10 afterwards */ feedback_divider *= (uint64_t)(calc_pll_cs->fract_fb_divider_factor); @@ -145,8 +145,8 @@ static bool calculate_fb_and_fractional_ * of fractional feedback decimal point and the fractional FB Divider precision * is 2 then the equation becomes (ullfeedbackDivider + 5*100) / (10*100))*/ - feedback_divider += (uint64_t) - (5 * calc_pll_cs->fract_fb_divider_precision_factor); + feedback_divider += 5ULL * + calc_pll_cs->fract_fb_divider_precision_factor; feedback_divider = div_u64(feedback_divider, calc_pll_cs->fract_fb_divider_precision_factor * 10); @@ -203,8 +203,8 @@ static bool calc_fb_divider_checking_tol &fract_feedback_divider); /*Actual calculated value*/ - actual_calc_clk_khz = (uint64_t)(feedback_divider * - calc_pll_cs->fract_fb_divider_factor) + + actual_calc_clk_khz = (uint64_t)feedback_divider * + calc_pll_cs->fract_fb_divider_factor + fract_feedback_divider; actual_calc_clk_khz *= calc_pll_cs->ref_freq_khz; actual_calc_clk_khz =