All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks QP0
@ 2011-05-20 18:19 Weiny, Ira K.
       [not found] ` <E280C3CC-BD50-4383-BE33-FCC31C72D3F0-i2BcT+NCU+M@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Weiny, Ira K. @ 2011-05-20 18:19 UTC (permalink / raw)
  To: Roland Dreier; +Cc: linux-rdma

[-- Attachment #1: Type: text/plain, Size: 229 bytes --]

We had a script which was looping through the devices returned from ibstat and attempted to register a SMI agent on an ethernet device.  This caused a kernel panic.  We have fixed our script.  This patch prevents the panic.



[-- Attachment #2: 0001-Return-EPROTONOSUPPORT-when-an-RDMA-device-lacks-QP0.patch --]
[-- Type: application/octet-stream, Size: 1079 bytes --]

From 82e627f392fc928f55354d0dfc5e7868ac01ead1 Mon Sep 17 00:00:00 2001
From: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
Date: Thu, 19 May 2011 18:19:28 -0700
Subject: [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks QP0

This prevents a NULL pointer dereference later which panics the kernel.

Signed-off-by: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
---
 drivers/infiniband/core/mad.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index b2dba21..e30652a 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -208,6 +208,13 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
 	u8 mgmt_class, vclass;
 
 	/* Validate parameters */
+	if (qp_type == IB_QPT_SMI &&
+	    rdma_port_get_link_layer(device, port_num)!=
+	    IB_LINK_LAYER_INFINIBAND) {
+		ret = ERR_PTR(-EPROTONOSUPPORT);
+		goto error1;
+	}
+
 	qpn = get_spl_qp_index(qp_type);
 	if (qpn == -1)
 		goto error1;
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* RE: [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found] ` <E280C3CC-BD50-4383-BE33-FCC31C72D3F0-i2BcT+NCU+M@public.gmane.org>
@ 2011-05-20 19:23   ` Hefty, Sean
       [not found]     ` <1828884A29C6694DAF28B7E6B8A82373010745-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Hefty, Sean @ 2011-05-20 19:23 UTC (permalink / raw)
  To: Weiny, Ira K., Roland Dreier; +Cc: linux-rdma

> We had a script which was looping through the devices returned from ibstat
> and attempted to register a SMI agent on an ethernet device.  This caused
> a kernel panic.  We have fixed our script.  This patch prevents the panic.

Do you remember where the panic was?

I'm going to guess in ib_register_mad_agent() at this line:

	mad_agent_priv->agent.mr = ib_get_dma_mr(port_priv->qp_info[qpn].qp->pd,
						 IB_ACCESS_LOCAL_WRITE);

in which case it may be safer to check for the NULL pointer.  Can you confirm if this was the spot?

- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]     ` <1828884A29C6694DAF28B7E6B8A82373010745-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
@ 2011-05-20 23:19       ` Weiny, Ira K.
       [not found]         ` <8D19CC19-B4FD-4338-9267-9C1BC32A6BAE-i2BcT+NCU+M@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Weiny, Ira K. @ 2011-05-20 23:19 UTC (permalink / raw)
  To: Hefty, Sean; +Cc: Roland Dreier, linux-rdma


On May 20, 2011, at 12:23 PM, Hefty, Sean wrote:

>> We had a script which was looping through the devices returned from ibstat
>> and attempted to register a SMI agent on an ethernet device.  This caused
>> a kernel panic.  We have fixed our script.  This patch prevents the panic.
> 
> Do you remember where the panic was?
> 
> I'm going to guess in ib_register_mad_agent() at this line:
> 
> 	mad_agent_priv->agent.mr = ib_get_dma_mr(port_priv->qp_info[qpn].qp->pd,
> 						 IB_ACCESS_LOCAL_WRITE);
> 
> in which case it may be safer to check for the NULL pointer.  Can you confirm if this was the spot?

Yes it was that spot.  I did think of that today after I sent the patch.

Do you think it would be safer just to check for both pointers QP0 and 1 (depending on the registration)?

Ira

> 
> - Sean

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]         ` <8D19CC19-B4FD-4338-9267-9C1BC32A6BAE-i2BcT+NCU+M@public.gmane.org>
@ 2011-05-20 23:23           ` Hefty, Sean
       [not found]             ` <1828884A29C6694DAF28B7E6B8A8237301085B-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Hefty, Sean @ 2011-05-20 23:23 UTC (permalink / raw)
  To: Weiny, Ira K.; +Cc: Roland Dreier, linux-rdma

> > 	mad_agent_priv->agent.mr = ib_get_dma_mr(port_priv->qp_info[qpn].qp-
> >pd,
> > 						 IB_ACCESS_LOCAL_WRITE);
> >
> > in which case it may be safer to check for the NULL pointer.  Can you
> confirm if this was the spot?
> 
> Yes it was that spot.  I did think of that today after I sent the patch.
> 
> Do you think it would be safer just to check for both pointers QP0 and 1
> (depending on the registration)?

Yes, it seems safer and easier to maintain if we just validated the pointer.

