From nobody Wed Jun 17 02:53:04 2026 Received: from mail-lf1-f43.google.com (mail-lf1-f43.google.com [209.85.167.43]) (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 9B2D73DCDAE for ; Tue, 21 Apr 2026 19:49:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776800994; cv=none; b=pCoQaC/Gl7EIA+gBYoPRNeaEWL+Sa8iD7GWBEvHQq7N8ZDceeNE0JGWcIm8NiAYavz9OwNxEX5SNH/288y07DAR0hGIZelLsNC8MQ98yH3mDYpuyhJKbGMv5pY0HfDsak1yZSfuBfB/zoCMSQ04m9wthx1uRqOQ49lacaytxKMM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776800994; c=relaxed/simple; bh=yAahJwXkWCO126tqmFg94b0yk2S2R571DZmsbo72ick=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=Q+CqskiNMlyi59Pvs9UAahVmGn80m0gnLEwqT+Wi7rytW5zenMxdjYsI1lVpopFnvmB/Y5fdMR0oCBK8Z4gFfN33QlcdU6tKF/MkFIoi7CAyT/RRZivkKDqWEd4Nv4/vOLYY2gLuYJWNfnGNRfYIL+r8cZqtNTe90f8FWsl1+5E= 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=RbghiF0C; arc=none smtp.client-ip=209.85.167.43 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="RbghiF0C" Received: by mail-lf1-f43.google.com with SMTP id 2adb3069b0e04-5a2c1b09d69so664870e87.2 for ; Tue, 21 Apr 2026 12:49:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776800990; x=1777405790; 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=rKuae0vpvJ95HIhc8nyWaIWBHRclDLR6Nz0GgGjCMyQ=; b=RbghiF0CGc86DHCTxyr/zSWUnOqCQYwqZEwjjOI9R6YDt1qz4RezbGr5aKpVxUjk2T jmWwIHrEu3zqNHs8cAEIPm59+fvLSfDXd1kz5YhMi+8LHAxmstc7o0NWRrV7EgpyMSa/ GuFb3QL7U6KxDp0tP+DWA2HVneBO9tErmvBMae+oeY9A9TWJDDZDESeBDPv03BHPWSyO Ro6VtyoUkCPLZXTvmlLeyplKIN57lyxHX2tc4eefe8hyniZ6LM5Jqv+KCOBwy7XhGVtB oRBq62l6W+dD3Mr1MiZ+PCEJLVeI1ASaz9Rrj/IYopxTiydaA1bQ9QeOmmRn1a6dsZsv 1j0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776800990; x=1777405790; 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=rKuae0vpvJ95HIhc8nyWaIWBHRclDLR6Nz0GgGjCMyQ=; b=DYuwHw9tq8+9UvpRTpODEMSj+DJtEfcWcc0jksMSRo5JrPTZpcHbPekHNesy60EgV1 lIFfp9eukjrVOEjA9xYH68/4M1lBoF/678O2SMQ9A+kUfkwyPadTDqUoThbFe4ggaMfX qfpsDpBVAIUIcaz6SF9Riccko7YtwD6VTCvllzZo2SFrGOqNN50td1KUiB8126AbJLbt 1byAa5oEGs7r1i7/krQxIxzVYm/7QHjY7jTmm3zPeXZDtjOVHm27DgL4P3c2q1wNZ7Np mP11NsVWjupR11GiP0Ii/1hPKUwNgtK4qf4PtsU1AMK1hoc2Cj+Rmq1j8/b37pWmEuKk Yblg== X-Forwarded-Encrypted: i=1; AFNElJ/MsAQoQBQfyfY+aPh0iCuhdkqkAXTEah/MK/SZmENNyAGMATlR7oc4qcHiqq5vV3knKOnrlQKOZXUDYps=@vger.kernel.org X-Gm-Message-State: AOJu0Yz84F+b1SoNB/gYFC/D5hjji9maPKZbf/wwwbLlUvu3qwzCDb1N o0VfdRJaB4cl5npeL23t8nNec4PILIyJDGscyW8Sl9hGH0v0zc0fGAR07epqGg== X-Gm-Gg: AeBDiesr1y1eXeWcfshJZXQXFqHt3ztyzc7k1HRaPy0nUkpsXwbNvLharXRrwQjEQGu +6/rvHo8LiEBQQ8v+SG7Se2Y4trYOHs0Yk0RgSC76StuNEsZLSzrnd9gAk65DdvKJE3n43KWzwP 8OTiDkGX0R8+L0PKnfB1WUqXeSCirUhJuCE400daNTq+vtTrKFB1me2ggVaXY76sMqWk3/RKum1 Hxvoha/sTep1khgrvkfDu7tak7X99a3NkZOJMDA7+WkLe7wb+bCvVdq+A8TbvimQA3fGYFKi4SL KpKJyD/g4mfSrWg+lq1NGWk9ZWNn3E3+tU7iBswBiCw3IV73F5XbpkAvaVroMf/WNiFmLWS3EwZ cKcwvPINu4RD23lKEqJYuiUclDjOSPiqiwVzfSOdGYJ8cG8hSQMzFiAgbcg+/QA0PUaG0zLL4Pq b5YDqloe3l6XnZGisLpA29QIt2ts1mpwzBLZxRta6OkifQnVRKsSPVfW5ImffKYVmPU6AGjWBiG xFaIhiMiPIWfPE= X-Received: by 2002:a05:6512:10ca:b0:5a2:b8ca:a7e0 with SMTP id 2adb3069b0e04-5a4172f82a3mr2730837e87.5.1776800989499; Tue, 21 Apr 2026 12:49:49 -0700 (PDT) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a4187e7a3fsm3864781e87.59.2026.04.21.12.49.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Apr 2026 12:49:49 -0700 (PDT) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: jikos@kernel.org, bentiss@kernel.org Cc: oleg@makarenk.ooo, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com Subject: [PATCH] HID: pidff: Fix integer overflow in pidff_rescale Date: Tue, 21 Apr 2026 21:49:41 +0200 Message-ID: <20260421194941.1422722-1-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Rescaling values close to the max (U16_MAX) temporairly creates values that exceed the s32 range. This caused value overflow in case when, for example, a periodic effect phase was higher than 180 degrees. In turn, rescale function could return values outside of the logical range of the HID field (negative when logical minimum is 0). Fix by using 64 bit signed integer to store the value during calculation but still return only 32 bit integer. Closes: https://github.com/JacKeTUs/universal-pidff/issues/116 Cc: Signed-off-by: Tomasz Paku=C5=82a --- For inclusion in the 7.1-RC period drivers/hid/usbhid/hid-pidff.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c index aee8a4443305..fb9b4f292732 100644 --- a/drivers/hid/usbhid/hid-pidff.c +++ b/drivers/hid/usbhid/hid-pidff.c @@ -326,8 +326,9 @@ static s32 pidff_clamp(s32 i, struct hid_field *field) */ static int pidff_rescale(int i, int max, struct hid_field *field) { - return i * (field->logical_maximum - field->logical_minimum) / max + - field->logical_minimum; + /* 64 bits needed for big values during rescale */ + return (s64)i * (field->logical_maximum - field->logical_minimum) / + max + field->logical_minimum; } =20 /* --=20 2.53.0