All of lore.kernel.org
 help / color / mirror / Atom feed
From: Elena Reshetova <elena.reshetova@intel.com>
To: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
	linux-decnet-user@lists.sourceforge.net, davem@davemloft.net,
	jmorris@namei.org, kaber@trash.net, yoshfuji@linux-ipv6.org,
	kuznet@ms2.inr.ac.ru, 3chas3@gmail.com, ralf@linux-mips.org,
	stephen@networkplumber.org, jchapman@katalix.com,
	jhs@mojatatu.com, bridge@lists.linux-foundation.org,
	linux-hams@vger.kernel.org, linux-x25@vger.kernel.org,
	peterz@infradead.org, keescook@chromium.org,
	linux-rdma@vger.kernel.org, linux-sctp@vger.kernel.org,
	vyasevich@gmail.com, nhorman@tuxdriver.com,
	linux-nfs@vger.kernel.org, zyan@redhat.com, sage@redhat.com,
	bfields@fieldses.org, jlayton@poochiereds.net,
	steffen.klassert@secunet.com, herbert@gondor.apana.org.au,
	santosh.shilimkar@oracle.com, jreuter@yaina.de,
	Elena Reshetova <elena.reshetova@intel.com>,
	Hans
Subject: [PATCH 33/36] net, sctp: convert sctp_ep_common.refcnt from atomic_t to refcount_t
Date: Tue,  4 Jul 2017 15:53:28 +0300	[thread overview]
Message-ID: <1499172811-16271-34-git-send-email-elena.reshetova@intel.com> (raw)
In-Reply-To: <1499172811-16271-1-git-send-email-elena.reshetova@intel.com>

