[PATCH] rds: Error on offset mismatch if not loopback

Subsystems: networking [general], rds - reliable datagram sockets, the rest

STALE5079d

3 messages, 3 authors, 2012-09-22 · open the first message on its own page

[PATCH] rds: Error on offset mismatch if not loopback

From: John Jolly <hidden>
Date: 2012-09-21 21:32:24

Attempting an rds connection from the IP address of an IPoIB interface
to itself causes a kernel panic due to a BUG_ON() being triggered.
Making the test less strict allows rds-ping to work without crashing
the machine.

A local unprivileged user could use this flaw to crash the system.

Signed-off-by: John Jolly <redacted>
---
 net/rds/ib_send.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/rds/ib_send.c b/net/rds/ib_send.c
index e590949..7920c85 100644
--- a/net/rds/ib_send.c
+++ b/net/rds/ib_send.c
@@ -544,7 +544,7 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
        int flow_controlled = 0;
        int nr_sig = 0;
 
-       BUG_ON(off % RDS_FRAG_SIZE);
+       BUG_ON(!conn->c_loopback && off % RDS_FRAG_SIZE);
        BUG_ON(hdr_off != 0 && hdr_off != sizeof(struct rds_header));
 
        /* Do not send cong updates to IB loopback */
-- 
1.7.7

Re: [PATCH] rds: Error on offset mismatch if not loopback

From: Venkat Venkatsubra <hidden>
Date: 2012-09-21 21:38:24

On 9/21/2012 4:32 PM, John Jolly wrote:
quoted hunk
Attempting an rds connection from the IP address of an IPoIB interface
to itself causes a kernel panic due to a BUG_ON() being triggered.
Making the test less strict allows rds-ping to work without crashing
the machine.

A local unprivileged user could use this flaw to crash the system.

Signed-off-by: John Jolly<redacted>
---
  net/rds/ib_send.c |    2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/rds/ib_send.c b/net/rds/ib_send.c
index e590949..7920c85 100644
--- a/net/rds/ib_send.c
+++ b/net/rds/ib_send.c
@@ -544,7 +544,7 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
         int flow_controlled = 0;
         int nr_sig = 0;

-       BUG_ON(off % RDS_FRAG_SIZE);
+       BUG_ON(!conn->c_loopback&&  off % RDS_FRAG_SIZE);
         BUG_ON(hdr_off != 0&&  hdr_off != sizeof(struct rds_header));

         /* Do not send cong updates to IB loopback */
Hi John,

How do you trigger this BUG_ON ?
With rds-ping I could not hit this condition of non-zero "off % 
RDS_FRAG_SIZE".
rds-ping uses zero byte messages to ping or pong back. How does the 
"off" become non-zero ?

Thanks.

Venkat

Re: [PATCH] rds: Error on offset mismatch if not loopback

From: David Miller <davem@davemloft.net>
Date: 2012-09-22 19:25:27

From: John Jolly <redacted>
Date: Fri, 21 Sep 2012 15:32:40 -0600
Attempting an rds connection from the IP address of an IPoIB interface
to itself causes a kernel panic due to a BUG_ON() being triggered.
Making the test less strict allows rds-ping to work without crashing
the machine.

A local unprivileged user could use this flaw to crash the system.

Signed-off-by: John Jolly <redacted>
Besides the questions being asked of you by Venkat Venkatsubra, this
patch has another issue.

It has been completely corrupted by your email client, it has
turned all TAB characters into spaces, making the patch useless.

Please learn how to send a patch unmolested in the body of your
email.  Test it by emailing the patch to yourself, and verifying
that you can in fact apply the patch you receive in that email.
Then, and only then, should you consider making a new submission
of this patch.

Use Documentation/email-clients.txt for guidance.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help