All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] RDS: fix race condition when sending a message on unbound socket.
@ 2015-10-16 15:11 Quentin Casasnovas
  2015-10-16 17:47 ` santosh shilimkar
  0 siblings, 1 reply; 6+ messages in thread
From: Quentin Casasnovas @ 2015-10-16 15:11 UTC (permalink / raw)
  To: lkml
  Cc: Vegard Nossum, Sasha Levin, Chien Yen, Santosh Shilimkar,
	David S. Miller, Quentin Casasnovas

Sasha's found a NULL pointer dereference in the RDS connection code when
sending a message to an apparently unbound socket.  The problem is caused
by the code checking if the socket is bound in rds_sendmsg(), which checks
the rs_bound_addr field without taking a lock on the socket.  This opens a
race where rs_bound_addr is temporarily set but where the transport is not
in rds_bind(), leading to a NULL pointer dereference when trying to
dereference 'trans' in __rds_conn_create().

Vegard wrote a reproducer for this issue, so kindly ask him to share if
you're interested.

I cannot reproduce the NULL pointer dereference using Vegard's reproducer
with this patch, whereas I could without.

Complete earlier incomplete fix to CVE-2015-6937:

  74e98eb08588 ("RDS: verify the underlying transport exists before creating a connection")

Signed-off-by: Quentin Casasnovas <quentin.casasnovas@oracle.com>
Reviewed-by: Vegard Nossum <vegard.nossum@oracle.com>
Reviewed-by: Sasha Levin <sasha.levin@oracle.com>
Cc: Vegard Nossum <vegard.nossum@oracle.com>
Cc: Sasha Levin <sasha.levin@oracle.com>
Cc: Chien Yen <chien.yen@oracle.com>
Cc: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: stable@vger.kernel.org
---
 net/rds/connection.c | 6 ------
 net/rds/send.c       | 4 +++-
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/net/rds/connection.c b/net/rds/connection.c
index 49adeef..9b2de5e 100644
--- a/net/rds/connection.c
+++ b/net/rds/connection.c
@@ -190,12 +190,6 @@ new_conn:
 		}
 	}
 
-	if (trans == NULL) {
-		kmem_cache_free(rds_conn_slab, conn);
-		conn = ERR_PTR(-ENODEV);
-		goto out;
-	}
-
 	conn->c_trans = trans;
 
 	ret = trans->conn_alloc(conn, gfp);
diff --git a/net/rds/send.c b/net/rds/send.c
index 4df61a5..859de6f 100644
--- a/net/rds/send.c
+++ b/net/rds/send.c
@@ -1009,11 +1009,13 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)
 		release_sock(sk);
 	}
 
-	/* racing with another thread binding seems ok here */
+	lock_sock(sk);
 	if (daddr == 0 || rs->rs_bound_addr == 0) {
+		release_sock(sk);
 		ret = -ENOTCONN; /* XXX not a great errno */
 		goto out;
 	}
+	release_sock(sk);
 
 	if (payload_len > rds_sk_sndbuf(rs)) {
 		ret = -EMSGSIZE;
-- 
2.4.9


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

* Re: [PATCH] RDS: fix race condition when sending a message on unbound socket.
  2015-10-16 15:11 [PATCH] RDS: fix race condition when sending a message on unbound socket Quentin Casasnovas
@ 2015-10-16 17:47 ` santosh shilimkar
  2015-11-03 11:25   ` Quentin Casasnovas
  0 siblings, 1 reply; 6+ messages in thread
From: santosh shilimkar @ 2015-10-16 17:47 UTC (permalink / raw)
  To: Quentin Casasnovas, lkml
  Cc: Vegard Nossum, Sasha Levin, Chien Yen, David S. Miller

On 10/16/2015 8:11 AM, Quentin Casasnovas wrote:
> Sasha's found a NULL pointer dereference in the RDS connection code when
> sending a message to an apparently unbound socket.  The problem is caused
> by the code checking if the socket is bound in rds_sendmsg(), which checks
> the rs_bound_addr field without taking a lock on the socket.  This opens a
> race where rs_bound_addr is temporarily set but where the transport is not
> in rds_bind(), leading to a NULL pointer dereference when trying to
> dereference 'trans' in __rds_conn_create().
>
> Vegard wrote a reproducer for this issue, so kindly ask him to share if
> you're interested.
>
> I cannot reproduce the NULL pointer dereference using Vegard's reproducer
> with this patch, whereas I could without.
>
> Complete earlier incomplete fix to CVE-2015-6937:
>
>    74e98eb08588 ("RDS: verify the underlying transport exists before creating a connection")
>
> Signed-off-by: Quentin Casasnovas <quentin.casasnovas@oracle.com>
> Reviewed-by: Vegard Nossum <vegard.nossum@oracle.com>
> Reviewed-by: Sasha Levin <sasha.levin@oracle.com>
> Cc: Vegard Nossum <vegard.nossum@oracle.com>
> Cc: Sasha Levin <sasha.levin@oracle.com>
> Cc: Chien Yen <chien.yen@oracle.com>
> Cc: Santosh Shilimkar <santosh.shilimkar@oracle.com>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: stable@vger.kernel.org
> ---
Looks right. Am glad that we got deference issue as well as
the bind race fixed with it. Mail sent to Vegard for his test
case which I would like to add to my tests. Thanks for the fix.

FWIW,
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>


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

* Re: [PATCH] RDS: fix race condition when sending a message on unbound socket.
  2015-10-16 17:47 ` santosh shilimkar
