[ewg] [PATCH] sdp: Prevent kernel crash if device init fails (plus bonus fix)
Amir Vadai
amirv at mellanox.co.il
Mon Feb 22 11:38:44 PST 2010
Thanks Joachim.
I will add it to OFED
- Amir
On 02/22/2010 07:06 PM, Joachim Fenkes wrote:
> If sdp_add_device() fails, there is no client data stored in the IB device,
> leading to a kernel crash when a connection is being established. Fix this
> by rejecting connections when the device is not initialized.
>
> Also, fix a bad goto target in an error case early in sdp_init_qp().
>
> Signed-off-by: Joachim Fenkes <fenkes at de.ibm.com>
> ---
> kernel_patches/fixes/sdp-0001-fix-error-path.patch | 38 ++++++++++++++++++++
> 1 files changed, 38 insertions(+), 0 deletions(-)
> create mode 100644 kernel_patches/fixes/sdp-0001-fix-error-path.patch
>
> diff --git a/kernel_patches/fixes/sdp-0001-fix-error-path.patch b/kernel_patches/fixes/sdp-0001-fix-error-path.patch
> new file mode 100644
> index 0000000..5a5f784
> --- /dev/null
> +++ b/kernel_patches/fixes/sdp-0001-fix-error-path.patch
> @@ -0,0 +1,38 @@
> +[PATCH] sdp: Prevent kernel crash if device init fails (plus bonus fix)
> +
> +If sdp_add_device() fails, there is no client data stored in the IB device,
> +leading to a kernel crash when a connection is being established. Fix this
> +by rejecting connections when the device is not initialized.
> +
> +Also, fix a bad goto target in an error case early in sdp_init_qp().
> +
> +Signed-off-by: Joachim Fenkes <fenkes at de.ibm.com>
> +
> +---
> +
> + sdp_cma.c | 7 ++++++-
> + 1 file changed, 6 insertions(+), 1 deletion(-)
> +
> +diff -urp a/drivers/infiniband/ulp/sdp/sdp_cma.c b/drivers/infiniband/ulp/sdp/sdp_cma.c
> +--- a/drivers/infiniband/ulp/sdp/sdp_cma.c 2010-02-19 15:39:32.000000000 +0100
> ++++ b/drivers/infiniband/ulp/sdp/sdp_cma.c 2010-02-19 15:38:13.000000000 +0100
> +@@ -94,13 +94,18 @@ static int sdp_init_qp(struct sock *sk,
> + sdp_warn(sk, "recv sge's. capability: %d needed: %ld\n",
> + sdp_sk(sk)->max_sge, SDP_MAX_RECV_SKB_FRAGS + 1);
> + rc = -ENOMEM;
> +- goto err_tx;
> ++ goto err_rx;
> + }
> +
> + qp_init_attr.cap.max_send_sge = sdp_sk(sk)->max_sge;
> + sdp_dbg(sk, "Setting max send sge to: %d\n", sdp_sk(sk)->max_sge);
> +
> + sdp_sk(sk)->sdp_dev = ib_get_client_data(device, &sdp_client);
> ++ if (!sdp_sk(sk)->sdp_dev) {
> ++ sdp_warn(sk, "SDP not available on device %s", device->name);
> ++ rc = -ENODEV;
> ++ goto err_rx;
> ++ }
> +
> + rc = sdp_rx_ring_create(sdp_sk(sk), device);
> + if (rc)
>
More information about the ewg
mailing list