Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1659887pxy; Mon, 2 Aug 2021 07:16:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw6Mc31CFd3lqi2jgpkdVvFfedAmyfL9NW/gaqZXBFCs4JMBCGlvWNigogMAWDGUTi3zzQr X-Received: by 2002:a6b:b287:: with SMTP id b129mr1491155iof.209.1627913797191; Mon, 02 Aug 2021 07:16:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627913797; cv=none; d=google.com; s=arc-20160816; b=Ei15n6jYrv48bFX4WBdBfyo2vDtfRPa/ws4UNRkgtMmRFcEdxDfFnzwhLPJBDWKGWA 2u6uLiCRB/l6GSHe45L4isk+aq6dlPpbJh6xnYm+pbv39l/isDJ/p99aiw75T3B901nP o8u9x4Qt0i7LJ5bGprjEusxuyq9QOgpn8ZRjyvJIBFJpQlVLzAPT/eCzyxOfVvk45//9 MtLunQTjjw13ITNjD130tRWEaRHDpCCtao7c9vYKCPpuG2EgE5Mt6k/OLlku2isnZ3UP K5IOFDFVRJGX4Sx5pIoh7+or1/EPMMpV+3uEbPvt/pGFYuSnmQs2JzmmjqrO0R/Cd4je B81g== 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=A8vFOJdJ/2kDS8FOSP0VQwTw6KQO8KggBMblW49oz8c=; b=IIImu743dbr4WrMbVV9ueSvjIfccgfA0ayyOLZgDtSufczG01vfrn2R62KHvYZdn7s Y2+MVUOvnSKzuVNKt+MwscvHO1VrWITbNiSM0k0SrzDw/aUHKxnFPFRwU33uxHN5R2VX f/L4eg8vnK1NES3Lzqr0eQQF/+ZDtHVuWrje/cdLhjVqTNYgyzSYLeOG3O6fE5ypiHkl ZbRJKveCN65e0Mmn3zTmwGwT230UmJTYDaNOpa5aa+1GTIAQHK4n/NpLmPuoEd1QVxQ9 r0vNzZLSN9qG2RqJlCIy8IQ7Kb2SvWG40y7TR0tAPWMLiZiLUUPH4TtHEq25V8pBr76I +q8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ZfiugUhI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g14si14584391jat.28.2021.08.02.07.16.21; Mon, 02 Aug 2021 07:16:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ZfiugUhI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S237164AbhHBOOI (ORCPT + 99 others); Mon, 2 Aug 2021 10:14:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:49650 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234770AbhHBOED (ORCPT ); Mon, 2 Aug 2021 10:04:03 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 805526112E; Mon, 2 Aug 2021 13:57:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627912649; bh=2GTZP091eKfU7pZPiLcAbWAP8+o0WKkT2uVkwuBOflY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZfiugUhIRiw0XcYyZk13cabljuu9RqoLzev7rlrtzNf5SfoQTdQ0bZy3OgwRT8kCl HrMQLDe6jUxYhKN7olf4TgjxiGLyIV8jHynDJPFr9ZcjMb5etNFA5gEwvIljCS3cAY Mht2ihEyGpXzg/H8P3ww0tyAHbRZP+I4xxMRiZI8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Pavel Skripkin , Manivannan Sadhasivam , "David S. Miller" , Sasha Levin , syzbot+35a511c72ea7356cdcf3@syzkaller.appspotmail.com Subject: [PATCH 5.13 054/104] net: qrtr: fix memory leaks Date: Mon, 2 Aug 2021 15:44:51 +0200 Message-Id: <20210802134345.791913780@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210802134344.028226640@linuxfoundation.org> References: <20210802134344.028226640@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pavel Skripkin [ Upstream commit 52f3456a96c06760b9bfae460e39596fec7af22e ] Syzbot reported memory leak in qrtr. The problem was in unputted struct sock. qrtr_local_enqueue() function calls qrtr_port_lookup() which takes sock reference if port was found. Then there is the following check: if (!ipc || &ipc->sk == skb->sk) { ... return -ENODEV; } Since we should drop the reference before returning from this function and ipc can be non-NULL inside this if, we should add qrtr_port_put() inside this if. The similar corner case is in qrtr_endpoint_post() as Manivannan reported. In case of sock_queue_rcv_skb() failure we need to put port reference to avoid leaking struct sock pointer. Fixes: e04df98adf7d ("net: qrtr: Remove receive worker") Fixes: bdabad3e363d ("net: Add Qualcomm IPC router") Reported-and-tested-by: syzbot+35a511c72ea7356cdcf3@syzkaller.appspotmail.com Signed-off-by: Pavel Skripkin Reviewed-by: Manivannan Sadhasivam Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/qrtr/qrtr.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c index f2efaa4225f9..67993bcfecde 100644 --- a/net/qrtr/qrtr.c +++ b/net/qrtr/qrtr.c @@ -518,8 +518,10 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) if (!ipc) goto err; - if (sock_queue_rcv_skb(&ipc->sk, skb)) + if (sock_queue_rcv_skb(&ipc->sk, skb)) { + qrtr_port_put(ipc); goto err; + } qrtr_port_put(ipc); } @@ -839,6 +841,8 @@ static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb, ipc = qrtr_port_lookup(to->sq_port); if (!ipc || &ipc->sk == skb->sk) { /* do not send to self */ + if (ipc) + qrtr_port_put(ipc); kfree_skb(skb); return -ENODEV; } -- 2.30.2