Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp2248472pxu; Fri, 9 Oct 2020 11:35:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz2khgvEdYmkQVPV9VCly34zmKAOjkgf4aibc1cZtuwZH85iTSkO2HWkBaB8UyHfzpZy3vh X-Received: by 2002:a17:906:f988:: with SMTP id li8mr3313464ejb.93.1602268502937; Fri, 09 Oct 2020 11:35:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602268502; cv=none; d=google.com; s=arc-20160816; b=mI1gwZkSlbHItcZZfCuS/kQdZNIhxcboB4XJaCgBtY4wE9M5xiBH7Kplkz+TyLyHjJ Ev13EsxVX3psueaRlW6btimpD1TH+RW6dBtzxaDy2vzXEA4xkmeA3EkG5Qlu/Y9XhLuX sPLSQ6pOs44wM5iQbBiI7eHB7UFGwJM6A+3dgwSku6QP1WY+DFNgcdHeDjh+IZ5KrKS1 Kz2rrN2T0NzL1s1JxHQbkrl2nrIc0YvkWrG9Hwq9hdV93t6e7oJCTalTG45xbvS2Mvdf VbvJU+Tlbq5o7WT78A1PRIGop9p6zR/uGrQmdtUhP4WOfQh0iJ+CRy5DUPuVU2GmcMhq GEOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=sfIRZSYBuq+MnozQeCBK9PSbZtBv00OpSwHV6m/Zcv0=; b=mU25wtn1/yI7oaczl2MTnWmEKnbAI5tEc4niEyO8V1YMb5z8aqNywJyYZ0Vo5/iZ6x zxhHI03KsbsdIwidxAO/RHxNkVQU5WOH/03TXZaTpQKuxlz+6VznmbS1Zc2esfc0SOKx cLNjhZKWGaXt7x1xG7RKx9KvIe18RHs7UP8ybe7I7NWZcFIl1gjrnl4/k00ndIOeDOSZ YWtHa8G17CtKu3gakUuISo6jz8vPRdI9p/SuYdhOq+9sx5qLmS9az7i5wOZlViUclG72 MJh8Is/nnl0QOWRHbpb1ZkUgaVtRWyMvPapdKWAaVaPpRyhRKiSfM2JADHxJjCvdfyy+ SPiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=Kgo558q1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d20si6533619edz.317.2020.10.09.11.34.39; Fri, 09 Oct 2020 11:35:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=Kgo558q1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388399AbgJIMMJ (ORCPT + 99 others); Fri, 9 Oct 2020 08:12:09 -0400 Received: from fllv0015.ext.ti.com ([198.47.19.141]:40182 "EHLO fllv0015.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732957AbgJIMMJ (ORCPT ); Fri, 9 Oct 2020 08:12:09 -0400 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 099CC7NU071967; Fri, 9 Oct 2020 07:12:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1602245527; bh=sfIRZSYBuq+MnozQeCBK9PSbZtBv00OpSwHV6m/Zcv0=; h=From:To:CC:Subject:Date; b=Kgo558q1C7K20OGjWya28RrOuaKM485hETMvlu/0nTx7j/oQfaLPa/GvnmY3F67Lb 7zJY1JHZuH1QcwM/gc29ruvk80Rj4b8HgxWY1ikvdhsgFnaSXAI70fvqlbGxiu67Ln l92Z40b2bukBwSyNjk96YxYw7+EOdTYKdbkKvOA4= Received: from DFLE111.ent.ti.com (dfle111.ent.ti.com [10.64.6.32]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 099CC7WG105005 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 9 Oct 2020 07:12:07 -0500 Received: from DFLE112.ent.ti.com (10.64.6.33) by DFLE111.ent.ti.com (10.64.6.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1979.3; Fri, 9 Oct 2020 07:12:07 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DFLE112.ent.ti.com (10.64.6.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1979.3 via Frontend Transport; Fri, 9 Oct 2020 07:12:07 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id 099CC6Rv104538; Fri, 9 Oct 2020 07:12:06 -0500 From: Dan Murphy To: CC: , , , , Dan Murphy Subject: [PATCH] power: supply: bq25980: Fix uninitialized wd_reg_val and overrun Date: Fri, 9 Oct 2020 07:12:05 -0500 Message-ID: <20201009121205.28178-1-dmurphy@ti.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix the issue when 'i' is equal to array size then array index over runs the array when checking for the watch dog value. This also fixes the uninitialized wd_reg_val if the for..loop was not successful in finding an appropriate match. Fixes: 5069185fc18e ("power: supply: bq25980: Add support for the BQ259xx family") Signed-off-by: Dan Murphy --- drivers/power/supply/bq25980_charger.c | 29 +++++++++++++------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/drivers/power/supply/bq25980_charger.c b/drivers/power/supply/bq25980_charger.c index 3995fb7cf060..e6a91e43ae5b 100644 --- a/drivers/power/supply/bq25980_charger.c +++ b/drivers/power/supply/bq25980_charger.c @@ -1099,28 +1099,29 @@ static int bq25980_power_supply_init(struct bq25980_device *bq, static int bq25980_hw_init(struct bq25980_device *bq) { struct power_supply_battery_info bat_info = { }; - int wd_reg_val; + int wd_reg_val = BQ25980_WATCHDOG_DIS; + int wd_max_val = BQ25980_NUM_WD_VAL - 1; int ret = 0; int curr_val; int volt_val; int i; - if (!bq->watchdog_timer) { - ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3, - BQ25980_WATCHDOG_DIS, - BQ25980_WATCHDOG_DIS); - } else { - for (i = 0; i < BQ25980_NUM_WD_VAL; i++) { - if (bq->watchdog_timer > bq25980_watchdog_time[i] && - bq->watchdog_timer < bq25980_watchdog_time[i + 1]) { - wd_reg_val = i; - break; + if (bq->watchdog_timer) { + if (bq->watchdog_timer >= bq25980_watchdog_time[wd_max_val]) + wd_reg_val = wd_max_val; + else { + for (i = 0; i < wd_max_val; i++) { + if (bq->watchdog_timer > bq25980_watchdog_time[i] && + bq->watchdog_timer < bq25980_watchdog_time[i + 1]) { + wd_reg_val = i; + break; + } } } - - ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3, - BQ25980_WATCHDOG_MASK, wd_reg_val); } + + ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3, + BQ25980_WATCHDOG_MASK, wd_reg_val); if (ret) return ret; -- 2.28.0.585.ge1cfff676549