Received: by 2002:ac0:aa62:0:0:0:0:0 with SMTP id w31-v6csp1965760ima; Thu, 25 Oct 2018 07:40:57 -0700 (PDT) X-Google-Smtp-Source: AJdET5cVuuxKwfvLEQW2myYg2If9RrBza7BapxovtbubGCQnPYXrWNfruleCM7P+saGwL7p8qBZb X-Received: by 2002:a63:2f86:: with SMTP id v128mr1659555pgv.407.1540478457429; Thu, 25 Oct 2018 07:40:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1540478457; cv=none; d=google.com; s=arc-20160816; b=Yvs2WKVKvinjanL9oFqEu5daITZNMbZ5iTg3SRqql9DzsuzanjYfvfqD2o9aHecpkL pPdkVyuvyRiRKMoiU6IIx3S88Do5YRshHeT1iW2lNtLokJTmLfG8CqESKlWbSpJ5l6rk JXLru9wBVQKa60fSGdY3yOkOM1kXjj6C0UpWslydQHAqp0OmlpbX6OXXw8i5ApDVYcmW hc8Zub9YyQ8O8rTxVXZLiV6en4UX13O6CIQtC6+4AA+LJC6iTrCZKhigT3UKWsMdEe6a gEL1xdrdsynADtGqcTw12erJHgN9LslB8mBH4h0dNof8bBR793/D6rRBDIogqhEsPZhy LrdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=JmBz1IPGJ/+65alqN+g5qGKUBbf92EhmGIUXI2EpbYo=; b=GfBwz+vAVcI5aPm2/SLyj3aokAcNHtCloHAVIyPEwgmfJ/Kr5LEPZNbikS9+5gobZ2 JvRKwNssm6E8IFKRx0OGg9UHkIslYQj9JQHUOFmPO7G440Xezsz0LD5HrVRT1ec5s1fU VPFWWS80yE3cq41xiT3qk0X/l0kYD4ip+HBysniVnWmdQn7HXQhg6jCZQoNfe/rBDIy8 Z5XftwcVJgBt2brH6Z92K58FgNMblJbl9wmoBOEu4sreTd8lk1jHW0UhUw/Lt+WwfTit EAn/bX4a66+MNHEzGxRTWmmX0x676cEg591HpQcGb24y3To6INXMGoJ2gYKz7yaz1vBr LO4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IKyQrSG5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r3-v6si8501040pgn.313.2018.10.25.07.40.40; Thu, 25 Oct 2018 07:40:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IKyQrSG5; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728025AbeJYXMB (ORCPT + 99 others); Thu, 25 Oct 2018 19:12:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:57882 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728220AbeJYWs5 (ORCPT ); Thu, 25 Oct 2018 18:48:57 -0400 Received: from sasha-vm.mshome.net (unknown [167.98.65.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5427920870; Thu, 25 Oct 2018 14:16:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1540476961; bh=rIh+Fb3L0Luoh3RFmHPXwXa1uk8WTYD8meYo3M9E/wA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IKyQrSG5y60gLXWTiBm0EVqzUYJzuwu8kkkpaUC8WMRvurCCYFxmBIXSeH83W0xbz pNgQDS3iRyCkzQzlEO/Vokadbgun2vEQ8hEus60kuahZw1AkBDphrdha7XUPZjNG1X NV52SolabS625PzuAVF2C9+3ED/JJD2/xmE2zrHI= From: Sasha Levin To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Doug Ledford , Sasha Levin Subject: [PATCH AUTOSEL 4.9 66/98] IB/rxe: put the pool on allocation failure Date: Thu, 25 Oct 2018 10:13:51 -0400 Message-Id: <20181025141423.213774-66-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181025141423.213774-1-sashal@kernel.org> References: <20181025141423.213774-1-sashal@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Doug Ledford [ Upstream commit 6b9f8970cd30929cb6b372fa44fa66da9e59c650 ] If the allocation of elem fails, it is not sufficient to simply check for NULL and return. We need to also put our reference on the pool or else we will leave the pool with a permanent ref count and we will never be able to free it. Fixes: 4831ca9e4a8e ("IB/rxe: check for allocation failure on elem") Suggested-by: Leon Romanovsky Signed-off-by: Doug Ledford Signed-off-by: Sasha Levin --- drivers/infiniband/sw/rxe/rxe_pool.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c index 1c4e5b2e6835..527ca662da69 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.c +++ b/drivers/infiniband/sw/rxe/rxe_pool.c @@ -402,23 +402,25 @@ void *rxe_alloc(struct rxe_pool *pool) kref_get(&pool->rxe->ref_cnt); - if (atomic_inc_return(&pool->num_elem) > pool->max_elem) { - atomic_dec(&pool->num_elem); - rxe_dev_put(pool->rxe); - rxe_pool_put(pool); - return NULL; - } + if (atomic_inc_return(&pool->num_elem) > pool->max_elem) + goto out_put_pool; elem = kmem_cache_zalloc(pool_cache(pool), (pool->flags & RXE_POOL_ATOMIC) ? GFP_ATOMIC : GFP_KERNEL); if (!elem) - return NULL; + goto out_put_pool; elem->pool = pool; kref_init(&elem->ref_cnt); return elem; + +out_put_pool: + atomic_dec(&pool->num_elem); + rxe_dev_put(pool->rxe); + rxe_pool_put(pool); + return NULL; } void rxe_elem_release(struct kref *kref) -- 2.17.1