Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp2463523imd; Fri, 2 Nov 2018 11:51:21 -0700 (PDT) X-Google-Smtp-Source: AJdET5d7VBiYUgV0UNf9RfqawK6jX2Da7z2iF7Tc5O7RkQCHOhuSMtaBgxo1zNwjEsaVKsKKTeKA X-Received: by 2002:a63:3204:: with SMTP id y4mr11864000pgy.41.1541184681697; Fri, 02 Nov 2018 11:51:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541184681; cv=none; d=google.com; s=arc-20160816; b=b8yUQJCA70yTBR9xypMZc9UnADGkM6fbslYoC58vzCHmRoff0/I1SoGBZIlSBHS6h+ P+yebn6Dz6hpnNWkEuFE1DNyqZtkbBcRIG33x6VzWgMdYhLKw8GcPSaoDYMjPFNRMXt9 gJJvnmkEKI066iC9Yldl9DtqIObHxbjnXHFvkb+xxu/W434DBv/BIv0d2nFW7zsd3Rsd Imv+u3wTn7/Wkkb9AXpDEug2hRSHpMuupzOk9RFfkYZl96O0Nl+tOh80YsvMurbDwDCO imasln1nlFHaFf1SC5wpFVlPczFRbkwMow2T7p94lDYZxWF8DU5esp1KbJ3+4eSi7CDV l7jA== 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=2TFvwMtBmcjoxCTjjvTl/65/imVkvBhgF78jk7M3GT0=; b=MBUdfi7dqJXU3ozcN9CO+Wv4EdqxIRhMIRl6U9iduFwjWEsIs9D6xSito6TqM4z5Ts DCjsLmZD0PZInoLRHcrHEsxYLuL4yS34H62+E7LH4g54Zr3nwQihW9IvctAl/hbjeSwV BDOnxzvGPNLKYSpMV3+rHgk2GyymXdWnZSPK2jtpd0IEyr2n7uE/pUuRwYEPyPdbvNgT l04VjvUCBnvPpn84qWa2MoraG+oO4yRmO/s/VtrNgcPDNb8rYW5cJtX/ANzE6IkVft8f +qPrLqtLdwY/RvHlZBDxHKvKVM1wKukiK1D2IMv/uXCAZnhGTdS6+3PcGe1g3nb2g5yH 5okQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=EiT+PaQr; 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 b13-v6si4219565plm.316.2018.11.02.11.51.06; Fri, 02 Nov 2018 11:51:21 -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=EiT+PaQr; 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 S1730861AbeKCD7A (ORCPT + 99 others); Fri, 2 Nov 2018 23:59:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:54748 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729339AbeKCD67 (ORCPT ); Fri, 2 Nov 2018 23:58:59 -0400 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (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 6B9602082D; Fri, 2 Nov 2018 18:50:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541184644; bh=H6iTkbawh29//Iw19Pmwq7Ry7hm2CHjDn9bsW++S6Pc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EiT+PaQrlOvGc6+kP/tD2VmZGaWLH9Gslo7fG7/3IX2rkbuX74Sizpo/OZYfcI8CD Me0tvZYKH3tFyvnaOd+A22D6SfTD8ktr52RFcBDxhNlIGqdRpPU+ChszOd3O8F4hRk 9pVMaufv1+1UBHwI70xNa1X/Px8zdmEzl7wtaTLk= 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.14 058/143] IB/rxe: put the pool on allocation failure Date: Fri, 2 Nov 2018 19:34:03 +0100 Message-Id: <20181102182901.715058348@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181102182857.064326086@linuxfoundation.org> References: <20181102182857.064326086@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.14-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 3b4916680018..b4a8acc7bb7d 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.c +++ b/drivers/infiniband/sw/rxe/rxe_pool.c @@ -394,23 +394,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