From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 D2C86381B1F for ; Wed, 13 May 2026 07:39:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778657977; cv=none; b=LEeITNbrwtxXL0EXNfCdbOTZcOgG2OD3bbk/os866Jxj3V6Rt5E2EVptjD3XQPkARGSSNdm7DDiYlqaiXlhAERED/lj9tQPB48mfcaO9ytF2ymWIjPxXCFdvj7J76R0pMeEYppEMWyyL5nCe8hK98jxAxkkjcTr6fQuMydi4d0E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778657977; c=relaxed/simple; bh=H12n7XT8L0vS9/nUJhthKydiP6KILzegUqtu7PMuprU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BuIvKJoiPAmSqD1EKxZcUWLuYvJUQlYZplMYXPADCgdUCuLwCnt977ORD/PGy2mE01uZAfVKf+skDMbifDWrZvKEImXD01GOhZKjjkCZKUYPhOCF7RM1u8oRcbkQW9b3SwC1WGa4aJAqnoe/eaF9DEqy5RsnZCiNWir4BwBXd5I= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=Cz6QKmxq; arc=none smtp.client-ip=209.85.216.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="Cz6QKmxq" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-36608b2f2dcso4506038a91.2 for ; Wed, 13 May 2026 00:39:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778657975; x=1779262775; 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=QQjma9I5R6nbaFglLQyZciBB/30vaX5pQDI/IG+cY1s=; b=Cz6QKmxqRuVXW0+DPk2Lt81eurMBvjQlMlTLVh4MpUBUaliK6YRa+8urkMD9YeVLE8 ozzWZsO0fAcmPWXIVfTkrOiasWTjue1zP8HgoCh19iHlH6CCy4lAhWMayOXG+gWUOhER bUvu8/b8gTSOuynzEDKunA59O0iCW2BG7VGIA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778657975; x=1779262775; 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=QQjma9I5R6nbaFglLQyZciBB/30vaX5pQDI/IG+cY1s=; b=FBYFzmRFx6i/7mruNcPs6It6UE6hoTMnUule8NsmMceHx30aqeXJEQ1oCJr/Nsrbno OtLZVUsc789FxaHKlJn37qucKVGhgIshSjODQYX+gqI5v+mZF9vIxignQ1SXISDErUVQ uG1yhvG93UBn8SLSWuHvVL8gEgq6/xdlZjS8h82QkDWVBDwTpS2oiZL49HQjG7y3TZB7 NBAtbvfa89AiOokm5RqSv+WdYC4fdN8xCBj74AybHK2SIo25HFsVrcbnCxv3HQ4bmD3v 93RTPO7ZJZJBtKCTKUhwCCZLgyUA8wbzCJ0UZbuUBz4U2YIipfIKpzusXSTKDULOqBKo CLhA== X-Forwarded-Encrypted: i=1; AFNElJ/XWsNc0qWvX7EgIU3j/MEicUmoXe/Yefvx8ayofqlEJrZfGydwGvsWh68PjR5jWo+VkcxGbkpRNrLBu3k=@vger.kernel.org X-Gm-Message-State: AOJu0YxYNnO6KFP5dlFqecr57sGC31/cBYGahftMiD56ZVFr9L7ST0wQ eYTGcaKyXmIYC28CXe3p1yRgF0Hj2pnzmdm3S236OvJ9WRyHW0mboTV66xgyh3NEnA== X-Gm-Gg: Acq92OF8MIIGNhlYPD3bJ00Ct+Ut7cdPzE8HzVfjN3kP9yE5EKvMtnBEVvEZeoAcjeV Nvt/t/N2AzTLKgzoAcIdP7jwSzmHJ/IKw8BOPfMLWtJdgUobuKpIXAM35u3kXqTpiPCwtH4rFeu aohnTQnTd5oHyv4/we0+WzSLXeM+9ctXzXPcvIX5I3+ytowhKUVROETGtIVpl1KgIbifR8Y37c7 pvPvZwEhqEHB3HAIfJiw4jj3RgaV7+oSjNX8Rdwn68h7fUCSmNjvfQwZzy1yKbvPlnWfZQVRgI4 iPKR3iIqw7LBg8f6IhfzdVYBFVz+uICxRqZjX7qppx6GKZyluA5/FfHVrJrsLroFVimL2Px0Z+Q 1caV18OSICSqkLXe+4SpkMPlwRBmNDohPSOhvQAKt7kp9aW4UmtvLNy1ejDh671l9oIyGElmZvs AyFPQkGlbSXuA6gL1jLSEFIb/g6HhMMEn2RIZeLyUS4iGjFJN+gcOwLbfFqN/Ao8vqoboZ9cPKM O6BgqYDH/uqMdEzb32WNJEzY0XH6kwITHk= X-Received: by 2002:a17:90b:3901:b0:367:bb54:8768 with SMTP id 98e67ed59e1d1-368f77c90f0mr1889106a91.4.1778657975026; Wed, 13 May 2026 00:39:35 -0700 (PDT) Received: from ranjankumar.c.googlers.com.com (220.185.124.34.bc.googleusercontent.com. [34.124.185.220]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-368acf6ef8fsm1865760a91.3.2026.05.13.00.39.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 00:39:34 -0700 (PDT) From: Ranjan Kumar To: dmitry.torokhov@gmail.com Cc: bleung@chromium.org, dusonlin@emc.com.tw, bentiss@kernel.org, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, Ranjan Kumar Subject: [PATCH] Input: elan_i2c - prevent division by zero on invalid device parameters Date: Wed, 13 May 2026 07:39:08 +0000 Message-ID: <20260513073908.3326178-1-kumarranja@chromium.org> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The Elan I2C touchpad driver queries the device for its physical dimensions and trace counts to calculate the device resolution and width. However, if the device firmware or device tree provides invalid zero values for x_traces, y_traces, x_mm, or y_mm, it results in a fatal division-by-zero exception leading to a kernel panic during device probe. Add sanity checks to ensure these physical parameters are non-zero before performing the division. If invalid values are detected, log an error and return -EINVAL to gracefully abort the initialization and maintain system stability. Fixes: 6696777c6506 ("Input: add driver for Elan I2C/SMbus touchpad") Fixes: e3a9a1290688 ("Input: elan_i2c - do not query the info if they are provided") Signed-off-by: Ranjan Kumar --- drivers/input/mouse/elan_i2c_core.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c index fee1796da3d0..b5fd63928afd 100644 --- a/drivers/input/mouse/elan_i2c_core.c +++ b/drivers/input/mouse/elan_i2c_core.c @@ -425,6 +425,14 @@ static int elan_query_device_parameters(struct elan_tp_data *data) if (error) return error; } + + if (unlikely(x_traces == 0 || y_traces == 0)) { + dev_err(&client->dev, + "Invalid trace numbers: x=%u, y=%u\n", + x_traces, y_traces); + return -EINVAL; + } + data->width_x = data->max_x / x_traces; data->width_y = data->max_y / y_traces; @@ -440,6 +448,14 @@ static int elan_query_device_parameters(struct elan_tp_data *data) data->x_res = elan_convert_resolution(hw_x_res, data->pattern); data->y_res = elan_convert_resolution(hw_y_res, data->pattern); } else { + + if (unlikely(x_mm == 0 || y_mm == 0)) { + dev_err(&client->dev, + "Invalid physical dimensions: x_mm=%u, y_mm=%u\n", + x_mm, y_mm); + return -EINVAL; + } + data->x_res = (data->max_x + 1) / x_mm; data->y_res = (data->max_y + 1) / y_mm; } -- 2.54.0.563.g4f69b47b94-goog