From nobody Mon Dec 1 22:05:06 2025 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C2C11DFF0 for ; Fri, 28 Nov 2025 12:47:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764334045; cv=none; b=bIHnnLNy3d2bDEE80HAxRzuTuarfplu+7N4587FhtuUVBaH35zMzGCCE28r531APOPOFAl8LgfN1aTjAb9Gf0A6Eie9GsndFfTQqSG1/HEkt+iFj3pZn32GSBPG1fKS4uL9nfGf7yp1Sc9x1BeIJHwrrXQzkRJwW0LtybveCy6I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764334045; c=relaxed/simple; bh=kzV9+demnOfcGL4XXbAez13alLimd8ksp0/UGXP6G3I=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Zb3RCL8a0L67FPMWNbAucCDg9lw7CHIUZj3XcSOematgRpx13yXeMcpJEkmN70hI4UXBq2YAnh0VdNTxHYoI9jKPKVGUT5h88RdbW/lHuPKFe/623eNLWuVXnNVhAKBJvl5yZ+qrt91Wod5zB6VfpXABsld8KWcKgnhtThk5bY8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hPq0SR4f; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hPq0SR4f" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-340bb1cb9ddso1480804a91.2 for ; Fri, 28 Nov 2025 04:47:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764334044; x=1764938844; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=to/vAA7bFq5ou2zypDaoBxJgK9XuwGqaOChWbgZEfKc=; b=hPq0SR4flAB9joF8x7U0XGpCjGcV/5C+VeQ3pkEnprTbH4mcwTIxaGSubZuewQ4nDm xhCKxjgBJv6qcu2UA1thVHGK7yhnIy1eW4RwRoR/aDAu1rVjdHcI3EuIkaxagn5t+9xX Z4gv+vbE1DskSgV9cthcrsQgw+/TWr28MBw8HKPRnuSrInGjVnyLIC90rudthkV4nP5k MT1LekDXkUj/ErkcFbO4tItJnhut7VHBJtGWKsBZcz/BwRQ+FhnMXjgNEl2F6WkdTSJI S5sry03Iqwg8F27bW0mJDC8p95kOzRV7x403BmJqjYINT5WkN7L8Bhkda8NPHTeHWZGX 4iXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764334044; x=1764938844; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=to/vAA7bFq5ou2zypDaoBxJgK9XuwGqaOChWbgZEfKc=; b=KIxJHo5e2CVszTwQO6WAluJUi5/UM6m6EJy339gX82raLoWwoH0CLD6GvZ9B3QNpFT PvaNfh5CHgd+PmfkdFFb4CLQKyx3W1zrSoUSszB6JC6jtutFmFDCN6zS6cWN1pSNsJFl bGjpHS4xoW0kLQdxJw7UIEd6Fm30T274dV2TQ2Iv0Xvvm5X6xe5YgvOUPZOHEG28drqr 6oe8vmEIN7Upx5iXP34EmA2a16CABIQYOFcQppQErGqGUycrx7hEnM0RJIGUvK0i7Gy6 r34kZvArGyJR8d5qKWUKtM9IRLbn0E4+C9ybmJrBd5+IQtvMd6GBRwEFh5d2PH1CPFlT nnSQ== X-Forwarded-Encrypted: i=1; AJvYcCVmju0ftwpqms/eeg/Cj5/cyONvg3s4maTxcqGMCQJN105xaCXx9J0R5FL6GDJhNrTUTPpUB8UQikE2jJY=@vger.kernel.org X-Gm-Message-State: AOJu0YyehIrC8oZuBKH0pSmlXs2lcdrLuOpVCJ+ApAiCUztWsGpx179b LMSfZOghJfJr4VLlLSdOpKZGfs5ccgAkaMcFi7e43szDrf9cY47ktAPa X-Gm-Gg: ASbGncuNQ6e7Ie3p9qoD/gLfyZQZAGyo+AET6TIvAUs5yd0ObXZ2cOz/ABZ4W6GX3YZ HPgIT2GD0W542DCITilcLbvvNAo7rmPW2GXYM9+AZzGFWb5hl3lui84Y8ThhiPmee6dvEzTOGmX El6OF387EmM0zWUQgoLq34x553SIoran8zozimHRZZIgjrp3ujRuju8z4LH2Ost9d9kWFhf8Usp Qqg16Tjd0LZWwQPp9MZXARnRdQFVaaMCfEcWOQ1G0+4ml945xcUjeF+h/re+u4YWvtZYREy8AQE +G7FMPas8oR/+8iSr6seLJjAXlWEk+QefptfEqOv5yzPAPUNAYGVv82YIrmA9OX2wpa3FplxHgx BUmpHhA7XNUnl43eaHeP60D0bW9kT2MUngVbNH8x1MdvX56FGvm/URb3Izs2nJwJ6ot7jY6Vttj Pcg5Y7WUKnNFuOdEAax+sH73tgZiQhabam0g0qOKNRQue0dF8nC8H+XTqDlWK7Nhjhceg7 X-Google-Smtp-Source: AGHT+IExavDrPYTAuFxviXdm3Se4ZMrsz/2FAilIbVsaAp7O+j6qMRHnuF8vULFtkbT7mW/nwVgERA== X-Received: by 2002:a05:7022:2521:b0:11b:a892:80b4 with SMTP id a92af1059eb24-11c9d60dc74mr17778260c88.5.1764334043683; Fri, 28 Nov 2025 04:47:23 -0800 (PST) Received: from 2045L.localdomain (7.sub-75-221-66.myvzw.com. [75.221.66.7]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-11dcaed5fcasm20956715c88.2.2025.11.28.04.47.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Nov 2025 04:47:23 -0800 (PST) From: Gui-Dong Han To: linux@roeck-us.net Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, Gui-Dong Han , stable@vger.kernel.org Subject: [PATCH] hwmon: (max16065) Use local variable to avoid TOCTOU Date: Fri, 28 Nov 2025 20:47:09 +0800 Message-ID: <20251128124709.3876-1-hanguidong02@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In max16065_current_show, data->curr_sense is read twice: once for the error check and again for the calculation. Since i2c_smbus_read_byte_data returns negative error codes on failure, if the data changes to an error code between the check and the use, ADC_TO_CURR results in an incorrect calculation. Read data->curr_sense into a local variable to ensure consistency. Note that data->curr_gain is constant and safe to access directly. This aligns max16065_current_show with max16065_input_show, which already uses a local variable for the same reason. Link: https://lore.kernel.org/all/CALbr=3DLYJ_ehtp53HXEVkSpYoub+XYSTU8Rg=3D= o1xxMJ8=3D5z8B-g@mail.gmail.com/ Fixes: f5bae2642e3d ("hwmon: Driver for MAX16065 System Manager and compati= bles") Cc: stable@vger.kernel.org Signed-off-by: Gui-Dong Han --- Based on the discussion in the link, I will submit a series of patches to address TOCTOU issues in the hwmon subsystem by converting macros to functions or adjusting locking where appropriate. --- drivers/hwmon/max16065.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/hwmon/max16065.c b/drivers/hwmon/max16065.c index 0ccb5eb596fc..4c9e7892a73c 100644 --- a/drivers/hwmon/max16065.c +++ b/drivers/hwmon/max16065.c @@ -216,12 +216,13 @@ static ssize_t max16065_current_show(struct device *d= ev, struct device_attribute *da, char *buf) { struct max16065_data *data =3D max16065_update_device(dev); + int curr_sense =3D data->curr_sense; =20 - if (unlikely(data->curr_sense < 0)) - return data->curr_sense; + if (unlikely(curr_sense < 0)) + return curr_sense; =20 return sysfs_emit(buf, "%d\n", - ADC_TO_CURR(data->curr_sense, data->curr_gain)); + ADC_TO_CURR(curr_sense, data->curr_gain)); } =20 static ssize_t max16065_limit_store(struct device *dev, --=20 2.43.0