From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) (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 7B5313909AE for ; Tue, 4 Aug 2026 14:15:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785852941; cv=none; b=DTRqfBR6VeD6G+zSLm+nQhlMoqP5Gfjg5nDNYPLAlEYlHzhKvUummqvyqkqVDsV6ftAstMUeAH4C/WvHpatYnTPx6pcr6wFZsp/3AIHEXUxMynF1uRq8/gszxP4ueXQ/7GCPTkTq2iDgQqeGAjKoDVR707kRXUITExBMb9RIayk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785852941; c=relaxed/simple; bh=tseOFkRH+VkKpLPw9eW+OguB+gLNud5Nib8WI23LXjg=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Gfb5Q+SjGlstrFSIkMxoA7P/958s7EbM+8m4KxtzZdDc19ZFSCIHy7+MX12c9GNYP4IMI+mqjslsWWV9aQb34r788C/DuDfQHbG9bLGF3RpHU1WREAmVDdY8a52cuqNbnKFD4oy/LPRzojVK1Uyrdt9lixmviBl5sFaLUCaRFwM= 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=Vv0Hh89c; arc=none smtp.client-ip=209.85.215.176 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="Vv0Hh89c" Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-ca97d139d8dso2621444a12.2 for ; Tue, 04 Aug 2026 07:15:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785852931; x=1786457731; 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:content-type; bh=pkA8brq9aD3a7UhTDQ51dCKqynsS+dZa04GQD9wvAc4=; b=Vv0Hh89cNQYO/nUQIm9aGhNeLirmizlPEgBmX6wUNfZmsQYTOc8XKTMCeMV3J7aKQR tmXjwB5D48Pz2ujWFzzv1BsXBZanARX0FSVNP3IwV46mMu9Hgxnz0pYxXcPT1fLmC5zl Dge9noHfOzgvuvlODNCW8wb1G/x+f4VHU5xN6I6hAHUUzEkTK8s30Pto4jbeWSkwbK+f UA+Hqz/nQagvYHSoeEqxNfUQUllT0c04aaH3BlfL4a0a692t42yWhRJVE/qovszsWQe2 VAMVbK8k/pIf3QHSAoBxyguKDer956kcbJYIxLubs4QDygjNnwM4ikTc/9nJzwGdJAWz YfAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785852931; x=1786457731; 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:content-type; bh=pkA8brq9aD3a7UhTDQ51dCKqynsS+dZa04GQD9wvAc4=; b=Zv8qigTDtedEPoS0cnFhmFFWwuOBtH2p+fizZWhh9IxIkDdL9t2/hdM8Nri0OB5ZVR 30oA8vzjZo4KECzwZM3evoDXnmS0c0hmvUvMbu/ObKT56Jw4GzkXV59KJARo+R//fqVQ l6nb5WmomYaYfUojllpbJ6zUdevwfgZu3jn78Lo/XZL79bU4wc3tyDGRNJ3FAplL3EF8 YIQ5le3GbPVrRgbdEx3nWvs36VzIx21i7oWzhz3f/1ckeX9h8wa1U0/4zYR8r6vvNKX0 a2D80yx1hTsTlOdPmxsL9Nvf7vlg56V5qXFMatQK6zO1Yo1I801UARb+Y3iAv6xY+zKE 5afg== X-Forwarded-Encrypted: i=1; AHgh+RoMWrn9jc4XB/R3TIbjK/T8+eO1eQwBa+UtTVYqzSO44eMY+jnaZ960FD1sqoJpaFw7U4LnzmMjb5eipg==@vger.kernel.org X-Gm-Message-State: AOJu0YzDOpaAsQfSrnylhTochAA29DjS5Qri1P4nWQQQiekduLSMI2Hw im6700VoQqaAMJ/+uABJvZqsXDwJd4mQtdUIaxM6DLHaFzweu20bVoE= X-Gm-Gg: AR+sD12mdp7p7erZ8UMPBvKQnkV1RIp+szzDZjzSPNWAEazy3UQy61ehBQLTSWXkMj6 y1PgoAVLJiFj1okKWTNrpTLQOFo9Ayh6TfBYl/DCGNcXs8xNrLhYaw21UlY0Q7yhWydgIIqT7kt JFtXdrp23z4n7bPs/okg2W2QK2t3w89nfw1Jyk69k27PRiIIM53cCQGSjiBcG3qpdTTTIj16xFh eYoblFgdwvqR2fqVx95GWzXbxbGSetT8DhyF8JQbkjwk9kcwYKgUxFz93pI98Lc3qCiIhNgQ0cm JXTSlpZNs7eAZumIggZgFtqSpNRHKmGL/EecfhtijvIKUIZ8iZLJRvP4rFlgnyNIyKzYvXVyoc7 5lXo72vZoPuz1iW6WB6gryt1//evSfFllHcr3ZW7UjTaAwsFLucVcFIHS5F+dRNBpUkO0Cs6I09 c5+v6xk8p5dIc3i4GupBkIJE8cNG6TpFGER3TuDdGF9M62zMIKXQhM0QzolA3NO/+ljnYaH+VBO 02HO84LdjEELBxz9izGC0YibLwTalEPETjqto6ZdrcXJaFmQyMyGrd6IXFw5BgpgQKVI0wktDCF N9YrXZ8nvjZUE//aQ8ZuYUiEL1I/bOeLgw== X-Received: by 2002:a05:6a20:6a1e:b0:3c8:e313:8d42 with SMTP id adf61e73a8af0-3c92a77e60fmr14018709637.31.1785852931219; Tue, 04 Aug 2026 07:15:31 -0700 (PDT) Received: from localhost.localdomain ([1.226.165.54]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-cbe396eb7e2sm5056572a12.18.2026.08.04.07.15.27 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 04 Aug 2026 07:15:30 -0700 (PDT) From: Myeonghun Pak To: Dmitry Torokhov Cc: Linus Walleij , Samuel Ortiz , Rabin Vincent , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH] Input: stmpe-keypad - disable keypad on probe failure Date: Tue, 4 Aug 2026 23:15:25 +0900 Message-ID: <20260804141525.39388-1-mhun512@gmail.com> X-Mailer: git-send-email 2.47.1 Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit stmpe_keypad_chip_init() enables the keypad block before programming its registers. If any subsequent register access fails, the function returns without disabling the block. The later IRQ request and input device registration failures have the same problem. Route every failure after a successful stmpe_enable() through a cleanup path so a failed probe does not leave the keypad block enabled. This issue was identified during our ongoing static-analysis research while reviewing kernel code. Fixes: 76f10845318b ("input: Add STMPE keypad driver") Cc: stable@vger.kernel.org Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak --- drivers/input/keyboard/stmpe-keypad.c | 38 ++++++++++++++++++--------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/drivers/input/keyboard/stmpe-keypad.c b/drivers/input/keyboard/stmpe-keypad.c index 0acded4fb9c9c..58a5ce4eaa80b 100644 --- a/drivers/input/keyboard/stmpe-keypad.c +++ b/drivers/input/keyboard/stmpe-keypad.c @@ -280,35 +280,44 @@ static int stmpe_keypad_chip_init(struct stmpe_keypad *keypad) ret = stmpe_keypad_altfunc_init(keypad); if (ret < 0) - return ret; + goto disable_keypad; ret = stmpe_reg_write(stmpe, STMPE_KPC_COL, keypad->cols); if (ret < 0) - return ret; + goto disable_keypad; ret = stmpe_reg_write(stmpe, STMPE_KPC_ROW_LSB, keypad->rows); if (ret < 0) - return ret; + goto disable_keypad; if (variant->max_rows > 8) { ret = stmpe_set_bits(stmpe, STMPE_KPC_ROW_MSB, STMPE_KPC_ROW_MSB_ROWS, keypad->rows >> 8); if (ret < 0) - return ret; + goto disable_keypad; } ret = stmpe_set_bits(stmpe, STMPE_KPC_CTRL_MSB, STMPE_KPC_CTRL_MSB_SCAN_COUNT, keypad->scan_count << 4); if (ret < 0) - return ret; + goto disable_keypad; + + ret = stmpe_set_bits(stmpe, STMPE_KPC_CTRL_LSB, + STMPE_KPC_CTRL_LSB_SCAN | + STMPE_KPC_CTRL_LSB_DEBOUNCE, + STMPE_KPC_CTRL_LSB_SCAN | + (keypad->debounce_ms << 1)); + if (ret < 0) + goto disable_keypad; - return stmpe_set_bits(stmpe, STMPE_KPC_CTRL_LSB, - STMPE_KPC_CTRL_LSB_SCAN | - STMPE_KPC_CTRL_LSB_DEBOUNCE, - STMPE_KPC_CTRL_LSB_SCAN | - (keypad->debounce_ms << 1)); + return 0; + +disable_keypad: + stmpe_disable(stmpe, STMPE_BLOCK_KEYPAD); + + return ret; } static void stmpe_keypad_fill_used_pins(struct stmpe_keypad *keypad, @@ -389,19 +398,24 @@ static int stmpe_keypad_probe(struct platform_device *pdev) IRQF_ONESHOT, "stmpe-keypad", keypad); if (error) { dev_err(&pdev->dev, "unable to get irq: %d\n", error); - return error; + goto disable_keypad; } error = input_register_device(input); if (error) { dev_err(&pdev->dev, "unable to register input device: %d\n", error); - return error; + goto disable_keypad; } platform_set_drvdata(pdev, keypad); return 0; + +disable_keypad: + stmpe_disable(stmpe, STMPE_BLOCK_KEYPAD); + + return error; } static void stmpe_keypad_remove(struct platform_device *pdev) -- 2.47.1