@ 2015-11-03 11:25   ` Quentin Casasnovas
  2015-11-03 16:27     ` santosh shilimkar
  2015-11-24 18:25     ` Ben Hutchings
  0 siblings, 2 replies; 6+ messages in thread
From: Quentin Casasnovas @ 2015-11-03 11:25 UTC (permalink / raw)
  To: santosh shilimkar
  Cc: Quentin Casasnovas, lkml, Vegard Nossum, Sasha Levin, Chien Yen,
	David S. Miller

On Fri, Oct 16, 2015 at 10:47:49AM -0700, santosh shilimkar wrote:
> On 10/16/2015 8:11 AM, Quentin Casasnovas wrote:
> > Sasha's found a NULL pointer dereference in the RDS connection code when
> > sending a message to an apparently unbound socket.  The problem is caused
> > by the code checking if the socket is bound in rds_sendmsg(), which checks
> > the rs_bound_addr field without taking a lock on the socket.  This opens a
> > race where rs_bound_addr is temporarily set but where the transport is not
> > in rds_bind(), leading to a NULL pointer dereference when trying to
> > dereference 'trans' in __rds_conn_create().
> >
> > Vegard wrote a reproducer for this issue, so kindly ask him to share if
> > you're interested.
> >
> > I cannot reproduce the NULL pointer dereference using Vegard's reproducer
> > with this patch, whereas I could without.
> >
> > Complete earlier incomplete fix to CVE-2015-6937:
> >
> >    74e98eb08588 ("RDS: verify the underlying transport exists before creating a connection")
> >

For reference, this has been assigned CVE-2015-7990 on the oss-sec thread:

  http://seclists.org/oss-sec/2015/q4/179

Quentin

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

* Re: [PATCH] RDS: fix race condition when sending a message on unbound socket.
  2015-11-03 11:25   ` Quentin Casasnovas
@ 2015-11-03 16:27     ` santosh shilimkar
  2015-11-24 18:25     ` Ben Hutchings
  1 sibling, 0 replies; 6+ messages in thread
From: santosh shilimkar @ 2015-11-03 16:27 UTC (permalink / raw)
  To: Quentin Casasnovas
  Cc: lkml, Vegard Nossum, Sasha Levin, Chien Yen, David S. Miller

On 11/3/2015 3:25 AM, Quentin Casasnovas wrote:
> On Fri, Oct 16, 2015 at 10:47:49AM -0700, santosh shilimkar wrote:
>> On 10/16/2015 8:11 AM, Quentin Casasnovas wrote:
>>> Sasha's found a NULL pointer dereference in the RDS connection code when
>>> sending a message to an apparently unbound socket.  The problem is caused
>>> by the code checking if the socket is bound in rds_sendmsg(), which checks
>>> the rs_bound_addr field without taking a lock on the socket.  This opens a
>>> race where rs_bound_addr is temporarily set but where the transport is not
>>> in rds_bind(), leading to a NULL pointer dereference when trying to
>>> dereference 'trans' in __rds_conn_create().
>>>
>>> Vegard wrote a reproducer for this issue, so kindly ask him to share if
>>> you're interested.
>>>
>>> I cannot reproduce the NULL pointer dereference using Vegard's reproducer
>>> with this patch, whereas I could without.
>>>
>>> Complete earlier incomplete fix to CVE-2015-6937:
>>>
>>>     74e98eb08588 ("RDS: verify the underlying transport exists before creating a connection")
>>>
>
> For reference, this has been assigned CVE-2015-7990 on the oss-sec thread:
>
>    http://seclists.org/oss-sec/2015/q4/179
>
New CVE number than the older one. Thanks for the note.

Regards,
Santosh

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

* Re: [PATCH] RDS: fix race condition when sending a message on unbound socket.
  2015-11-03 11:25   ` Quentin Casasnovas
  2015-11-03 16:27     ` santosh shilimkar
@ 2015-11-24 18:25     ` Ben Hutchings
  2015-11-24 18:43       ` santosh shilimkar
  1 sibling, 1 reply; 6+ messages in thread
