Patch "IB/srp: Fix srp_create_target() error handling" has been added to the 4.6-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
IB/srp: Fix srp_create_target() error handling
to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ib-srp-fix-srp_create_target-error-handling.patch
and it can be found in the queue-4.6 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f83b2561a6d4ff12959660ad597580097b744941Mon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Thu, 12 May 2016 10:48:48 -0700
Subject: IB/srp: Fix srp_create_target() error handling
From: Bart Van Assche <[email protected]>
commit f83b2561a6d4ff12959660ad597580097b744941 upstream.
Avoid that the following kernel oops occurs if memory pool allocation fails:
BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<ffffffffa048d0a0>] ib_drain_rq+0x0/0x20 [ib_core] Call Trace: [<ffffffffa04af386>] srp_create_target+0xca6/0x13a9 [ib_srp] [<ffffffff813cc863>] dev_attr_store+0x13/0x20 [<ffffffff81214b50>] sysfs_kf_write+0x40/0x50 [<ffffffff81213f1c>] kernfs_fop_write+0x13c/0x180 [<ffffffff81197683>] __vfs_write+0x23/0xf0 [<ffffffff81198744>] vfs_write+0xa4/0x1a0 [<ffffffff81199a44>] SyS_write+0x44/0xa0 [<ffffffff8159e3e9>] entry_SYSCALL_64_fastpath+0x1c/0xac
--- drivers/infiniband/ulp/srp/ib_srp.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/infiniband/ulp/srp/ib_srp.c +7 -7
@@ -448,16 +448,16 @@ static struct srp_fr_pool *srp_alloc_fr_/** * srp_destroy_qp() - destroy an RDMA queue pair -* @ch: SRP RDMA channel. +* @qp: RDMA queue pair. * * Drain the qp before destroying it. This avoids that the receive * completion handler can access the queue pair while it is * being destroyed. */ -static void srp_destroy_qp (struct srp_rdma_ch *ch) +static void srp_destroy_qp (struct ib_qp *qp) { -ib_drain_rq (ch->qp); -ib_destroy_qp (ch->qp); +ib_drain_rq (qp); +ib_destroy_qp (qp); }static int srp_create_ch_ib (struct srp_rdma_ch *ch)
@@ -530,7 +530,7 @@ static int srp_create_ch_ib(struct srp_r }if (ch->qp) -srp_destroy_qp (ch); +srp_destroy_qp (ch->qp);if (ch->recv_cq)ib_free_cq (ch->recv_cq);if (ch->send_cq)
@@ -554,7 +554,7 @@ static int srp_create_ch_ib(struct srp_rreturn 0 ; err_qp: -srp_destroy_qp (ch); +srp_destroy_qp (qp); err_send_cq:ib_free_cq (send_cq);
@@ -597,7 +597,7 @@ static void srp_free_ch_ib(struct srp_taib_destroy_fmr_pool (ch->fmr_pool); } -srp_destroy_qp (ch); +srp_destroy_qp (ch->qp);ib_free_cq (ch->send_cq);ib_free_cq (ch->recv_cq);
Patches currently in stable-queue which might be from [email protected] are
queue-4.6/ib-srp-fix-a-debug-kernel-crash.patch queue-4.6/ib-srp-fix-srp_create_target-error-handling.patch