- Sean
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]             ` <1828884A29C6694DAF28B7E6B8A8237301085B-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
@ 2011-05-20 23:41               ` Weiny, Ira K.
  2011-05-23  3:46               ` [PATCH v2] " Weiny, Ira K.
  1 sibling, 0 replies; 10+ messages in thread
From: Weiny, Ira K. @ 2011-05-20 23:41 UTC (permalink / raw)
  To: Hefty, Sean; +Cc: Roland Dreier, linux-rdma


On May 20, 2011, at 4:23 PM, Hefty, Sean wrote:

>>> 	mad_agent_priv->agent.mr = ib_get_dma_mr(port_priv->qp_info[qpn].qp-
>>> pd,
>>> 						 IB_ACCESS_LOCAL_WRITE);
>>> 
>>> in which case it may be safer to check for the NULL pointer.  Can you
>> confirm if this was the spot?
>> 
>> Yes it was that spot.  I did think of that today after I sent the patch.
>> 
>> Do you think it would be safer just to check for both pointers QP0 and 1
>> (depending on the registration)?
> 
> Yes, it seems safer and easier to maintain if we just validated the pointer.

I will rework the patch.

Thanks,
Ira

> 
> - Sean

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]             ` <1828884A29C6694DAF28B7E6B8A8237301085B-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
  2011-05-20 23:41               ` Weiny, Ira K.
@ 2011-05-23  3:46               ` Weiny, Ira K.
       [not found]                 ` <B4F482DA-6C66-4AC9-A583-D2091E8F32C4-i2BcT+NCU+M@public.gmane.org>
  1 sibling, 1 reply; 10+ messages in thread
From: Weiny, Ira K. @ 2011-05-23  3:46 UTC (permalink / raw)
  To: Sean Hefty, Roland Dreier; +Cc: linux-rdma

[-- Attachment #1: Type: text/plain, Size: 619 bytes --]


On May 20, 2011, at 4:23 PM, Hefty, Sean wrote:

>>> 	mad_agent_priv->agent.mr = ib_get_dma_mr(port_priv->qp_info[qpn].qp-
>>> pd,
>>> 						 IB_ACCESS_LOCAL_WRITE);
>>> 
>>> in which case it may be safer to check for the NULL pointer.  Can you
>> confirm if this was the spot?
>> 
>> Yes it was that spot.  I did think of that today after I sent the patch.
>> 
>> Do you think it would be safer just to check for both pointers QP0 and 1
>> (depending on the registration)?
> 
> Yes, it seems safer and easier to maintain if we just validated the pointer.
> 
> - Sean

New patch attached.

Ira


[-- Attachment #2: 0001-Return-EPROTONOSUPPORT-when-an-RDMA-device-lacks-the.patch --]
[-- Type: application/octet-stream, Size: 1319 bytes --]

From c4db4c727704cd94d37a57252e0636c2adf1e040 Mon Sep 17 00:00:00 2001
From: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
Date: Thu, 19 May 2011 18:19:28 -0700
Subject: [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks the QP required.

Signed-off-by: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
---
 drivers/infiniband/core/mad.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index b2dba21..fc97883 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -275,6 +275,13 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
 		goto error1;
 	}
 
+	/* Verify the QP requested is supported.  For example, Ethernet devices
+	 * will not have QP0 */
+	if (!port_priv->qp_info[qpn].qp) {
+		ret = ERR_PTR(-EPROTONOSUPPORT);
+		goto error1;
+	}
+
 	/* Allocate structures */
 	mad_agent_priv = kzalloc(sizeof *mad_agent_priv, GFP_KERNEL);
 	if (!mad_agent_priv) {
@@ -2738,6 +2745,7 @@ static void init_mad_qp(struct ib_mad_port_private *port_priv,
 	spin_lock_init(&qp_info->snoop_lock);
 	qp_info->snoop_table = NULL;
 	qp_info->snoop_table_size = 0;
+	qp_info->qp = NULL;
 	atomic_set(&qp_info->snoop_count, 0);
 }
 
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]                 ` <B4F482DA-6C66-4AC9-A583-D2091E8F32C4-i2BcT+NCU+M@public.gmane.org>
@ 2011-05-23  4:05                   ` Roland Dreier
       [not found]                     ` <BANLkTinoKxr5A6Qm7JXV=7qvgaLwoKJt+A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Roland Dreier @ 2011-05-23  4:05 UTC (permalink / raw)
  To: Weiny, Ira K.; +Cc: Sean Hefty, linux-rdma

 > @@ -2738,6 +2745,7 @@ static void init_mad_qp(struct
ib_mad_port_private *port_priv,
 >  	spin_lock_init(&qp_info->snoop_lock);
 >  	qp_info->snoop_table = NULL;
 >  	qp_info->snoop_table_size = 0;
 > +	qp_info->qp = NULL;
 >  	atomic_set(&qp_info->snoop_count, 0);
 >  }

