From nobody Fri Dec 19 20:13:21 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9C78B297D75; Sun, 24 Mar 2024 23:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711324348; cv=none; b=SOCJROqUeY5tjGWqHxmeQT8xzslAEs1ceI5Nl3rnS/hVEL0b1z//fQT88B7A3x57+0wWUNCOcr7/0ZS8+0EsVLne4cFlZB4Gi64FA+MAGulx7BC97LnCz4wtIOCu+WZUbqCpe4ltJyS64l15zSsD2qlPbWCKwPJTzuTUDxW7EhA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711324348; c=relaxed/simple; bh=9hDq8AwRgk19coc1GvtDBGMHiiNIlyP+muhMLhLjsIc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uXfqpYKDn43Dua673WNA7A3P/6ZvwILL4MI8wAvZXHIQHLeSh9uWahJKAkNB7VoVmc4CMOt2uWRoq+Xjas3gTOiMtox/G/sU7zFwZehX040KBAGs0logiy+LcG3FpyUvfG1e2UCJg2rR53hclcBKhZR6uXJ+XY8rylSTOuMZ97o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Hrp3nPLh; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Hrp3nPLh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5CBAAC433F1; Sun, 24 Mar 2024 23:52:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711324347; bh=9hDq8AwRgk19coc1GvtDBGMHiiNIlyP+muhMLhLjsIc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Hrp3nPLhqhnQ0olVmyjJjz0Yiwb6hiJX5Pl2CyP/4NM/0eiCl0KEi79BAt0Tsx+gC d9DzDMUfKNG3bmcA0gXxDlmW9vuPcBwHlb4t/9gLa8K6V9s5xH2PF1sO2XlFlRYHg8 /TIXpH14Yv4BfCYP9uhO16G1oqUFtMb2JQF/ND5u/ho8uPBRkte/qWbB0kd+ysbhc+ RXQGexBBZ0I/CNyt99EiE7HR4gwpIU4tuowVEKedqu0vzr6Uk9jO+hI20sN3xB3p5J teBFKJIw3UfcIAZZfXLtVApugzaaLASqkoG/ytPzO4wlOfjhENQDXLaXGMUXRasabp PhfD+FdL7+PrA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Arnd Bergmann , Justin Stitt , Hans Verkuil , Sasha Levin Subject: [PATCH 4.19 116/148] media: dvb-frontends: avoid stack overflow warnings with clang Date: Sun, 24 Mar 2024 19:49:40 -0400 Message-ID: <20240324235012.1356413-117-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240324235012.1356413-1-sashal@kernel.org> References: <20240324235012.1356413-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arnd Bergmann [ Upstream commit 7a4cf27d1f0538f779bf31b8c99eda394e277119 ] A previous patch worked around a KASAN issue in stv0367, now a similar problem showed up with clang: drivers/media/dvb-frontends/stv0367.c:1222:12: error: stack frame size (362= 4) exceeds limit (2048) in 'stv0367ter_set_frontend' [-Werror,-Wframe-large= r-than] 1214 | static int stv0367ter_set_frontend(struct dvb_frontend *fe) Rework the stv0367_writereg() function to be simpler and mark both register access functions as noinline_for_stack so the temporary i2c_msg structures do not get duplicated on the stack when KASAN_STACK is enabled. Fixes: 3cd890dbe2a4 ("media: dvb-frontends: fix i2c access helpers for KASA= N") Signed-off-by: Arnd Bergmann Reviewed-by: Justin Stitt Signed-off-by: Hans Verkuil Signed-off-by: Sasha Levin --- drivers/media/dvb-frontends/stv0367.c | 34 +++++++-------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/drivers/media/dvb-frontends/stv0367.c b/drivers/media/dvb-fron= tends/stv0367.c index 49f4472f09fa8..7a5b27de725e0 100644 --- a/drivers/media/dvb-frontends/stv0367.c +++ b/drivers/media/dvb-frontends/stv0367.c @@ -128,50 +128,32 @@ static const s32 stv0367cab_RF_LookUp2[RF_LOOKUP_TABL= E2_SIZE][RF_LOOKUP_TABLE2_S } }; =20 -static -int stv0367_writeregs(struct stv0367_state *state, u16 reg, u8 *data, int = len) +static noinline_for_stack +int stv0367_writereg(struct stv0367_state *state, u16 reg, u8 data) { - u8 buf[MAX_XFER_SIZE]; + u8 buf[3] =3D { MSB(reg), LSB(reg), data }; struct i2c_msg msg =3D { .addr =3D state->config->demod_address, .flags =3D 0, .buf =3D buf, - .len =3D len + 2 + .len =3D 3, }; int ret; =20 - if (2 + len > sizeof(buf)) { - printk(KERN_WARNING - "%s: i2c wr reg=3D%04x: len=3D%d is too big!\n", - KBUILD_MODNAME, reg, len); - return -EINVAL; - } - - - buf[0] =3D MSB(reg); - buf[1] =3D LSB(reg); - memcpy(buf + 2, data, len); - if (i2cdebug) printk(KERN_DEBUG "%s: [%02x] %02x: %02x\n", __func__, - state->config->demod_address, reg, buf[2]); + state->config->demod_address, reg, data); =20 ret =3D i2c_transfer(state->i2c, &msg, 1); if (ret !=3D 1) printk(KERN_ERR "%s: i2c write error! ([%02x] %02x: %02x)\n", - __func__, state->config->demod_address, reg, buf[2]); + __func__, state->config->demod_address, reg, data); =20 return (ret !=3D 1) ? -EREMOTEIO : 0; } =20 -static int stv0367_writereg(struct stv0367_state *state, u16 reg, u8 data) -{ - u8 tmp =3D data; /* see gcc.gnu.org/bugzilla/show_bug.cgi?id=3D81715 */ - - return stv0367_writeregs(state, reg, &tmp, 1); -} - -static u8 stv0367_readreg(struct stv0367_state *state, u16 reg) +static noinline_for_stack +u8 stv0367_readreg(struct stv0367_state *state, u16 reg) { u8 b0[] =3D { 0, 0 }; u8 b1[] =3D { 0 }; --=20 2.43.0