refcount_t type and corresponding API should be
used instead of atomic_t when the variable is used as
a reference counter. This allows to avoid accidental
refcounter overflows that might lead to use-after-free
situations.

Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David Windsor <dwindsor@gmail.com>
---
 include/net/sctp/structs.h | 2 +-
 net/sctp/associola.c       | 6 +++---
 net/sctp/endpointola.c     | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 6a0d372..5ab29af 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1174,7 +1174,7 @@ struct sctp_ep_common {
 	 *   refcnt   - Reference count access to this object.
 	 *   dead     - Do not attempt to use this object.
 	 */
-	atomic_t    refcnt;
+	refcount_t    refcnt;
 	bool	    dead;
 
 	/* What socket does this endpoint belong to?  */
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index fa4f530..40ec836 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -88,7 +88,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 	asoc->base.type = SCTP_EP_TYPE_ASSOCIATION;
 
 	/* Initialize the object handling fields.  */
-	atomic_set(&asoc->base.refcnt, 1);
+	refcount_set(&asoc->base.refcnt, 1);
 
 	/* Initialize the bind addr area.  */
 	sctp_bind_addr_init(&asoc->base.bind_addr, ep->base.bind_addr.port);
@@ -873,7 +873,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
 /* Hold a reference to an association. */
 void sctp_association_hold(struct sctp_association *asoc)
 {
-	atomic_inc(&asoc->base.refcnt);
+	refcount_inc(&asoc->base.refcnt);
 }
 
 /* Release a reference to an association and cleanup
@@ -881,7 +881,7 @@ void sctp_association_hold(struct sctp_association *asoc)
  */
 void sctp_association_put(struct sctp_association *asoc)
 {
-	if (atomic_dec_and_test(&asoc->base.refcnt))
+	if (refcount_dec_and_test(&asoc->base.refcnt))
 		sctp_association_destroy(asoc);
 }
 
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index efbc318..0e86f98 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -114,7 +114,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
 	ep->base.type = SCTP_EP_TYPE_SOCKET;
 
 	/* Initialize the basic object fields. */
-	atomic_set(&ep->base.refcnt, 1);
+	refcount_set(&ep->base.refcnt, 1);
 	ep->base.dead = false;
 
 	/* Create an input queue.  */
@@ -285,7 +285,7 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
 /* Hold a reference to an endpoint. */
 void sctp_endpoint_hold(struct sctp_endpoint *ep)
 {
-	atomic_inc(&ep->base.refcnt);
+	refcount_inc(&ep->base.refcnt);
 }
 
 /* Release a reference to an endpoint and clean up if there are
@@ -293,7 +293,7 @@ void sctp_endpoint_hold(struct sctp_endpoint *ep)
  */
 void sctp_endpoint_put(struct sctp_endpoint *ep)
 {
-	if (atomic_dec_and_test(&ep->base.refcnt))
+	if (refcount_dec_and_test(&ep->base.refcnt))
 		sctp_endpoint_destroy(ep);
 }
 
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: Elena Reshetova <elena.reshetova@intel.com>
To: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
	linux-decnet-user@lists.sourceforge.net, davem@davemloft.net,
	jmorris@namei.org, kaber@trash.net, yoshfuji@linux-ipv6.org,
	kuznet@ms2.inr.ac.ru, 3chas3@gmail.com, ralf@linux-mips.org,
	stephen@networkplumber.org, jchapman@katalix.com,
	jhs@mojatatu.com, bridge@lists.linux-foundation.org,
	linux-hams@vger.kernel.org, linux-x25@vger.kernel.org,
	peterz@infradead.org, keescook@chromium.org,
	linux-rdma@vger.kernel.org, linux-sctp@vger.kernel.org,
	vyasevich@gmail.com, nhorman@tuxdriver.com,
	linux-nfs@vger.kernel.org, zyan@redhat.com, sage@redhat.com,
	bfields@fieldses.org, jlayton@poochiereds.net,
	steffen.klassert@secunet.com, herbert@gondor.apana.org.au,
	santosh.shilimkar@oracle.com, jreuter@yaina.de,
	Elena Reshetova <elena.reshetova@intel.com>,
	Hans Liljestrand <ishkamiel@gmail.com>,
	David Windsor <dwindsor@gmail.com>
Subject: [PATCH 33/36] net, sctp: convert sctp_ep_common.refcnt from atomic_t to refcount_t
Date: Tue,  4 Jul 2017 15:53:28 +0300	[thread overview]
Message-ID: <1499172811-16271-34-git-send-email-elena.reshetova@intel.com> (raw)
In-Reply-To: <1499172811-16271-1-git-send-email-elena.reshetova@intel.com>

refcount_t type and corresponding API should be
used instead of atomic_t when the variable is used as
a reference counter. This allows to avoid accidental
refcounter overflows that might lead to use-after-free
situations.

Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David Windsor <dwindsor@gmail.com>
---
 include/net/sctp/structs.h | 2 +-
 net/sctp/associola.c       | 6 +++---
 net/sctp/endpointola.c     | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 6a0d372..5ab29af 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1174,7 +1174,7 @@ struct sctp_ep_common {
 	 *   refcnt   - Reference count access to this object.
 	 *   dead     - Do not attempt to use this object.
 	 */
-	atomic_t    refcnt;
+	refcount_t    refcnt;
 	bool	    dead;
 
 	/* What socket does this endpoint belong to?  */
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index fa4f530..40ec836 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -88,7 +88,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 	asoc->base.type = SCTP_EP_TYPE_ASSOCIATION;
 
 	/* Initialize the object handling fields.  */
-	atomic_set(&asoc->base.refcnt, 1);
+	refcount_set(&asoc->base.refcnt, 1);
 
 	/* Initialize the bind addr area.  */
 	sctp_bind_addr_init(&asoc->base.bind_addr, ep->base.bind_addr.port);
@@ -873,7 +873,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
 /* Hold a reference to an association. */
 void sctp_association_hold(struct sctp_association *asoc)
 {
-	atomic_inc(&asoc->base.refcnt);
+	refcount_inc(&asoc->base.refcnt);
 }
 
 /* Release a reference to an association and cleanup
@@ -881,7 +881,7 @@ void sctp_association_hold(struct sctp_association *asoc)
  */
 void sctp_association_put(struct sctp_association *asoc)
 {
-	if (atomic_dec_and_test(&asoc->base.refcnt))
+	if (refcount_dec_and_test(&asoc->base.refcnt))
 		sctp_association_destroy(asoc);
 }
 
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index efbc318..0e86f98 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -114,7 +114,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
 	ep->base.type = SCTP_EP_TYPE_SOCKET;
 
 	/* Initialize the basic object fields. */
-	atomic_set(&ep->base.refcnt, 1);
+	refcount_set(&ep->base.refcnt, 1);
 	ep->base.dead = false;
 
 	/* Create an input queue.  */
@@ -285,7 +285,7 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
 /* Hold a reference to an endpoint. */
 void sctp_endpoint_hold(struct sctp_endpoint *ep)
 {
-	atomic_inc(&ep->base.refcnt);
+	refcount_inc(&ep->base.refcnt);
 }
 
 /* Release a reference to an endpoint and clean up if there are
@@ -293,7 +293,7 @@ void sctp_endpoint_hold(struct sctp_endpoint *ep)
  */
 void sctp_endpoint_put(struct sctp_endpoint *ep)
 {
-	if (atomic_dec_and_test(&ep->base.refcnt))
+	if (refcount_dec_and_test(&ep->base.refcnt))
 		sctp_endpoint_destroy(ep);
 }
 
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: Elena Reshetova <elena.reshetova@intel.com>
To: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
	linux-decnet-user@lists.sourceforge.net, davem@davemloft.net,
	jmorris@namei.org, kaber@trash.net, yoshfuji@linux-ipv6.org,
	kuznet@ms2.inr.ac.ru, 3chas3@gmail.com, ralf@linux-mips.org,
	stephen@networkplumber.org, jchapman@katalix.com,
	jhs@mojatatu.com, bridge@lists.linux-foundation.org,
	linux-hams@vger.kernel.org, linux-x25@vger.kernel.org,
	peterz@infradead.org, keescook@chromium.org,
	linux-rdma@vger.kernel.org, linux-sctp@vger.kernel.org,
	vyasevich@gmail.com, nhorman@tuxdriver.com,
	linux-nfs@vger.kernel.org, zyan@redhat.com, sage@redhat.com,
	bfields@fieldses.org, jlayton@poochiereds.net,
	steffen.klassert@secunet.com, herbert@gondor.apana.org.au,
	santosh.shilimkar@oracle.com, jreuter@yaina.de,
	Elena Reshetova <elena.reshetova@intel.com>,
	Hans Li
Subject: [PATCH 33/36] net, sctp: convert sctp_ep_common.refcnt from atomic_t to refcount_t
Date: Tue,  4 Jul 2017 15:53:28 +0300	[thread overview]
Message-ID: <1499172811-16271-34-git-send-email-elena.reshetova@intel.com> (raw)
In-Reply-To: <1499172811-16271-1-git-send-email-elena.reshetova@intel.com>

refcount_t type and corresponding API should be
used instead of atomic_t when the variable is used as
a reference counter. This allows to avoid accidental
refcounter overflows that might lead to use-after-free
situations.

Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David Windsor <dwindsor@gmail.com>
---
 include/net/sctp/structs.h | 2 +-
 net/sctp/associola.c       | 6 +++---
 net/sctp/endpointola.c     | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 6a0d372..5ab29af 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1174,7 +1174,7 @@ struct sctp_ep_common {
 	 *   refcnt   - Reference count access to this object.
 	 *   dead     - Do not attempt to use this object.
 	 */
-	atomic_t    refcnt;
+	refcount_t    refcnt;
 	bool	    dead;
 
 	/* What socket does this endpoint belong to?  */
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index fa4f530..40ec836 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -88,7 +88,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 	asoc->base.type = SCTP_EP_TYPE_ASSOCIATION;
 
 	/* Initialize the object handling fields.  */
-	atomic_set(&asoc->base.refcnt, 1);
+	refcount_set(&asoc->base.refcnt, 1);
 
 	/* Initialize the bind addr area.  */
 	sctp_bind_addr_init(&asoc->base.bind_addr, ep->base.bind_addr.port);
@@ -873,7 +873,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
 /* Hold a reference to an association. */
 void sctp_association_hold(struct sctp_association *asoc)
 {
-	atomic_inc(&asoc->base.refcnt);
+	refcount_inc(&asoc->base.refcnt);
 }
 
 /* Release a reference to an association and cleanup
@@ -881,7 +881,7 @@ void sctp_association_hold(struct sctp_association *asoc)
  */
 void sctp_association_put(struct sctp_association *asoc)
 {
-	if (atomic_dec_and_test(&asoc->base.refcnt))
+	if (refcount_dec_and_test(&asoc->base.refcnt))
 		sctp_association_destroy(asoc);
 }
 
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index efbc318..0e86f98 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -114,7 +114,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
 	ep->base.type = SCTP_EP_TYPE_SOCKET;
 
 	/* Initialize the basic object fields. */
-	atomic_set(&ep->base.refcnt, 1);
+	refcount_set(&ep->base.refcnt, 1);
 	ep->base.dead = false;
 
 	/* Create an input queue.  */
@@ -285,7 +285,7 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
 /* Hold a reference to an endpoint. */
 void sctp_endpoint_hold(struct sctp_endpoint *ep)
 {
-	atomic_inc(&ep->base.refcnt);
+	refcount_inc(&ep->base.refcnt);
 }
 
 /* Release a reference to an endpoint and clean up if there are
@@ -293,7 +293,7 @@ void sctp_endpoint_hold(struct sctp_endpoint *ep)
  */
 void sctp_endpoint_put(struct sctp_endpoint *ep)
 {
-	if (atomic_dec_and_test(&ep->base.refcnt))
+	if (refcount_dec_and_test(&ep->base.refcnt))
 		sctp_endpoint_destroy(ep);
 }
 
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: Elena Reshetova <elena.reshetova@intel.com>
To: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
	linux-decnet-user@lists.sourceforge.net, davem@davemloft.net,
	jmorris@namei.org, kaber@trash.net, yoshfuji@linux-ipv6.org,
	kuznet@ms2.inr.ac.ru, 3chas3@gmail.com, ralf@linux-mips.org,
	stephen@networkplumber.org, jchapman@katalix.com,
	jhs@mojatatu.com, bridge@lists.linux-foundation.org,
	linux-hams@vger.kernel.org, linux-x25@vger.kernel.org,
	peterz@infradead.org, keescook@chromium.org,
	linux-rdma@vger.kernel.org, linux-sctp@vger.kernel.org,
	vyasevich@gmail.com, nhorman@tuxdriver.com,
	linux-nfs@vger.kernel.org, zyan@redhat.com, sage@redhat.com,
	bfields@fieldses.org, jlayton@poochiereds.net,
	steffen.klassert@secunet.com, herbert@gondor.apana.org.au,
	santosh.shilimkar@oracle.com, jreuter@yaina.de,
	Elena Reshetova <elena.reshetova@intel.com>,
	Hans Liljestrand <ishkamiel@gmail.com>,
	David Windsor <dwindsor@gmail.com>
Subject: [PATCH 33/36] net, sctp: convert sctp_ep_common.refcnt from atomic_t to refcount_t
Date: Tue, 04 Jul 2017 12:53:28 +0000	[thread overview]
Message-ID: <1499172811-16271-34-git-send-email-elena.reshetova@intel.com> (raw)
In-Reply-To: <1499172811-16271-1-git-send-email-elena.reshetova@intel.com>

refcount_t type and corresponding API should be
used instead of atomic_t when the variable is used as
a reference counter. This allows to avoid accidental
refcounter overflows that might lead to use-after-free
situations.

Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David Windsor <dwindsor@gmail.com>
---
 include/net/sctp/structs.h | 2 +-
 net/sctp/associola.c       | 6 +++---
 net/sctp/endpointola.c     | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 6a0d372..5ab29af 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1174,7 +1174,7 @@ struct sctp_ep_common {
 	 *   refcnt   - Reference count access to this object.
 	 *   dead     - Do not attempt to use this object.
 	 */
-	atomic_t    refcnt;
+	refcount_t    refcnt;
 	bool	    dead;
 
 	/* What socket does this endpoint belong to?  */
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index fa4f530..40ec836 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -88,7 +88,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 	asoc->base.type = SCTP_EP_TYPE_ASSOCIATION;
 
 	/* Initialize the object handling fields.  */
-	atomic_set(&asoc->base.refcnt, 1);
+	refcount_set(&asoc->base.refcnt, 1);
 
 	/* Initialize the bind addr area.  */
 	sctp_bind_addr_init(&asoc->base.bind_addr, ep->base.bind_addr.port);
@@ -873,7 +873,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
 /* Hold a reference to an association. */
 void sctp_association_hold(struct sctp_association *asoc)
 {
-	atomic_inc(&asoc->base.refcnt);
+	refcount_inc(&asoc->base.refcnt);
 }
 
 /* Release a reference to an association and cleanup
@@ -881,7 +881,7 @@ void sctp_association_hold(struct sctp_association *asoc)
  */
 void sctp_association_put(struct sctp_association *asoc)
 {
-	if (atomic_dec_and_test(&asoc->base.refcnt))
+	if (refcount_dec_and_test(&asoc->base.refcnt))
 		sctp_association_destroy(asoc);
 }
 
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index efbc318..0e86f98 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -114,7 +114,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
 	ep->base.type = SCTP_EP_TYPE_SOCKET;
 
 	/* Initialize the basic object fields. */
-	atomic_set(&ep->base.refcnt, 1);
+	refcount_set(&ep->base.refcnt, 1);
 	ep->base.dead = false;
 
 	/* Create an input queue.  */
@@ -285,7 +285,7 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
 /* Hold a reference to an endpoint. */
 void sctp_endpoint_hold(struct sctp_endpoint *ep)
 {
-	atomic_inc(&ep->base.refcnt);
+	refcount_inc(&ep->base.refcnt);
 }
 
 /* Release a reference to an endpoint and clean up if there are
@@ -293,7 +293,7 @@ void sctp_endpoint_hold(struct sctp_endpoint *ep)
  */
 void sctp_endpoint_put(struct sctp_endpoint *ep)
 {
-	if (atomic_dec_and_test(&ep->base.refcnt))
+	if (refcount_dec_and_test(&ep->base.refcnt))
 		sctp_endpoint_destroy(ep);
 }
 
-- 
2.7.4


WARNING: multiple messages have this Message-ID (diff)
From: Elena Reshetova <elena.reshetova@intel.com>
To: netdev@vger.kernel.org
Cc: peterz@infradead.org, jchapman@katalix.com, bfields@fieldses.org,
	linux-sctp@vger.kernel.org, jlayton@poochiereds.net,
	Elena Reshetova <elena.reshetova@intel.com>,
	steffen.klassert@secunet.com, zyan@redhat.com,
	herbert@gondor.apana.org.au, linux-x25@vger.kernel.org,
	linux-rdma@vger.kernel.org, bridge@lists.linux-foundation.org,
	jmorris@namei.org, 3chas3@gmail.com, kuznet@ms2.inr.ac.ru,
	jreuter@yaina.de, keescook@chromium.org,
	santosh.shilimkar@oracle.com, jhs@mojatatu.com,
	Hans Liljestrand <ishkamiel@gmail.com>,
	linux-hams@vger.kernel.org, David Windsor <dwindsor@gmail.com>,
	linux-nfs@vger.kernel.org, sage@redhat.com,
	nhorman@tuxdriver.com, yoshfuji@linux-ipv6.org,
	vyasevich@gmail.com, linux-decnet-user@lists.sourceforge.net,
	linux-kernel@vger.kernel.org, ralf@linux-mips.org,
	kaber@trash.net, davem@davemloft.net
Subject: [Bridge] [PATCH 33/36] net, sctp: convert sctp_ep_common.refcnt from atomic_t to refcount_t
Date: Tue,  4 Jul 2017 15:53:28 +0300	[thread overview]
Message-ID: <1499172811-16271-34-git-send-email-elena.reshetova@intel.com> (raw)
In-Reply-To: <1499172811-16271-1-git-send-email-elena.reshetova@intel.com>

refcount_t type and corresponding API should be
used instead of atomic_t when the variable is used as
a reference counter. This allows to avoid accidental
refcounter overflows that might lead to use-after-free
situations.

Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David Windsor <dwindsor@gmail.com>
---
 include/net/sctp/structs.h | 2 +-
 net/sctp/associola.c       | 6 +++---
 net/sctp/endpointola.c     | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h
index 6a0d372..5ab29af 100644
--- a/include/net/sctp/structs.h
+++ b/include/net/sctp/structs.h
@@ -1174,7 +1174,7 @@ struct sctp_ep_common {
 	 *   refcnt   - Reference count access to this object.
 	 *   dead     - Do not attempt to use this object.
 	 */
-	atomic_t    refcnt;
+	refcount_t    refcnt;
 	bool	    dead;
 
 	/* What socket does this endpoint belong to?  */
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index fa4f530..40ec836 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -88,7 +88,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 	asoc->base.type = SCTP_EP_TYPE_ASSOCIATION;
 
 	/* Initialize the object handling fields.  */
-	atomic_set(&asoc->base.refcnt, 1);
+	refcount_set(&asoc->base.refcnt, 1);
 
 	/* Initialize the bind addr area.  */
 	sctp_bind_addr_init(&asoc->base.bind_addr, ep->base.bind_addr.port);
@@ -873,7 +873,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
 /* Hold a reference to an association. */
 void sctp_association_hold(struct sctp_association *asoc)
 {
-	atomic_inc(&asoc->base.refcnt);
+	refcount_inc(&asoc->base.refcnt);
 }
 
 /* Release a reference to an association and cleanup
@@ -881,7 +881,7 @@ void sctp_association_hold(struct sctp_association *asoc)
  */
 void sctp_association_put(struct sctp_association *asoc)
 {
-	if (atomic_dec_and_test(&asoc->base.refcnt))
+	if (refcount_dec_and_test(&asoc->base.refcnt))
 		sctp_association_destroy(asoc);
 }
 
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
index efbc318..0e86f98 100644
--- a/net/sctp/endpointola.c
+++ b/net/sctp/endpointola.c
@@ -114,7 +114,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
 	ep->base.type = SCTP_EP_TYPE_SOCKET;
 
 	/* Initialize the basic object fields. */
-	atomic_set(&ep->base.refcnt, 1);
+	refcount_set(&ep->base.refcnt, 1);
 	ep->base.dead = false;
 
 	/* Create an input queue.  */
@@ -285,7 +285,7 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)
 /* Hold a reference to an endpoint. */
 void sctp_endpoint_hold(struct sctp_endpoint *ep)
 {
-	atomic_inc(&ep->base.refcnt);
+	refcount_inc(&ep->base.refcnt);
 }
 
 /* Release a reference to an endpoint and clean up if there are
@@ -293,7 +293,7 @@ void sctp_endpoint_hold(struct sctp_endpoint *ep)
  */
 void sctp_endpoint_put(struct sctp_endpoint *ep)
 {
-	if (atomic_dec_and_test(&ep->base.refcnt))
+	if (refcount_dec_and_test(&ep->base.refcnt))
 		sctp_endpoint_destroy(ep);
 }
 
-- 
2.7.4


  parent reply	other threads:[~2017-07-04 12:53 UTC|newest]

Thread overview: 188+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-04 12:52 [PATCH 00/36] v2 net subsystem misc refcounter conversions Elena Reshetova
2017-07-04 12:52 ` [Bridge] " Elena Reshetova
2017-07-04 12:52 ` Elena Reshetova
2017-07-04 12:52 ` Elena Reshetova
2017-07-04 12:52 ` [PATCH 01/36] net, llc: convert llc_sap.refcnt from atomic_t to refcount_t Elena Reshetova
2017-07-04 12:52   ` [Bridge] " Elena Reshetova
2017-07-04 12:52   ` Elena Reshetova
2017-07-04 12:52   ` Elena Reshetova
2017-07-04 12:52 ` [PATCH 03/36] net, l2tp: convert l2tp_session.ref_count " Elena Reshetova
2017-07-04 12:52   ` [Bridge] " Elena Reshetova
2017-07-04 12:52   ` Elena Reshetova
2017-07-04 12:52   ` Elena Reshetova
2017-07-04 12:52 ` [PATCH 04/36] net, vxlan: convert vxlan_sock.refcnt " Elena Reshetova
2017-07-04 12:52   ` [Bridge] " Elena Reshetova
2017-07-04 12:52   ` Elena Reshetova
2017-07-04 12:52   ` Elena Reshetova
2017-07-04 12:52   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 05/36] net, decnet: convert dn_fib_info.fib_clntref " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 06/36] net, atm: convert atm_dev.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 07/36] net, atm: convert lec_arp_table.usage " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 08/36] net, atm: convert in_cache_entry.use " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 09/36] net, atm: convert eg_cache_entry.use " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 10/36] net, bridge: convert net_bridge_vlan.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 11/36] net, calipso: convert calipso_doi.refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 12/36] net, sched: convert Qdisc.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 13/36] net, lapb: convert lapb_cb.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 14/36] net, ipx: convert ipx_interface.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 15/36] net, ipx: convert ipx_route.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 16/36] net, netrom: convert nr_neigh.refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 17/36] net, netrom: convert nr_node.refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 18/36] net, sunrpc: convert gss_cl_ctx.count " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 19/36] net, sunrpc: convert gss_upcall_msg.count " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 20/36] net, rds: convert rds_ib_device.refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 21/36] net, rds: convert rds_incoming.i_refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 22/36] net, rds: convert rds_mr.r_refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 23/36] net, rds: convert rds_message.m_refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 24/36] net, x25: convert x25_route.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 25/36] net, x25: convert x25_neigh.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 26/36] net, xfrm: convert xfrm_state.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
     [not found] ` <1499172811-16271-1-git-send-email-elena.reshetova-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-04 12:52   ` [PATCH 02/36] net, l2tp: convert l2tp_tunnel.ref_count " Elena Reshetova
2017-07-04 12:52     ` [Bridge] " Elena Reshetova
2017-07-04 12:52     ` Elena Reshetova
2017-07-04 12:52     ` Elena Reshetova
2017-07-04 12:52     ` Elena Reshetova
2017-07-04 12:53   ` [PATCH 27/36] net, xfrm: convert xfrm_policy.refcnt " Elena Reshetova
2017-07-04 12:53     ` [Bridge] " Elena Reshetova
2017-07-04 12:53     ` Elena Reshetova
2017-07-04 12:53     ` Elena Reshetova
2017-07-04 12:53     ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 28/36] net, xfrm: convert sec_path.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 29/36] net, sctp: convert sctp_auth_bytes.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 30/36] net, sctp: convert sctp_datamsg.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 31/36] net, sctp: convert sctp_chunk.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 32/36] net, sctp: convert sctp_transport.refcnt " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` Elena Reshetova [this message]
2017-07-04 12:53   ` [Bridge] [PATCH 33/36] net, sctp: convert sctp_ep_common.refcnt " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 34/36] net, ax25: convert ax25_uid_assoc.refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 35/36] net, ax25: convert ax25_route.refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53 ` [PATCH 36/36] net, ax25: convert ax25_cb.refcount " Elena Reshetova
2017-07-04 12:53   ` [Bridge] " Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 12:53   ` Elena Reshetova
2017-07-04 22:00 ` [PATCH 00/36] v2 net subsystem misc refcounter conversions David Miller
2017-07-04 22:00   ` [Bridge] " David Miller
2017-07-04 22:00   ` David Miller
2017-07-05  9:03   ` Reshetova, Elena
2017-07-05  9:03     ` [Bridge] " Reshetova, Elena
2017-07-05  9:03     ` Reshetova, Elena
2017-07-05  9:03     ` Reshetova, Elena
2017-07-05  9:03     ` Reshetova, Elena
2017-07-05  9:03     ` Reshetova, Elena

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1499172811-16271-34-git-send-email-elena.reshetova@intel.com \
    --to=elena.reshetova@intel.com \
    --cc=3chas3@gmail.com \
    --cc=bfields@fieldses.org \
    --cc=bridge@lists.linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=jchapman@katalix.com \
    --cc=jhs@mojatatu.com \
    --cc=jlayton@poochiereds.net \
    --cc=jmorris@namei.org \
    --cc=jreuter@yaina.de \
    --cc=kaber@trash.net \
    --cc=keescook@chromium.org \
    --cc=kuznet@ms2.inr.ac.ru \
    --cc=linux-decnet-user@lists.sourceforge.net \
    --cc=linux-hams@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=linux-sctp@vger.kernel.org \
    --cc=linux-x25@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nhorman@tuxdriver.com \
    --cc=peterz@infradead.org \
    --cc=ralf@linux-mips.org \
    --cc=sage@redhat.com \
    --cc=santosh.shilimkar@oracle.com \
    --cc=steffen.klassert@secunet.com \
    --cc=stephen@networkplumber.org \
    --cc=vyasevich@gmail.com \
    --cc=yoshfuji@linux-ipv6.org \
    --cc=zyan@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.