FAILED: patch "[PATCH] IB/hfi1: Fix incorrect mixing of ERR_PTR and NULL return" 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
b697d7d8c741f27b728a878fc55852b06d0f6f5eMon Sep 17 00:00:00 2001
From: "Michael J. Ruhl" <[email protected]>
Date: Wed, 20 Jun 2018 09:29:08 -0700
Subject: [PATCH] IB/hfi1: Fix incorrect mixing of ERR_PTR and NULL return
values
The __get_txreq() function can return a pointer, ERR_PTR(-EBUSY), or NULL. All of the relevant call sites look for IS_ERR, so the NULL return would lead to a NULL pointer exception.
Do not use the ERR_PTR mechanism for this function.
Update all call sites to handle the return value correctly.
Clean up error paths to reflect return value.
drivers/infiniband/hw/hfi1/rc.c +1 -1
@@ -271,7 +271,7 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)lockdep_assert_held (&qp->s_lock); ps->s_txreq =get_txreq (ps->dev, qp); -if (IS_ERR (ps->s_txreq)) +if (!ps->s_txreq) goto bail_no_tx;if (priv->hdr_type ==HFI1_PKT_TYPE_9B ) {
drivers/infiniband/hw/hfi1/uc.c +2 -2
@@ -1,5 +1,5 @@/* -* Copyright(c) 2015, 2016 Intel Corporation. +* Copyright(c) 2015 - 2018 Intel Corporation. * * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license.
@@ -72,7 +72,7 @@ int hfi1_make_uc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)int middle =0 ; ps->s_txreq =get_txreq (ps->dev, qp); -if (IS_ERR (ps->s_txreq)) +if (!ps->s_txreq) goto bail_no_tx;if (!(ib_rvt_state_ops[qp->state] &RVT_PROCESS_SEND_OK )) {
drivers/infiniband/hw/hfi1/ud.c +2 -2
@@ -1,5 +1,5 @@/* -* Copyright(c) 2015, 2016 Intel Corporation. +* Copyright(c) 2015 - 2018 Intel Corporation. * * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license.
@@ -503,7 +503,7 @@ int hfi1_make_ud_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)u32 lid; ps->s_txreq =get_txreq (ps->dev, qp); -if (IS_ERR (ps->s_txreq)) +if (!ps->s_txreq) goto bail_no_tx;if (!(ib_rvt_state_ops[qp->state] &RVT_PROCESS_NEXT_SEND_OK )) {
drivers/infiniband/hw/hfi1/verbs_txreq.c +2 -2
@@ -1,5 +1,5 @@/* -* Copyright(c) 2016 - 2017 Intel Corporation. +* Copyright(c) 2016 - 2018 Intel Corporation. * * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license.
@@ -94,7 +94,7 @@ struct verbs_txreq *__get_txreq(struct hfi1_ibdev *dev, struct rvt_qp *qp) __must_hold(&qp->s_lock) { -struct verbs_txreq *tx =ERR_PTR (-EBUSY ); +struct verbs_txreq *tx =NULL ;write_seqlock (&dev->txwait_lock);if (ib_rvt_state_ops[qp->state] &RVT_PROCESS_RECV_OK ) {
drivers/infiniband/hw/hfi1/verbs_txreq.h +2 -2
@@ -1,5 +1,5 @@/* -* Copyright(c) 2016 Intel Corporation. +* Copyright(c) 2016 - 2018 Intel Corporation. * * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license.
@@ -83,7 +83,7 @@ static inline struct verbs_txreq *get_txreq(struct hfi1_ibdev *dev,if (unlikely (!tx)) {/* call slow path to get the lock */ tx =__get_txreq (dev, qp); -if (IS_ERR (tx)) +if (!tx)return tx; } tx->qp = qp;