FAILED: patch "[PATCH] IB/srpt: Fix an out-of-bounds stack access in" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
2a78cb4db487372152bed2055c038f9634d595e8Mon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Thu, 1 Mar 2018 14:00:30 -0800
Subject: [PATCH] IB/srpt: Fix an out-of-bounds stack access in
srpt_zerolength_write()
Avoid triggering an out-of-bounds stack access by changing the type of 'wr' from ib_send_wr into ib_rdma_wr.
This patch fixes the following KASAN bug report:
BUG: KASAN: stack-out-of-bounds in rxe_post_send+0x7a9/0x9a0 [rdma_rxe] Read of size 8 at addr ffff880068197a48 by task kworker/2:1/44 Workqueue: ib_cm cm_work_handler [ib_cm] Call Trace: dump_stack+0x8e/0xcd print_address_description+0x6f/0x280 kasan_report+0x25a/0x380 __asan_load8+0x54/0x90 rxe_post_send+0x7a9/0x9a0 [rdma_rxe] srpt_zerolength_write+0xf0/0x180 [ib_srpt] srpt_cm_rtu_recv+0x68/0x110 [ib_srpt] srpt_rdma_cm_handler+0xbb/0x15b [ib_srpt] cma_ib_handler+0x1aa/0x4a0 [rdma_cm] cm_process_work+0x30/0x100 [ib_cm] cm_work_handler+0xa86/0x351b [ib_cm] process_one_work+0x475/0x9f0 worker_thread+0x69/0x690 kthread+0x1ad/0x1d0 ret_from_fork+0x3a/0x50
Fixes aaf45bd83eba ("IB/srpt: Detect session shutdown reliably")
Signed-off-by Bart Van Assche <[email protected]>
Cc Christoph Hellwig <[email protected]>
Signed-off-by Jason Gunthorpe <[email protected]>
drivers/infiniband/ulp/srpt/ib_srpt.c +9 -6
@@ -838,16 +838,19 @@ static int srpt_post_recv(struct srpt_device *sdev, struct srpt_rdma_ch *ch,*/ static int srpt_zerolength_write (struct srpt_rdma_ch *ch) { -struct ib_send_wr wr, *bad_wr; +struct ib_send_wr *bad_wr; +struct ib_rdma_wr wr = { + .wr = { + .opcode =IB_WR_RDMA_WRITE , + .wr_cqe = &ch->zw_cqe, + .send_flags =IB_SEND_SIGNALED , + } + };pr_debug ("%s-%d: queued zerolength write\n" , ch->sess_name, ch->qp->qp_num); -memset (&wr,0 ,sizeof (wr)); - wr.opcode =IB_WR_RDMA_WRITE ; - wr.wr_cqe = &ch->zw_cqe; - wr.send_flags =IB_SEND_SIGNALED ; -return ib_post_send (ch->qp, &wr, &bad_wr); +return ib_post_send (ch->qp, &wr.wr, &bad_wr); }static void srpt_zerolength_write_done (struct ib_cq *cq,struct ib_wc *wc)