From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 E26DC41C2FE for ; Tue, 4 Aug 2026 14:15:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785852945; cv=none; b=EJoDTMfIbq322C1UgiEw//jfLgeI1ojAxavCvf3BgNgIe7GzxnGIbSuWoF/n0eea4PRkhPVyt0c6xBUMIbLfiLSqlpStwFajZ+4QssgIvI/TLk9S1NplThsixY/3oF47Bj/9TTaX5+K+oFN65kevcGYn4R6408zbvIJ+rCiAH98= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785852945; c=relaxed/simple; bh=tseOFkRH+VkKpLPw9eW+OguB+gLNud5Nib8WI23LXjg=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=NYQnJBcLFd9a4PpzwdG3UQN7xQBVd9iT9e4UJdjOHbalc+o6HdvX83iJth73bw4vr1hk4Cil2M0/7ecKP4bGqM0uvZexc/Cav+KJLQlYsy+eGM5REkbkLMH92c4Jm2zn4y4Bi3pWFZZeNgjYNEqjn9iSOyhRbP1DCHdkyrGaUNE= 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.177 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-f177.google.com with SMTP id 41be03b00d2f7-c9aea40d799so2486584a12.0 for ; Tue, 04 Aug 2026 07:15:38 -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=SefAd8pVPsPPrlhlSr8IeAjLUJ+pLkG5hCLpGP54XQ5D2ez7jHkUjFq9p4CAjsoL0a 2430pqBTbBrVrFXwilzAOLg5eyYNF30OStNkxEOhK+cjxIzltflEojBQzbyCoAJuEJqu vr53YHomyXy2tlHJCzt+rJal8yIw5vDJD1/yMzm6ckbFOdD2zHOiM22GLT84rlTpIXPr w7foEoy8imZTa9+ip3Gu83VN5L+s0r9g5QuyfADCaj5oqGLrk6cg44fEypcfbImSAy4K Coz4mx9X/7fGPO6PJ3Gb2uMFcxrTS9O35t5QI3tGiANHfXFwdq+ZDU8VHwn2Y8MtFg71 bu8Q== X-Forwarded-Encrypted: i=1; AHgh+RqpF6++OHmhhzYGF1dkbQexnooxspo3rfN0obma2zJD6D5LEBfvxPdOEnZjqKmedFPksxwh0aZDX2UH/lI=@vger.kernel.org X-Gm-Message-State: AOJu0YyNkrU+/vPt4mhY3ZB04gaytcfeDQuUi8rPtYo8jyjxYxz2V5Z5 9NcLXVVtWNBubrfJ4ch/CaAXP/acKRhDx/EJimqFlBoDTEerUeZq0v0= X-Gm-Gg: AR+sD12kMxP9cWQwZw0vQgeBa31pMA0E6pDsxNnyjun07aP3BaYqQSHQUCgcX5+d2ZT 5PbaHQkUlV+XVNodwFij2AB8sEnNziw98hiaS0vGiPyn44dTf7RnfDlv9YN3vhjxc8kbfQradKK BrjOXg4ZITNJZO8UTC4G7yJKlBe0s2o+UqVg6YjG/oPOnLy8KjXb1/t3t8YCsxSrjp0nFJ8rMPS HDihDJX4mWASpGJnQ4PWJfOMKHkKiuf++o4HCww8ipA9TgnAapGN5rpo4SXQXaOyFHIe+uk+vul zz16cD0CSnRVhaP3U1xlsezRRoX7r/NZOMokyTVIMnCzjJzMnPFnB8BxSfaPbIcQYD8weAgR9Wv qBh/1cwn8p/y7GZ4tUGZ9Wku0XNMY8M5/J6EZ1rJ/baHOBx7CRn8uFozDlb3TgrOZkjI8PFvsR3 EdPJQo86ZefSPk66al6l2YosUn4kQamYbHVvEZTiiwY5HPuLOFqabrQKPGRdTMmJb4978ZixYIN sa0C0n7dkzBtdSNWdLJFrPU6+OtwK2Kt0K+dlgcBTDH/UKQ1KVfYy3UO/1RN0HHKMvgoJ+a9DZW lTOTYKB1yPbPlFkhLbLp1hCHwM3q8MMfqg== 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-kernel@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