From nobody Tue Dec 16 07:41:27 2025 Received: from mail-4316.protonmail.ch (mail-4316.protonmail.ch [185.70.43.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 92B271E3DED for ; Sun, 14 Dec 2025 19:16:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.16 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765739787; cv=none; b=NwN6louWhvp24ChNxTq+GwJ1JKHMARzMlUuSfymCpGBEXoa25IWpdQnrE8+TTYKlX1o44+Npqa5pGTeVauGAIUjF3xewUXLkAtEsw8CDjsBTYYbneFL7WE7GDHLDKAKs/BIViyCJ51dxNwMnHcN0Rv53PIkqdIao4w+vMI8NcBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765739787; c=relaxed/simple; bh=SRjG1SLbCHXTM9MSvLvYXkDYr/JQi8GpBQyNV8yzFAs=; h=Date:To:From:Cc:Subject:Message-ID:MIME-Version:Content-Type; b=T0smJisuRaZ/iC29RHt/qRRUCaEZC+qTE/sBebesZs0lrXTNaBbR4WGNQzRsXDdMXVU3NWqbBE0MjyZ03cbFDv3yGsfICDCi2r0TChMCOw9AIZr6lSciLRX6k4qmKEmjm3t6OY3nR0buqGTbTXbJqd4NhS+dao4+JQKyDhprH9c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me; spf=pass smtp.mailfrom=pm.me; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b=I5RUS/D5; arc=none smtp.client-ip=185.70.43.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pm.me Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b="I5RUS/D5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1765739783; x=1765998983; bh=JiXfij5hcpLZ0UEB9sJ/hT6miBeb4p33U/1mP5QVbdU=; h=Date:To:From:Cc:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=I5RUS/D5cPqJpVqQdvYK1fk5U8JFbVUKx/KDdbG53gYEAiyVyy3zU1TExs9786Lo6 gamQejrdnhAUi4Kkbpo9yViQAiwcWb/1nO0M3BiQusRSX2TwuViDNK+uV6qjtlRZ5I 4Pz1GhUOhDAECi/VJ9ufYjdtimtkc2JuLKsl1tYmhUB0NTvfi2z8K4GaAIS9rOfJd1 aNTIq/DnPiTSvu0WGXtN8xyoVasBiZ4bF0yA5xsqrnsatXPrUIPvTbxl4ftFREYBOY ywuZ5UGJH0HmwyAn0Imnv6Wl15nL+zgoD+WidchBaKQHGbtTEWXrILVO7KVaX614Di wCxSJOLk+SCyg== Date: Sun, 14 Dec 2025 19:16:18 +0000 To: sre@kernel.org From: Alexander Koskovich Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Alexander Koskovich Subject: [PATCH v2] power: reset: nvmem-reboot-mode: respect cell size for nvmem_cell_write Message-ID: <20251214191529.2470580-1-akoskovich@pm.me> Feedback-ID: 37836894:user:proton X-Pm-Message-ID: 6ba3f6b22900e67dfffb2b6d9e4da86e0368d7c5 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" Some platforms expose reboot mode cells that are smaller than an unsigned int, in which cases lead to write failures. Read the cell first to determine actual size and only write the number of bytes the cell can hold. Fixes: 7a78a7f7695b ("power: reset: nvmem-reboot-mode: use NVMEM as reboot = mode write interface") Signed-off-by: Alexander Koskovich --- drivers/power/reset/nvmem-reboot-mode.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/power/reset/nvmem-reboot-mode.c b/drivers/power/reset/= nvmem-reboot-mode.c index 41530b70cfc4..d260715fccf6 100644 --- a/drivers/power/reset/nvmem-reboot-mode.c +++ b/drivers/power/reset/nvmem-reboot-mode.c @@ -10,6 +10,7 @@ #include #include #include +#include =20 struct nvmem_reboot_mode { struct reboot_mode_driver reboot; @@ -19,12 +20,22 @@ struct nvmem_reboot_mode { static int nvmem_reboot_mode_write(struct reboot_mode_driver *reboot, unsigned int magic) { - int ret; struct nvmem_reboot_mode *nvmem_rbm; + size_t buf_len; + void *buf; + int ret; =20 nvmem_rbm =3D container_of(reboot, struct nvmem_reboot_mode, reboot); =20 - ret =3D nvmem_cell_write(nvmem_rbm->cell, &magic, sizeof(magic)); + buf =3D nvmem_cell_read(nvmem_rbm->cell, &buf_len); + if (IS_ERR(buf)) + return PTR_ERR(buf); + kfree(buf); + + if (buf_len > sizeof(magic)) + return -EINVAL; + + ret =3D nvmem_cell_write(nvmem_rbm->cell, &magic, buf_len); if (ret < 0) dev_err(reboot->dev, "update reboot mode bits failed\n"); =20 --=20 2.47.3