linux_dsm_epyc7002/drivers/infiniband/hw/mthca
Roland Dreier a3285aa4ee IB/mthca: Fix race in reference counting
Fix races in in destroying various objects.  If a destroy routine
waits for an object to become free by doing

	wait_event(&obj->wait, !atomic_read(&obj->refcount));
	/* now clean up and destroy the object */

and another place drops a reference to the object by doing

	if (atomic_dec_and_test(&obj->refcount))
		wake_up(&obj->wait);

then this is susceptible to a race where the wait_event() and final
freeing of the object occur between the atomic_dec_and_test() and the
wake_up().  And this is a use-after-free, since wake_up() will be
called on part of the already-freed object.

Fix this in mthca by replacing the atomic_t refcounts with plain old
integers protected by a spinlock.  This makes it possible to do the
decrement of the reference count and the wake_up() so that it appears
as a single atomic operation to the code waiting on the wait queue.

While touching this code, also simplify mthca_cq_clean(): the CQ being
cleaned cannot go away, because it still has a QP attached to it.  So
there's no reason to be paranoid and look up the CQ by number; it's
perfectly safe to use the pointer that the callers already have.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
2006-05-09 10:50:29 -07:00
..
Kconfig IB/mthca: Always build debugging code unless CONFIG_EMBEDDED=y 2006-04-02 14:39:20 -07:00
Makefile IB/mthca: Always build debugging code unless CONFIG_EMBEDDED=y 2006-04-02 14:39:20 -07:00
mthca_allocator.c [PATCH] IB/mthca: Factor out common queue alloc code 2005-08-26 20:37:37 -07:00
mthca_av.c IB: simplify static rate encoding 2006-04-10 09:43:47 -07:00
mthca_catas.c Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband 2005-11-10 13:27:06 -08:00
mthca_cmd.c IB: simplify static rate encoding 2006-04-10 09:43:47 -07:00
mthca_cmd.h IB: simplify static rate encoding 2006-04-10 09:43:47 -07:00
mthca_config_reg.h [PATCH] IB: Add copyright notices 2005-08-26 20:37:35 -07:00
mthca_cq.c IB/mthca: Fix race in reference counting 2006-05-09 10:50:29 -07:00
mthca_dev.h IB/mthca: Fix race in reference counting 2006-05-09 10:50:29 -07:00
mthca_doorbell.h [PATCH] IB: sparse endianness cleanup 2005-08-26 20:37:35 -07:00
mthca_eq.c IB/mthca: Fix section mismatch problems 2006-03-29 09:36:46 -08:00
mthca_mad.c IB/mthca: make a function static 2006-04-19 11:40:12 -07:00
mthca_main.c IB/mthca: Fix max_srq_sge returned by ib_query_device for Tavor devices 2006-04-12 11:42:30 -07:00
mthca_mcg.c IB/mthca: Fix section mismatch problems 2006-03-29 09:36:46 -08:00
mthca_memfree.c IB/mthca: Use an enum for HCA page size 2006-03-20 10:08:19 -08:00
mthca_memfree.h IB/mthca: Use an enum for HCA page size 2006-03-20 10:08:19 -08:00
mthca_mr.c IB/mthca: Fix section mismatch problems 2006-03-29 09:36:46 -08:00
mthca_pd.c IB/mthca: Fix section mismatch problems 2006-03-29 09:36:46 -08:00
mthca_profile.c IB/mthca: Optimize large messages on Sinai HCAs 2006-03-20 10:08:22 -08:00
mthca_profile.h [PATCH] IB/mthca: Add SRQ implementation 2005-08-26 20:37:37 -07:00
mthca_provider.c IB/mthca: Fix offset in query_gid method 2006-05-01 10:40:23 -07:00
mthca_provider.h IB/mthca: Fix race in reference counting 2006-05-09 10:50:29 -07:00
mthca_qp.c IB/mthca: Fix race in reference counting 2006-05-09 10:50:29 -07:00
mthca_reset.c [PATCH] fix missing includes 2005-10-30 17:37:32 -08:00
mthca_srq.c IB/mthca: Fix race in reference counting 2006-05-09 10:50:29 -07:00
mthca_uar.c [PATCH] fix missing includes 2005-10-30 17:37:32 -08:00
mthca_user.h IB/mthca: Add device-specific support for resizing CQs 2006-03-20 10:08:08 -08:00
mthca_wqe.h IB/mthca: fix posting of send lists of length >= 255 on mem-free HCAs 2005-11-29 11:33:46 -08:00