This bit isn't needed, is it?  qp_info is in memory allocated with kzalloc.
(We could get rid of the other = 0 / = NULL lines too)

 - R.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]                     ` <BANLkTinoKxr5A6Qm7JXV=7qvgaLwoKJt+A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2011-05-23  4:45                       ` Weiny, Ira K.
       [not found]                         ` <2F48A0B5-1D6D-4DAC-8192-F4F17DF791B3-i2BcT+NCU+M@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Weiny, Ira K. @ 2011-05-23  4:45 UTC (permalink / raw)
  To: Roland Dreier; +Cc: Sean Hefty, linux-rdma

[-- Attachment #1: Type: text/plain, Size: 502 bytes --]


On May 22, 2011, at 9:05 PM, Roland Dreier wrote:

>> @@ -2738,6 +2745,7 @@ static void init_mad_qp(struct
> ib_mad_port_private *port_priv,
>> 	spin_lock_init(&qp_info->snoop_lock);
>> 	qp_info->snoop_table = NULL;
>> 	qp_info->snoop_table_size = 0;
>> +	qp_info->qp = NULL;
>> 	atomic_set(&qp_info->snoop_count, 0);
>> }
> 
> This bit isn't needed, is it?  qp_info is in memory allocated with kzalloc.
> (We could get rid of the other = 0 / = NULL lines too)
> 

Yes, sorry, revised attached,
Ira



[-- Attachment #2: 0001-Return-EPROTONOSUPPORT-when-an-RDMA-device-lacks-the.patch --]
[-- Type: application/octet-stream, Size: 952 bytes --]

From: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
Date: Thu, 19 May 2011 18:19:28 -0700
Subject: [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks the QP required.

Signed-off-by: Ira Weiny <weiny2-i2BcT+NCU+M@public.gmane.org>
---
 drivers/infiniband/core/mad.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
index b2dba21..25ba485 100644
--- a/drivers/infiniband/core/mad.c
+++ b/drivers/infiniband/core/mad.c
@@ -275,6 +275,13 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
 		goto error1;
 	}
 
+	/* Verify the QP requested is supported.  For example, Ethernet devices
+	 * will not have QP0 */
+	if (!port_priv->qp_info[qpn].qp) {
+		ret = ERR_PTR(-EPROTONOSUPPORT);
+		goto error1;
+	}
+
 	/* Allocate structures */
 	mad_agent_priv = kzalloc(sizeof *mad_agent_priv, GFP_KERNEL);
 	if (!mad_agent_priv) {
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]                         ` <2F48A0B5-1D6D-4DAC-8192-F4F17DF791B3-i2BcT+NCU+M@public.gmane.org>
@ 2011-05-23 18:14                           ` Roland Dreier
       [not found]                             ` <BANLkTimZSxm_VaBcJtsSG_HD1N2grQ5dPA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 10+ messages in thread
From: Roland Dreier @ 2011-05-23 18:14 UTC (permalink / raw)
  To: Weiny, Ira K.; +Cc: Sean Hefty, linux-rdma

> Yes, sorry, revised attached,

Thanks, this looks good to apply to me.

Sean, any objection?

 - R.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH v2] Return EPROTONOSUPPORT when an RDMA device lacks QP0
       [not found]                             ` <BANLkTimZSxm_VaBcJtsSG_HD1N2grQ5dPA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2011-05-23 18:17                               ` Hefty, Sean
  0 siblings, 0 replies; 10+ messages in thread
From: Hefty, Sean @ 2011-05-23 18:17 UTC (permalink / raw)
  To: Roland Dreier, Weiny, Ira K.; +Cc: linux-rdma

> Sean, any objection?

Looks good to me.  Thanks, Ira.

Acked-by: Sean Hefty <sean.hefty-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-05-23 18:17 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-20 18:19 [PATCH] Return EPROTONOSUPPORT when an RDMA device lacks QP0 Weiny, Ira K.
     [not found] ` <E280C3CC-BD50-4383-BE33-FCC31C72D3F0-i2BcT+NCU+M@public.gmane.org>
2011-05-20 19:23   ` Hefty, Sean
     [not found]     ` <1828884A29C6694DAF28B7E6B8A82373010745-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2011-05-20 23:19       ` Weiny, Ira K.
     [not found]         ` <8D19CC19-B4FD-4338-9267-9C1BC32A6BAE-i2BcT+NCU+M@public.gmane.org>
2011-05-20 23:23           ` Hefty, Sean
     [not found]             ` <1828884A29C6694DAF28B7E6B8A8237301085B-P5GAC/sN6hmkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2011-05-20 23:41               ` Weiny, Ira K.
2011-05-23  3:46               ` [PATCH v2] " Weiny, Ira K.
     [not found]                 ` <B4F482DA-6C66-4AC9-A583-D2091E8F32C4-i2BcT+NCU+M@public.gmane.org>
2011-05-23  4:05                   ` Roland Dreier
     [not found]                     ` <BANLkTinoKxr5A6Qm7JXV=7qvgaLwoKJt+A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-05-23  4:45                       ` Weiny, Ira K.
     [not found]                         ` <2F48A0B5-1D6D-4DAC-8192-F4F17DF791B3-i2BcT+NCU+M@public.gmane.org>
2011-05-23 18:14                           ` Roland Dreier
     [not found]                             ` <BANLkTimZSxm_VaBcJtsSG_HD1N2grQ5dPA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-05-23 18:17                               ` Hefty, Sean

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.