From: Ben Hutchings @ 2015-11-24 18:25 UTC (permalink / raw)
  To: Quentin Casasnovas, santosh shilimkar
  Cc: lkml, Vegard Nossum, Sasha Levin, Chien Yen, David S. Miller

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

On Tue, 2015-11-03 at 12:25 +0100, Quentin Casasnovas wrote:
> On Fri, Oct 16, 2015 at 10:47:49AM -0700, santosh shilimkar wrote:
> > On 10/16/2015 8:11 AM, Quentin Casasnovas wrote:
> > > Sasha's found a NULL pointer dereference in the RDS connection code when
> > > sending a message to an apparently unbound socket.  The problem is caused
> > > by the code checking if the socket is bound in rds_sendmsg(), which checks
> > > the rs_bound_addr field without taking a lock on the socket.  This opens a
> > > race where rs_bound_addr is temporarily set but where the transport is not
> > > in rds_bind(), leading to a NULL pointer dereference when trying to
> > > dereference 'trans' in __rds_conn_create().
> > > 
> > > Vegard wrote a reproducer for this issue, so kindly ask him to share if
> > > you're interested.
> > > 
> > > I cannot reproduce the NULL pointer dereference using Vegard's reproducer
> > > with this patch, whereas I could without.
> > > 
> > > Complete earlier incomplete fix to CVE-2015-6937:
> > > 
> > >    74e98eb08588 ("RDS: verify the underlying transport exists before creating a connection")
> > > 
> 
> For reference, this has been assigned CVE-2015-7990 on the oss-sec thread:
> 
>   http://seclists.org/oss-sec/2015/q4/179

But the patch doesn't seem to have gone anywhere.  Santosh, can you
apply this in your tree and ask David to pull, or should Quentin re-
send it to netdev?

Ben.

-- 
Ben Hutchings
Unix is many things to many people,
but it's never been everything to anybody.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 811 bytes --]

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

* Re: [PATCH] RDS: fix race condition when sending a message on unbound socket.
  2015-11-24 18:25     ` Ben Hutchings
@ 2015-11-24 18:43       ` santosh shilimkar
  0 siblings, 0 replies; 6+ messages in thread
From: santosh shilimkar @ 2015-11-24 18:43 UTC (permalink / raw)
  To: Ben Hutchings, Quentin Casasnovas
  Cc: lkml, Vegard Nossum, Sasha Levin, Chien Yen, David S. Miller

On 11/24/2015 10:25 AM, Ben Hutchings wrote:
> On Tue, 2015-11-03 at 12:25 +0100, Quentin Casasnovas wrote:
>> On Fri, Oct 16, 2015 at 10:47:49AM -0700, santosh shilimkar wrote:
>>> On 10/16/2015 8:11 AM, Quentin Casasnovas wrote:
>>>> Sasha's found a NULL pointer dereference in the RDS connection code when
>>>> sending a message to an apparently unbound socket.  The problem is caused
>>>> by the code checking if the socket is bound in rds_sendmsg(), which checks
>>>> the rs_bound_addr field without taking a lock on the socket.  This opens a
>>>> race where rs_bound_addr is temporarily set but where the transport is not
>>>> in rds_bind(), leading to a NULL pointer dereference when trying to
>>>> dereference 'trans' in __rds_conn_create().
>>>>
>>>> Vegard wrote a reproducer for this issue, so kindly ask him to share if
>>>> you're interested.
>>>>
>>>> I cannot reproduce the NULL pointer dereference using Vegard's reproducer
>>>> with this patch, whereas I could without.
>>>>
>>>> Complete earlier incomplete fix to CVE-2015-6937:
>>>>
>>>>     74e98eb08588 ("RDS: verify the underlying transport exists before creating a connection")
>>>>
>>
>> For reference, this has been assigned CVE-2015-7990 on the oss-sec thread:
>>
>>    http://seclists.org/oss-sec/2015/q4/179
>
> But the patch doesn't seem to have gone anywhere.  Santosh, can you
> apply this in your tree and ask David to pull, or should Quentin re-
> send it to netdev?
>
Indeed, its not picked up yet. I will send the refreshed patch for
Dave to pull. Thanks for reporting Ben.

Regards,
Santosh

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

end of thread, other threads:[~2015-11-24 18:43 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-16 15:11 [PATCH] RDS: fix race condition when sending a message on unbound socket Quentin Casasnovas
2015-10-16 17:47 ` santosh shilimkar
2015-11-03 11:25   ` Quentin Casasnovas
2015-11-03 16:27     ` santosh shilimkar
2015-11-24 18:25     ` Ben Hutchings
2015-11-24 18:43       ` santosh shilimkar

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.