Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp3021093rwe; Mon, 29 Aug 2022 04:41:55 -0700 (PDT) X-Google-Smtp-Source: AA6agR4jqtbVmvNEaQE05LtFviMdUdWYO1OqKwqLVWD3pCCjC5wI8v0juwfJqLkztDUS2V33LoQp X-Received: by 2002:a17:902:ce0e:b0:172:69cc:60aa with SMTP id k14-20020a170902ce0e00b0017269cc60aamr15664282plg.31.1661773315542; Mon, 29 Aug 2022 04:41:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661773315; cv=none; d=google.com; s=arc-20160816; b=XTJygUocDETD8ekHqEPN9PjTUCTB6EJPZF89HnrtU8PGNFa+V9krVqlktm+l8bC7OP rLZXvQkWAkA9X44OdMWKyEYHoqZSmvK9wKW8hXlCSZofxPmdCxPo9yDs5Iv4NvFXb6+L fGu32TIricP+Nj4D0u5QV/3YUcxBMpHq+h18SeXaibaBoSjdfxlo1kiuLvAG4qnKDSW8 t1lIXwk4oBQiS0vmCWZDYWF6B4/jaLmA5UQRdTz3lwDyWVkN7KAdXzrMHhC/kG/6SxGD j+Vt+WGNmfO85Y4NQ2i5Ve8cLSWbgsL8UoxBAex9KTzRHvX6ACf9QBarau4aVgMDw1m7 qvNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=pNQ4t3DtbLXdca/AhvolZ2qxPKgGj61L/0Kqy2cugU8=; b=DGY37D9J7vCnSn8Q3s/0XR/Y3ZM5g+2oCq1uUHR53y9lWmt1ZRRxpm6dRoojKsEHR/ M5OYQsiw2ePBw5XQUasQIbN3TdFeEe85cRl8UfeoSkTWfzgAoldTOBfjvnHKEru5O4W6 fkAyPq+ZUfpxnzQOaBeHVCjvwtWU/Vddm/W03e3KgoWmlM0cQ9+6S0eHyvoh0qGdWre0 lFLSjIQslBueOjspqUxl8KsniwAePM08Gps9puRltEzyAeEZskIGVN9BxuGcQvBoegF5 uyIJI59DAGQG0cqlHDefXw/sMd4UblafiH2rP4PN/moI4EiMdkPcj3NuxFq8Iv9sGfmZ jWlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=KV8KcNuo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n17-20020a170902f61100b0017293d9ea92si9019075plg.41.2022.08.29.04.41.44; Mon, 29 Aug 2022 04:41:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=KV8KcNuo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230313AbiH2LFw (ORCPT + 99 others); Mon, 29 Aug 2022 07:05:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230266AbiH2LFI (ORCPT ); Mon, 29 Aug 2022 07:05:08 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69BC258B6F; Mon, 29 Aug 2022 04:03:27 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 8C0C4B80EF2; Mon, 29 Aug 2022 11:02:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 04276C433D6; Mon, 29 Aug 2022 11:02:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1661770973; bh=7BeU2rylXDRPJpSm+V25tjT3MsumeGzAtWSDr6FjKpA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KV8KcNuoiuPiQT8/778OQHKFDtUnYZYKb7vAVi5KKmhktmnWmmpHTyVnrRdau58dS Ia0f6FMiQB5xVsJzTCygB3d35VVxGjoI0nEzQ+P6BpGr1BVC2yVorF6lkbgL/jVIH3 6ZbitptxofxzLcgELjruVLiMXv3sDwCqtQa5NrIk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Duoming Zhou , "David S. Miller" , Sasha Levin Subject: [PATCH 5.15 041/136] nfc: pn533: Fix use-after-free bugs caused by pn532_cmd_timeout Date: Mon, 29 Aug 2022 12:58:28 +0200 Message-Id: <20220829105806.289956441@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220829105804.609007228@linuxfoundation.org> References: <20220829105804.609007228@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Duoming Zhou [ Upstream commit f1e941dbf80a9b8bab0bffbc4cbe41cc7f4c6fb6 ] When the pn532 uart device is detaching, the pn532_uart_remove() is called. But there are no functions in pn532_uart_remove() that could delete the cmd_timeout timer, which will cause use-after-free bugs. The process is shown below: (thread 1) | (thread 2) | pn532_uart_send_frame pn532_uart_remove | mod_timer(&pn532->cmd_timeout,...) ... | (wait a time) kfree(pn532) //FREE | pn532_cmd_timeout | pn532_uart_send_frame | pn532->... //USE This patch adds del_timer_sync() in pn532_uart_remove() in order to prevent the use-after-free bugs. What's more, the pn53x_unregister_nfc() is well synchronized, it sets nfc_dev->shutting_down to true and there are no syscalls could restart the cmd_timeout timer. Fixes: c656aa4c27b1 ("nfc: pn533: add UART phy driver") Signed-off-by: Duoming Zhou Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/nfc/pn533/uart.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/nfc/pn533/uart.c b/drivers/nfc/pn533/uart.c index 7bdaf82630706..7ad98973648cc 100644 --- a/drivers/nfc/pn533/uart.c +++ b/drivers/nfc/pn533/uart.c @@ -310,6 +310,7 @@ static void pn532_uart_remove(struct serdev_device *serdev) pn53x_unregister_nfc(pn532->priv); serdev_device_close(serdev); pn53x_common_clean(pn532->priv); + del_timer_sync(&pn532->cmd_timeout); kfree_skb(pn532->recv_skb); kfree(pn532); } -- 2.35.1