From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8AD1AC11F67 for ; Tue, 6 Jul 2021 11:25:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7340D61EB1 for ; Tue, 6 Jul 2021 11:25:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234645AbhGFL2R (ORCPT ); Tue, 6 Jul 2021 07:28:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:56058 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233772AbhGFLWk (ORCPT ); Tue, 6 Jul 2021 07:22:40 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A82E561CCE; Tue, 6 Jul 2021 11:17:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1625570279; bh=iDdTHi8fF05/l89Ec0k1cfTqdGzT83J5qDlWvN6L4fI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=e8F6RTuywiQGJSC2XwYO1+sKpMx9higM+x+gK1mOeaVJ2c+4EvaaPnE+ErBiv7KX+ WbcWaeYE6L2ZLKwaWqWY4oyTB54gDUyzqYR58AaDz/4PZD6nKRvozEz8fRWKvzwANE rpFyg74fRSTY/hogYOGykM9ARlZLTYuPz41P0sm4A/R65ItUQe4naIOtjMGtxCTL6X uxr20t8PS0dvaoyhj1gg3CqHhv0ossfHsmG+GQmLngM/jwHA+Img7iPQFonWJg/mKO FVn4rFtomKN2mOZ3ArqPRY5p5YIqvkfFGFC+6FFULOF0I3Sy7EMWOJWsZxvk6T+57E vJzUaNIIvQPbw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Thadeu Lima de Souza Cascardo , Marcel Holtmann , Sasha Levin , netdev@vger.kernel.org, linux-bluetooth@vger.kernel.org Subject: [PATCH AUTOSEL 5.13 171/189] Bluetooth: cmtp: fix file refcount when cmtp_attach_device fails Date: Tue, 6 Jul 2021 07:13:51 -0400 Message-Id: <20210706111409.2058071-171-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210706111409.2058071-1-sashal@kernel.org> References: <20210706111409.2058071-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Thadeu Lima de Souza Cascardo [ Upstream commit 3cfdf8fcaafa62a4123f92eb0f4a72650da3a479 ] When cmtp_attach_device fails, cmtp_add_connection returns the error value which leads to the caller to doing fput through sockfd_put. But cmtp_session kthread, which is stopped in this path will also call fput, leading to a potential refcount underflow or a use-after-free. Add a refcount before we signal the kthread to stop. The kthread will try to grab the cmtp_session_sem mutex before doing the fput, which is held when get_file is called, so there should be no races there. Reported-by: Ryota Shiga Signed-off-by: Thadeu Lima de Souza Cascardo Signed-off-by: Marcel Holtmann Signed-off-by: Sasha Levin --- net/bluetooth/cmtp/core.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c index 07cfa3249f83..0a2d78e811cf 100644 --- a/net/bluetooth/cmtp/core.c +++ b/net/bluetooth/cmtp/core.c @@ -392,6 +392,11 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock) if (!(session->flags & BIT(CMTP_LOOPBACK))) { err = cmtp_attach_device(session); if (err < 0) { + /* Caller will call fput in case of failure, and so + * will cmtp_session kthread. + */ + get_file(session->sock->file); + atomic_inc(&session->terminate); wake_up_interruptible(sk_sleep(session->sock->sk)); up_write(&cmtp_session_sem); -- 2.30.2