From nobody Fri Oct 10 13:51:41 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 06E7D26B745; Fri, 13 Jun 2025 11:22:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749813745; cv=none; b=BAbzUAk7U7RzVyzaOvC+mi5MZQbLjNOX3UO7a5V5mN6LGXpmM1V0DNPcti6dy1Q7g1JNIZbPFKu8Q1Xopb0aPLUKwDRNptGpJ8yjJS/y+m+EnszBZcwQIN44aHE8Wg0GUUHBp0/Rg3bUWRUB+QWvX/yL6crv5YoZBqZ7wdatNs8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749813745; c=relaxed/simple; bh=loUBtf8W60INWcTtQ4NQkAMupMusgbfDXpZrp8td7BM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g/roeXqIUM1veBx2TBNJfmGnVHTJL3At235NrbSA7BT1nhcnHdM7gx3amIaNTdaBFGHTYXbS/T7LpADFAs27O3GYktRSuQlpn2b3YhfPKAMichvzQRL0lb33eAHK/8XmHBxaqJgbqfMcx4semas3QTski4Yo84+eAoHN6K4K0TE= 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=P+lh4K51; arc=none smtp.client-ip=209.85.218.48 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="P+lh4K51" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-ade58ef47c0so399275966b.1; Fri, 13 Jun 2025 04:22:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749813741; x=1750418541; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Cslt3f9C4mJd+mJKJpSfUQBV0IohQeT5wounvewwnQI=; b=P+lh4K51dly6ESh0+7wyBAKYEqqJtT72afLNRemNU5mxP7FGDp6CmXYvL/grzfezJH sFx/eRtAgfmJ5ASP+6CCWFeuz+AQL1+zZKK8lZp6ARi0tB4nynnqQclXw0JcIP56LPWP 4vzOPHQ1V/FXOCr12oeNByCaCoH8/Z8v4yOzlnHkv38Tfo1QLrbOKeR80Ekvndu7PPMx V8Fa7HvbNLJWsFuCd6MTdfkTBjDgx4ApJD0Ph8VVpkMmDN18oV725VHGkznSx9e2aotj csFxf4bhplebicKjkp1tcM7tzKqKJnlP05HF67hUyFaMwAbqFBUzTbYGdEVOfgIDgfkI BZdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749813741; x=1750418541; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Cslt3f9C4mJd+mJKJpSfUQBV0IohQeT5wounvewwnQI=; b=exbqYetcUWUzaWAQb3GHUs1C/ZggeHDZ+hDsJTaYAzBnIF4DtrkYEC6gMXCsvkky1V LA8OJU7te8vCeTsomOH2CAHrtlZx+D5UBRsbVcYfVYr6bq8WAJTUsdGgCo5qdvDUshqK D1QcX5fb++zkYCl0mz87G4xkjCXjcrUAvPfCjJEOWdrfJfX29DzV9ezro2ZV9w++W1V1 Cgqze5iO/OgCb3OOOzux7WuFb9JzLNgfQzdqTlx8H3q0QjDkJiYfdY6G98Qg3Y3SfW9D fCZYc+yoszQ9RtTa3N0/8qaF253ZeqFtSsu9Z2tpSrQpoNnZDgPEgS7bb6JEhnXm1b/F hhfg== X-Forwarded-Encrypted: i=1; AJvYcCV0QPeRr24P/+d6MEKDCERA1gMoztR0JjUwfebHdbMn0lJx6XGW76TnqQENKU5BgIhRBX5Rpy+9LCVuqEo=@vger.kernel.org, AJvYcCWHoBeEfJfi5BrwROouiRUMoou3uqK+lwYMBhelQ62gfxD6poH6kagiwasrVKFEG3UL86+EgFiFmDf4R7I=@vger.kernel.org X-Gm-Message-State: AOJu0YyVGbJROTOrLG60ju71OTt1lmXfH2mMuB/+AgEIbt0R1R3DQ6WU Z5iXKWgl14jAH+D7qOO/TaSy5xGmp2C+YCP4NmivbrNYNPQO1HK6n9Su X-Gm-Gg: ASbGncua2odcYweNJIq15impAVxLMB432YRjKKImqyNzblkRDHm2+6xfvoi00NT8OWo zs5TEX7PcEnaiW7Z1YOWuXFkNEs8vXD3syTbuIAqsNC8BchW+ksRXIKZ+NN9+V3bI0mFDDxXuj7 ZOoORCSGSUdxzsMR7Za6jdUXip03sDAfFoWuroC+zYAgB1jaT3US4m38NZK/SnWMzoJiP5+PwhG 7KxV/S0rKgC4mJ6syhNSXtL6+hIS7nwC1ndkJYj2nJv5F8CKwnNBH/WumzEvju1jLzkQCnhC8Hi /DD/T7iLvJljsoBISOcAo+/zcP1iOTvMm5kab4n+smbiWF8RT/hVfODqqZbISPKKb+72MSg7+ZA = X-Google-Smtp-Source: AGHT+IEx9GfzJrbNrYiYMIA+FYRdAm7xh2N93z+9r5XLJofNwKNlhi28bvRs4Begne6krdtPXTKLtQ== X-Received: by 2002:a17:907:1b1a:b0:ad8:942b:1d53 with SMTP id a640c23a62f3a-adf4fa8ed37mr28379566b.27.1749813741126; Fri, 13 Jun 2025 04:22:21 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.131.45]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-adec892b99asm111022566b.125.2025.06.13.04.22.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Jun 2025 04:22:20 -0700 (PDT) From: Cosmin Tanislav To: Cc: Sean Young , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v5 1/3] media: rc: ir-spi: allocate buffer dynamically Date: Fri, 13 Jun 2025 14:21:51 +0300 Message-ID: <20250613112210.22731-2-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250613112210.22731-1-demonsingur@gmail.com> References: <20250613112210.22731-1-demonsingur@gmail.com> 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" Replace the static transmit buffer with a dynamically allocated one, removing the limit imposed on the number of pulses to transmit. Calculate the number of pulses for each duration in the received buffer ahead of time, while also adding up the total pulses, to be able to allocate a buffer that perfectly fits the total number of pulses, then populate it. Signed-off-by: Cosmin Tanislav --- drivers/media/rc/ir-spi.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/drivers/media/rc/ir-spi.c b/drivers/media/rc/ir-spi.c index 8fc8e496e6aa..50e30e2fae22 100644 --- a/drivers/media/rc/ir-spi.c +++ b/drivers/media/rc/ir-spi.c @@ -21,13 +21,11 @@ #define IR_SPI_DRIVER_NAME "ir-spi" =20 #define IR_SPI_DEFAULT_FREQUENCY 38000 -#define IR_SPI_MAX_BUFSIZE 4096 =20 struct ir_spi_data { u32 freq; bool negated; =20 - u16 tx_buf[IR_SPI_MAX_BUFSIZE]; u16 pulse; u16 space; =20 @@ -43,37 +41,42 @@ static int ir_spi_tx(struct rc_dev *dev, unsigned int *= buffer, unsigned int coun unsigned int len =3D 0; struct ir_spi_data *idata =3D dev->priv; struct spi_transfer xfer; + u16 *tx_buf; =20 /* convert the pulse/space signal to raw binary signal */ for (i =3D 0; i < count; i++) { - unsigned int periods; + buffer[i] =3D DIV_ROUND_CLOSEST(buffer[i] * idata->freq, 1000000); + len +=3D buffer[i]; + } + + tx_buf =3D kmalloc_array(len, sizeof(*tx_buf), GFP_KERNEL); + if (!tx_buf) + return -ENOMEM; + + len =3D 0; + for (i =3D 0; i < count; i++) { int j; u16 val; =20 - periods =3D DIV_ROUND_CLOSEST(buffer[i] * idata->freq, 1000000); - - if (len + periods >=3D IR_SPI_MAX_BUFSIZE) - return -EINVAL; - /* * The first value in buffer is a pulse, so that 0, 2, 4, ... * contain a pulse duration. On the contrary, 1, 3, 5, ... * contain a space duration. */ val =3D (i % 2) ? idata->space : idata->pulse; - for (j =3D 0; j < periods; j++) - idata->tx_buf[len++] =3D val; + for (j =3D 0; j < buffer[i]; j++) + tx_buf[len++] =3D val; } =20 memset(&xfer, 0, sizeof(xfer)); =20 xfer.speed_hz =3D idata->freq * 16; - xfer.len =3D len * sizeof(*idata->tx_buf); - xfer.tx_buf =3D idata->tx_buf; + xfer.len =3D len * sizeof(*tx_buf); + xfer.tx_buf =3D tx_buf; =20 ret =3D regulator_enable(idata->regulator); if (ret) - return ret; + goto err_free_tx_buf; =20 ret =3D spi_sync_transfer(idata->spi, &xfer, 1); if (ret) @@ -81,6 +84,10 @@ static int ir_spi_tx(struct rc_dev *dev, unsigned int *b= uffer, unsigned int coun =20 regulator_disable(idata->regulator); =20 +err_free_tx_buf: + + kfree(tx_buf); + return ret ? ret : count; } =20 --=20 2.49.0 From nobody Fri Oct 10 13:51:41 2025 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (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 B646E2D6632; Fri, 13 Jun 2025 11:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749813747; cv=none; b=NJdWAUkymRM88gIScwt/QJueuaadIluJ+EYxLHJ6yR0I7ldrJngpltu4dgPQ+eXtwVNEmMIpQR2f/jk1wbh3PAPCRJaK6EIMbVPfM6s8rG8f3DodpVF15aDmVmPF3qUtHnVF4gxaoeSGj3ApVC+DWoazHXSjgG7ufBHS0bovyHY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749813747; c=relaxed/simple; bh=pG5nrP+4jfuDfje8nKz8m0Q5FmrGYNIw5InT6uU5zEc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JHWodJ0gVB877bIaa3ZO5QDDFq6qYJ1vWLMIKXMcMha1gEnUt02AH8rI0i26WQNPtw3NzMWLEabjq7p7ck93zzP/8jgUilSRswuMRPQSoPnEpkRWq3bjYnB2HzIgiPwZ16Xk/COPKDno1KOtbZqCP4GdliNbqsVEEReoWZvZ+zc= 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=AOU1XSqw; arc=none smtp.client-ip=209.85.208.49 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="AOU1XSqw" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-607c2b96b29so4198320a12.1; Fri, 13 Jun 2025 04:22:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749813744; x=1750418544; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8upPUPiix/+p5eOdVPCg8aogrC1eXzrVWNgdsnmMac0=; b=AOU1XSqwyo6KfS6uy+SHsCHhHtZpZZZTPmolLN1fPPJL9WBa6XpJr3h016mQ3ASLXP ejZ8vCBGjVG6nERfY5qqsOIGtjltGI2dTrvSFyoOUyX7HtdndseVGUIgpUJXq7fViJkv CRGHZUAYsI9oEY8knBKP0zIUAmGyc1tOrWSGo5aaOmyC68cDGQfjwIs9CbkB7Fmw6CkB bmjm1L4VRDZ0qXPJowTSBB/ODgUHjHY698CdECX4Yxv0Id4O0g+RwM8zpdazrF7N+muy 65wErMB0tRPP2aqnYFwmbK2cItALBnS5Y1AJagO4UUV9BDrbqKnGB4Ic2nfGRswzvjgy Hp3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749813744; x=1750418544; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8upPUPiix/+p5eOdVPCg8aogrC1eXzrVWNgdsnmMac0=; b=w3tqqtg1lFv7TgpwPRFOjbMvejc6Zno2obmcISREHspmNV1v4fXElQwNhqs+ASpekK BF9jFWKkMLNflkF3K9ChU0wNK4Dsth5BQPKtPfzFNSMOB/oH643LHwbmzV4p0h34ukua +ZulPfNvgYTSWE8JhDUq+ogQ/n6+DgSX+XfmIYtrEj/sz+R7fNAI1phgH0DoaLejROHd PKQ5CTlzbwXb66aOSiYOihMrhDj7cZu2NnvtSGgbZ7g0HySR/5clz8fpfQWKeu/8dvTd Ui9cyXPR/iNNNyuWpcOCBptmnJEMWZj9AnwqI5/Fc/iDIRZyp2Qmbi3CbXzkUnO3rmYm pKoQ== X-Forwarded-Encrypted: i=1; AJvYcCV1NdRtMYIYxwDJNXqqov1NouAbKWKVCQ2Csz+A6v0icVeeDqWg1aENPwSqkMTDioZzoETwx0Zlocdykh0=@vger.kernel.org, AJvYcCWS+8Ch+Z9Ows/G1sDeJ5RQWNbwL2hCwDaQWa2JYwJS5PMLu1fK8vdmnOvLnta36hX2TnG2+M2fltpBEz4=@vger.kernel.org X-Gm-Message-State: AOJu0YykBbPc7Yvp3Bad0IESi6NAArtIyoeA9NjfjoPd14y32AE4gDS3 t1VQQpwrThuQLq2j+UZS2Y3w21eEVnMqZeFhJD3XYfMUn7Ney8YopPnx X-Gm-Gg: ASbGncusdd252hKdBRAsLv6NbOmxDRvsnaXEoUeqJRtxWRijQRqp9JqoOsVQ5jQZDMm GvZqRpVKhKqiaVTerHj2Tmxr5cUBnQevnAvEUw9l15kdXjjcFs+IK8dyi8yxR71T5Eude/gz9Qq REYjgHETayY0xMe79u0aELHnMXE2bQdFFMgxgCuMlfp1cTu8tpW+PyMyrhf7H6Z7ItnfCBbqkaz LufcBW8zBagQ92vc9xzm3VvyNUmudk1Vkjnw+QjIBVMzTMrbHl9FSkYFMlYOEoJijCrF/H+Rz7T VDgKb/nkkWlahfnW6CuNVAuzA0BBCJMmsWsb3teBSC5LhpZ1rOdN7/WNSJp1GgY0GSR/ZvJP3Bc = X-Google-Smtp-Source: AGHT+IFOKf2AK+LHeHo5CJSQNqnTUzTSa+BHBpbNIutyxWWNHU1oymXPrQ77SnbG5hbATCoRpNbTRg== X-Received: by 2002:a17:907:3f21:b0:ad5:3743:3fa1 with SMTP id a640c23a62f3a-adec5d77712mr269199166b.50.1749813743864; Fri, 13 Jun 2025 04:22:23 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.131.45]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-adec892b99asm111022566b.125.2025.06.13.04.22.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Jun 2025 04:22:23 -0700 (PDT) From: Cosmin Tanislav To: Cc: Sean Young , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v5 2/3] media: rc: ir-spi: constrain carrier frequency Date: Fri, 13 Jun 2025 14:21:52 +0300 Message-ID: <20250613112210.22731-3-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250613112210.22731-1-demonsingur@gmail.com> References: <20250613112210.22731-1-demonsingur@gmail.com> 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" Carrier frequency is currently unconstrained, allowing the SPI transfer to be allocated and filled only for it to be later rejected by the SPI controller since the frequency is too large. Add a check to constrain the carrier frequency inside ir_spi_set_tx_carrier(). Also, move the number of bits per pulse to a macro since it is not used in multiple places. Signed-off-by: Cosmin Tanislav --- drivers/media/rc/ir-spi.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/media/rc/ir-spi.c b/drivers/media/rc/ir-spi.c index 50e30e2fae22..0b54ad74cec0 100644 --- a/drivers/media/rc/ir-spi.c +++ b/drivers/media/rc/ir-spi.c @@ -21,6 +21,7 @@ #define IR_SPI_DRIVER_NAME "ir-spi" =20 #define IR_SPI_DEFAULT_FREQUENCY 38000 +#define IR_SPI_BITS_PER_PULSE 16 =20 struct ir_spi_data { u32 freq; @@ -70,7 +71,7 @@ static int ir_spi_tx(struct rc_dev *dev, unsigned int *bu= ffer, unsigned int coun =20 memset(&xfer, 0, sizeof(xfer)); =20 - xfer.speed_hz =3D idata->freq * 16; + xfer.speed_hz =3D idata->freq * IR_SPI_BITS_PER_PULSE; xfer.len =3D len * sizeof(*tx_buf); xfer.tx_buf =3D tx_buf; =20 @@ -98,6 +99,9 @@ static int ir_spi_set_tx_carrier(struct rc_dev *dev, u32 = carrier) if (!carrier) return -EINVAL; =20 + if (carrier > idata->spi->max_speed_hz / IR_SPI_BITS_PER_PULSE) + return -EINVAL; + idata->freq =3D carrier; =20 return 0; --=20 2.49.0 From nobody Fri Oct 10 13:51:41 2025 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 36CB72D879C; Fri, 13 Jun 2025 11:22:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749813749; cv=none; b=IVKe97a31roAYt3JUgKXWINac5kM9PlwOyrPt5Hp90kY8Hy8OWB5kKxuL8vM1TeBbcSGUy6QdlEWB5KHvuJhiaiaeq5JkuRTRPwVwioKF4uy7iTyz9lb9Fe17y8FC9NlDQpDXln3q2yuYKsVMoOurXv8tLFNweRKVVOEbMi1nlc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749813749; c=relaxed/simple; bh=eYjZCfQ0f7Bv/kFih3mI4oepqqLcQ4rw3x9HPwSrX5w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mNTAv1tc0jCOUbjsdVw5FReiIqJBlSuSLbD9OfcUq1s+iC3gv8DSCpqL3kU+k1szi/f+G5DJQQXuiNUbnDhfJizOiluDGApzU95YfUqv9VEG4VsCF6ovBNSneIBzrWW8GoYHAiIEffFvIjqNDtDxjrimZf57+HCGbB38OTxfoEk= 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=FDQsn+LP; arc=none smtp.client-ip=209.85.218.47 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="FDQsn+LP" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-ad883afdf0cso394079366b.0; Fri, 13 Jun 2025 04:22:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749813745; x=1750418545; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9CHsP8nua2vc48gch5Autt0Ao+kx2eun61DBEUljxec=; b=FDQsn+LPZnZ8qWFmp1+fjIe+Mb4u7vn01UUrQP7uaxkjG9PXopRx/rpGeur1Z3kPtb HwgBemVUacUMu2WpkwGrVpfcYw5nfuEyZao84UnIrVKTUAVPZujtKYP8oeaKSnWwBAFZ K0kXfiXSxKz+J+JrHxHgS99qVSoY+/czbiFSjfELkZ63qwVFHY6ULj/AEHdekpIibf2v 3aunNuodv4TWw0EFxGVQtoloFOq37Zuoyt3cVC29klkebvmZMdf00bCTrBtBxpzfaNir t0aMkNlmmlyNrCu2ctrdLOtboxF/k56yRsXwgK27PJ8KkZgg1DCDkukvAyiLu2yLENHH mpug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749813745; x=1750418545; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9CHsP8nua2vc48gch5Autt0Ao+kx2eun61DBEUljxec=; b=v+n884EmMMD8XSMQmxL3dYV34bOuM3Y+OyXioPuOFqWASp1R5tHzjqDupVCAlvUHB2 vWg7HzqOseB4fcs6vjRjEUaa6jJDQ0wuKXwUFZDhvDfTj7z58CHhW453iRbrqMGIeRGg eDIGlq5Zn8FAzsniMPrwd5I6xMyVsBT3QgFUGMlm+8mHDBNkD9pgK8IorRJA/4TtZHZY 9vOajPLRxwSMFmB6fcFcB0jrhUH+lgwV4jX8u+QhW85hQgjzy/iiNcEDOOaKmj41boEX HWf+Rz0PR8wtPwpEu2LNFIhbl9WlCPKvAMiOzG+uufkNwSt8BUgrVn7Vib0DZXi8xP/3 FWMA== X-Forwarded-Encrypted: i=1; AJvYcCWCbBrz8R4YXL69mpvvXBdXpvxWE0Hr8/evRzH0Ro8Nby7JuFuFSMaKv32Qz1lthRFtqZ3w3OGoNv1tr0c=@vger.kernel.org, AJvYcCXxgmSqOv2Bb6DOUGrY+jQ0WD/1ifgmop0FB87Si87NaiihEKWHKnJ6puCsJXCXtCX/I+MGloXTO8g3lQQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzYc3q77fDZqlUuRHbAezTyVmaBvm0+LidpXxxbBxbyofA88Nvw ic3JNZ18Foo9GMsn9DkQBmt80STjcrpRghX1vSPTz6Xl76kMoyn0fM35 X-Gm-Gg: ASbGncs/OuJnNAPeBi5yzA0JiWQypqcRunoJNSUlU8BdsPtlHJElHzwIrnWuqN8hsN/ +V7tbOSYMj6GBj4RKaWTJ1/KNMU1wd/C2asN154wko86cmd4RerBGkEAm9VzFq7jzrItW98e5V2 1PMazPDV/UGq7A0xfJoU7uckLExfzc+GyX6bAw0m1PRzK0kdTjWuESd2Ru2cIhZMLxfsTVqZEyh LRzQMr5gy0TkMnhmlYQE5J21Kf8q4iEsUx9eDHP1Ici2yukf7f8jV0jj1D8pSHNbLO4/Q6HfB12 NBSSEkKSPiiFFQPZhTe9RsEBhRH4CzugRBI4dBlr4fW/tqXcdO1FXrev/4E4It9bJuZDFvutCHc = X-Google-Smtp-Source: AGHT+IHgzOkzboGNgtSvrNDUN1A1i0mKlOmr+iJfBERSN6L+klxvs3TkoUpW8lt4rPaYCN13Y5T0Ig== X-Received: by 2002:a17:907:8692:b0:ad8:9257:5717 with SMTP id a640c23a62f3a-adec55ee118mr259342566b.13.1749813745190; Fri, 13 Jun 2025 04:22:25 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.131.45]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-adec892b99asm111022566b.125.2025.06.13.04.22.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Jun 2025 04:22:24 -0700 (PDT) From: Cosmin Tanislav To: Cc: Sean Young , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v5 3/3] media: rc: ir-spi: avoid overflow in multiplication Date: Fri, 13 Jun 2025 14:21:53 +0300 Message-ID: <20250613112210.22731-4-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250613112210.22731-1-demonsingur@gmail.com> References: <20250613112210.22731-1-demonsingur@gmail.com> 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" Switch to u64 arithmetic and use DIV_ROUND_CLOSEST_ULL() to avoid the overflow. buffer[i] is unsigned int and is limited by the lirc core to IR_MAX_DURATION, which is 500000. idata->freq is u32, which has a max value of 0xFFFFFFFF. In the case where buffer[i] is 500000, idata->freq overflows the u32 multiplication for any values >=3D 8590. 0xFFFFFFFF / 500000 ~=3D 8589 By casting buffer[i] to u64, idata->freq can be any u32 value without overflowing the multiplication. 0xFFFFFFFFFFFFFFFF / 500000 ~=3D 36893488147419 (> 4294967295) The result of the final operation will fit back into the unsigned int limits without any issues. 500000 * 0xFFFFFFFF / 1000000 =3D 0x80000000 (< 0xFFFFFFFF) Signed-off-by: Cosmin Tanislav --- drivers/media/rc/ir-spi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/media/rc/ir-spi.c b/drivers/media/rc/ir-spi.c index 0b54ad74cec0..392441e0c116 100644 --- a/drivers/media/rc/ir-spi.c +++ b/drivers/media/rc/ir-spi.c @@ -46,7 +46,8 @@ static int ir_spi_tx(struct rc_dev *dev, unsigned int *bu= ffer, unsigned int coun =20 /* convert the pulse/space signal to raw binary signal */ for (i =3D 0; i < count; i++) { - buffer[i] =3D DIV_ROUND_CLOSEST(buffer[i] * idata->freq, 1000000); + buffer[i] =3D DIV_ROUND_CLOSEST_ULL((u64)buffer[i] * idata->freq, + 1000000); len +=3D buffer[i]; } =20 --=20 2.49.0