Jason Gunthorpe f6a9d47ae6 RDMA/cma: Execute rdma_cm destruction from a handler properly
When a rdma_cm_id needs to be destroyed after a handler callback fails,
part of the destruction pattern is open coded into each call site.

Unfortunately the blind assignment to state discards important information
needed to do cma_cancel_operation(). This results in active operations
being left running after rdma_destroy_id() completes, and the
use-after-free bugs from KASAN.

Consolidate this entire pattern into destroy_id_handler_unlock() and
manage the locking correctly. The state should be set to
RDMA_CM_DESTROYING under the handler_lock to atomically ensure no futher
handlers are called.

Link: https://lore.kernel.org/r/20200723070707.1771101-5-leon@kernel.org
Reported-by: syzbot+08092148130652a6faae@syzkaller.appspotmail.com
Reported-by: syzbot+a929647172775e335941@syzkaller.appspotmail.com
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2020-07-29 14:10:02 -03:00
..
2020-01-25 15:11:37 -04:00
2020-05-29 16:09:02 -03:00
2020-03-04 14:28:25 -04:00
2020-06-24 16:43:45 -03:00
2020-06-02 20:32:53 -03:00
2019-06-28 21:18:23 -03:00
2018-12-12 07:40:16 -07:00
2020-06-05 14:05:57 -07:00
2018-12-12 07:40:16 -07:00
2020-07-06 14:54:46 -03:00
2020-05-27 16:05:05 -03:00