Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp28060imu; Thu, 8 Nov 2018 14:09:21 -0800 (PST) X-Google-Smtp-Source: AJdET5f7WKvqQbMjhDI+ig/KMnFpT5D31IYyaSiSt+XMH1QnHZxRtNAIhNR+TZFNSE2/hhkhUUD9 X-Received: by 2002:a65:4b82:: with SMTP id t2mr5294443pgq.189.1541714961322; Thu, 08 Nov 2018 14:09:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541714961; cv=none; d=google.com; s=arc-20160816; b=oM+8r2NldVeCm+uxi0i3fBvZZG53l+2tnzFLHdyK8EhoYB5dEFIvLdYrMvL2CsOLG2 8SXxdOtlQD9mWhwZKLDihAK7a98gV3yA7lmF/NJQhGHJonuwqulbUigCUuAZKvdTunRS vq7huJSeSR0UCqzL7io/FFJQV0CFNzhUBX4OZeV4Fc9SNpP3Kck+Cnci3Glu3ZXGjfEb 9nD651A7oa853Uacr2PcdJagsKQBt99PAib7ksqpm0blvuew2+1DrI5KMF68d8NHvML6 vo/fFmc1dNcUbuxeQDTKb/+LVY2Hjp9vs56A4bHE2CxfgOJFGlolLb0ZLPPWWfR77LA5 qWiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=kFnZAUCM6ayjLYcoyDLLrdT0yCvprJSiuOnVUzB1Itg=; b=0Ctsfh0VitWSOsI7Ry4l2FVvrB3yqT9JGp+7cTN+gTpZWiWc/kPiBrxFw/s+6qj5pJ GW+NMtT3AF26DuIoynIoOi8FCzxarnuRn+ez7UKr36cjkckCLQKDBfKwxG3dZlU8gN4F cLItr9ROWHFVdtgg2+xGdru2Xsd3Soxu6ZgFaGliUOT87xTQMW/KBex8UNrR+BF+1zJL pku7gVgL3Nne9q+w55t+PhDQsBjfX2r1IvtI+P5edtM63bUTcKajSXet+v0Z5oJn1DIU 72dqLImeSs3fHRvbQaMnrAwmlCXHw/lgqPaC8FHxhHFbxivawHhkrpTc/eyti1sqG6E2 zhdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HLvzvpe+; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t64-v6si5964606pfd.58.2018.11.08.14.09.05; Thu, 08 Nov 2018 14:09:21 -0800 (PST) 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=HLvzvpe+; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731737AbeKIHnG (ORCPT + 99 others); Fri, 9 Nov 2018 02:43:06 -0500 Received: from mail.kernel.org ([198.145.29.99]:35238 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731692AbeKIHnE (ORCPT ); Fri, 9 Nov 2018 02:43:04 -0500 Received: from localhost (unknown [208.72.13.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 993E8208A3; Thu, 8 Nov 2018 22:05:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541714734; bh=oTIhF7gUkwxoaxZuNSIa2z1UOsjElZinfUYebwnOmUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HLvzvpe+Xe1c5xXpQjU603GUDxBNSsq5872egL/Pz3cnSeXEdVsTwn7nRfdzX26aA hJ2Rja/5iLzXmkQe4yoXfCfR3IgkPp7q1OoeKzabraUoERb7x3X1sOTKtuab6PVq3u BzisuRojDtqPrdWcYvncC5HTjFyXGqgxDPeQn/BY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Leon Romanovsky , Doug Ledford , Sasha Levin Subject: [PATCH 4.9 095/171] IB/rxe: put the pool on allocation failure Date: Thu, 8 Nov 2018 13:51:05 -0800 Message-Id: <20181108215134.368468396@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181108215127.257643509@linuxfoundation.org> References: <20181108215127.257643509@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ [ 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