From: Jason Gunthorpe <jgg@nvidia.com>
To: Bob Pearson <rpearsonhpe@gmail.com>
Cc: zyjzyj2000@gmail.com, linux-rdma@vger.kernel.org
Subject: Re: [PATCH for-next v4 10/13] RDMA/rxe: Prevent taking references to dead objects
Date: Fri, 19 Nov 2021 13:45:37 -0400 [thread overview]
Message-ID: <20211119174537.GC2988708@nvidia.com> (raw)
In-Reply-To: <20211103050241.61293-11-rpearsonhpe@gmail.com>
On Wed, Nov 03, 2021 at 12:02:39AM -0500, Bob Pearson wrote:
> Currently rxe_add_ref() calls kref_get() which increments the
> reference count even if the object has already been released.
> Change this to refcount_inc_not_zero() which will only succeed
> if the current ref count is larger than zero. This change exposes
> some reference counting errors which will be fixed in the following
> patches.
>
> Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
> drivers/infiniband/sw/rxe/rxe_pool.h | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_pool.h b/drivers/infiniband/sw/rxe/rxe_pool.h
> index 6cd2366d5407..46f2abc359f3 100644
> +++ b/drivers/infiniband/sw/rxe/rxe_pool.h
> @@ -7,6 +7,8 @@
> #ifndef RXE_POOL_H
> #define RXE_POOL_H
>
> +#include <linux/refcount.h>
> +
> enum rxe_pool_flags {
> RXE_POOL_AUTO_INDEX = BIT(1),
> RXE_POOL_EXT_INDEX = BIT(2),
> @@ -70,9 +72,15 @@ int __rxe_pool_add(struct rxe_pool *pool, struct rxe_pool_elem *elem);
>
> void *rxe_pool_get_index(struct rxe_pool *pool, unsigned long index);
>
> -#define rxe_add_ref(obj) kref_get(&(obj)->elem.ref_cnt)
> +static inline int __rxe_add_ref(struct rxe_pool_elem *elem)
> +{
> + return refcount_inc_not_zero(&elem->ref_cnt.refcount);
> +}
Don't reach inside a kref to touch the
refcount. kref_get_unless_zero() is the api for krefs
I'm not sure how any of this works, ie rxe_create_qp() stuffs a core
allocated object into the pool, and various places do refcounting on
it
But then rxe_destroy_qp doesn't seem to do anything with the
refcounts, it just blindly lets things go to kfree in the core.
Seems really confused..
Jason
next prev parent reply other threads:[~2021-11-19 17:45 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-03 5:02 [PATCH for-next v4 00/13] Correct race conditions in rdma_rxe Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 01/13] RDMA/rxe: Replace irqsave locks with bh locks Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 02/13] RDMA/rxe: Cleanup rxe_pool_entry Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 03/13] RDMA/rxe: Copy setup parameters into rxe_pool Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 04/13] RDMA/rxe: Save object pointer in pool element Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 05/13] RDMA/rxe: Replace RB tree by xarray for indexes Bob Pearson
2021-11-19 17:38 ` Jason Gunthorpe
2021-11-03 5:02 ` [PATCH for-next v4 06/13] RDMA/rxe: Remove #include "rxe_loc.h" from rxe_pool.c Bob Pearson
2021-11-03 5:02 ` [PATCH v4 for-next 07/13] RDMA/rxe: Remove some #defines from rxe_pool.h Bob Pearson
2021-11-03 5:02 ` [PATCH v4 for-next 08/13] RDMA/rxe: Reverse the sense of RXE_POOL_NO_ALLOC Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 09/13] RDMA/rxe: Replaced keyed rxe objects by indexed objects Bob Pearson
2021-11-19 17:41 ` Jason Gunthorpe
2021-11-30 19:35 ` Bob Pearson
2021-12-02 7:14 ` Christoph Lameter
2021-11-03 5:02 ` [PATCH for-next v4 10/13] RDMA/rxe: Prevent taking references to dead objects Bob Pearson
2021-11-19 17:45 ` Jason Gunthorpe [this message]
2021-11-30 20:05 ` Bob Pearson
2021-12-01 13:55 ` Jason Gunthorpe
2021-11-03 5:02 ` [PATCH for-next v4 11/13] RDMA/rxe: Fix ref error in rxe_av.c Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 12/13] RDMA/rxe: Replace mr by rkey in responder resources Bob Pearson
2021-11-03 5:02 ` [PATCH for-next v4 13/13] RDMA/rxe: Protect against race between get_index and drop_ref Bob Pearson
2021-11-19 17:46 ` Jason Gunthorpe
2021-11-19 17:59 ` [PATCH for-next v4 00/13] Correct race conditions in rdma_rxe Jason Gunthorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211119174537.GC2988708@nvidia.com \
--to=jgg@nvidia.com \
--cc=linux-rdma@vger.kernel.org \
--cc=rpearsonhpe@gmail.com \
--cc=zyjzyj2000@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.