From patchwork Tue Dec 19 19:56:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eddie James X-Patchwork-Id: 851019 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3z1TFM0JfSz9t16 for ; Wed, 20 Dec 2017 06:56:55 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3z1TFL67pczF06x for ; Wed, 20 Dec 2017 06:56:54 +1100 (AEDT) X-Original-To: openbmc@lists.ozlabs.org Delivered-To: openbmc@lists.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=linux.vnet.ibm.com (client-ip=148.163.158.5; helo=mx0a-001b2d01.pphosted.com; envelope-from=eajames@linux.vnet.ibm.com; receiver=) Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3z1TF45PdfzF06v for ; Wed, 20 Dec 2017 06:56:40 +1100 (AEDT) Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vBJJsras105285 for ; Tue, 19 Dec 2017 14:56:38 -0500 Received: from e35.co.us.ibm.com (e35.co.us.ibm.com [32.97.110.153]) by mx0a-001b2d01.pphosted.com with ESMTP id 2ey66c1qkw-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 19 Dec 2017 14:56:38 -0500 Received: from localhost by e35.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 19 Dec 2017 12:56:37 -0700 Received: from b03cxnp08027.gho.boulder.ibm.com (9.17.130.19) by e35.co.us.ibm.com (192.168.1.135) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 19 Dec 2017 12:56:35 -0700 Received: from b03ledav004.gho.boulder.ibm.com (b03ledav004.gho.boulder.ibm.com [9.17.130.235]) by b03cxnp08027.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id vBJJuYOs6553876; Tue, 19 Dec 2017 12:56:35 -0700 Received: from b03ledav004.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DFA567803F; Tue, 19 Dec 2017 12:56:34 -0700 (MST) Received: from talon7.austin.ibm.com (unknown [9.41.241.240]) by b03ledav004.gho.boulder.ibm.com (Postfix) with ESMTP id 96A4078038; Tue, 19 Dec 2017 12:56:34 -0700 (MST) From: Eddie James To: openbmc@lists.ozlabs.org Subject: [PATCH linux dev-4.10 v3] hwmon (occ): Fix integer overflow in multiplication Date: Tue, 19 Dec 2017 13:56:33 -0600 X-Mailer: git-send-email 1.8.3.1 X-TM-AS-GCONF: 00 x-cbid: 17121919-0012-0000-0000-0000157C73CB X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008228; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000244; SDB=6.00962623; UDB=6.00486921; IPR=6.00742617; BA=6.00005752; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00018629; XFM=3.00000015; UTC=2017-12-19 19:56:36 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17121919-0013-0000-0000-000050B9ED15 Message-Id: <1513713393-10030-1-git-send-email-eajames@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-12-19_11:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1712190285 X-BeenThere: openbmc@lists.ozlabs.org X-Mailman-Version: 2.1.24 Precedence: list List-Id: Development list for OpenBMC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Edward A. James" , Eddie James Errors-To: openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "openbmc" Power values were overflowing INT_MAX when being converted to microwatts, even though the storage was sufficiently large (unsigned 64 bit). Change literals to unsigned long long. Also change tmep storage to u32 to avoid overflows at 65000 millidegrees. Signed-off-by: Edward A. James --- drivers/hwmon/occ/common.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/hwmon/occ/common.c b/drivers/hwmon/occ/common.c index 3175e7b..2e188d5 100644 --- a/drivers/hwmon/occ/common.c +++ b/drivers/hwmon/occ/common.c @@ -353,7 +353,7 @@ static ssize_t occ_show_temp_1(struct device *dev, struct device_attribute *attr, char *buf) { int rc; - u16 val = 0; + u32 val = 0; struct temp_sensor_1 *temp; struct occ *occ = dev_get_drvdata(dev); struct occ_sensors *sensors = &occ->sensors; @@ -468,7 +468,7 @@ static ssize_t occ_show_power_1(struct device *dev, struct device_attribute *attr, char *buf) { int rc; - u32 val = 0; + u64 val = 0; struct power_sensor_1 *power; struct occ *occ = dev_get_drvdata(dev); struct occ_sensors *sensors = &occ->sensors; @@ -491,11 +491,11 @@ static ssize_t occ_show_power_1(struct device *dev, val = get_unaligned_be32(&power->accumulator); break; case 3: - val = get_unaligned_be16(&power->value) * 1000000; + val = get_unaligned_be16(&power->value) * 1000000ULL; break; } - return snprintf(buf, PAGE_SIZE - 1, "%u\n", val); + return snprintf(buf, PAGE_SIZE - 1, "%llu\n", val); } static ssize_t occ_show_power_2(struct device *dev, @@ -525,7 +525,7 @@ static ssize_t occ_show_power_2(struct device *dev, val = get_unaligned_be64(&power->accumulator); break; case 3: - val = get_unaligned_be16(&power->value) * 1000000; + val = get_unaligned_be16(&power->value) * 1000000ULL; break; case 4: val = power->function_id; @@ -562,7 +562,7 @@ static ssize_t occ_show_power_a0(struct device *dev, val = get_unaligned_be16(&power->system.update_time); break; case 2: - val = get_unaligned_be16(&power->system.value) * 1000000; + val = get_unaligned_be16(&power->system.value) * 1000000ULL; break; case 3: val = get_unaligned_be32(&power->system.update_tag); @@ -574,7 +574,7 @@ static ssize_t occ_show_power_a0(struct device *dev, val = get_unaligned_be16(&power->proc.update_time); break; case 6: - val = get_unaligned_be16(&power->proc.value) * 1000000; + val = get_unaligned_be16(&power->proc.value) * 1000000ULL; break; case 7: val = get_unaligned_be32(&power->proc.update_tag); @@ -583,7 +583,7 @@ static ssize_t occ_show_power_a0(struct device *dev, val = get_unaligned_be64(&power->proc.accumulator); break; case 9: - val = get_unaligned_be16(&power->vdd.value) * 1000000; + val = get_unaligned_be16(&power->vdd.value) * 1000000ULL; break; case 10: val = get_unaligned_be32(&power->vdd.update_tag); @@ -592,7 +592,7 @@ static ssize_t occ_show_power_a0(struct device *dev, val = get_unaligned_be64(&power->vdd.accumulator); break; case 12: - val = get_unaligned_be16(&power->vdn.value) * 1000000; + val = get_unaligned_be16(&power->vdn.value) * 1000000ULL; break; case 13: val = get_unaligned_be32(&power->vdn.update_tag);