All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Reumann <reumann.linux@gmail.com>
To: undisclosed-recipients:;
Subject: [PATCH 1/1] Return EINVAL if the user provides a return data structure for getsockname that is too small to hold the PF_ address.  This introduces a new error code but this should be OK as the error is real and would otherwise corrupt the user-application's stack, i.e., it results in trouble no matter what.  I do not do a partial copy of the sockaddr structure because it does not make very much sense to retrieve only part of the socket address (e.g., ip + af_family).
Date: Mon, 26 Jan 2009 11:21:40 -0500	[thread overview]
Message-ID: <20090126163452.85EAF54A11@localhost> (raw)

---
 net/ipv4/af_inet.c  |    7 +++++--
 net/ipv6/af_inet6.c |    3 +++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 743f554..52283ff 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -677,10 +677,13 @@ do_err:
 int inet_getname(struct socket *sock, struct sockaddr *uaddr,
 			int *uaddr_len, int peer)
 {
-	struct sock *sk		= sock->sk;
-	struct inet_sock *inet	= inet_sk(sk);
+	struct sock *sk = sock->sk;
+	struct inet_sock *inet = inet_sk(sk);
 	struct sockaddr_in *sin	= (struct sockaddr_in *)uaddr;
 
+	if (*uaddr_len < sizeof(struct sockaddr_in))
+		return -EINVAL;
+
 	sin->sin_family = AF_INET;
 	if (peer) {
 		if (!inet->dport ||
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index c802bc1..74b8407 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -401,6 +401,9 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
 	struct inet_sock *inet = inet_sk(sk);
 	struct ipv6_pinfo *np = inet6_sk(sk);
 
+	if (*uaddr_len < sizeof(struct sockaddr_in6))
+		return -EINVAL;
+
 	sin->sin6_family = AF_INET6;
 	sin->sin6_flowinfo = 0;
 	sin->sin6_scope_id = 0;
-- 
1.5.4.5


             reply	other threads:[~2009-01-26 16:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-26 16:21 John Reumann [this message]
2009-01-30  6:20 ` [PATCH 1/1] Return EINVAL if the user provides a return data structure for getsockname that is too small to hold the PF_ address. This introduces a new error code but this should be OK as the error is real and would otherwise corrupt the user-application's stack, i.e., it results in trouble no matter what. I do not do a partial copy of the sockaddr structure because it does not make very much sense to retrieve only part of the socket address (e.g., ip + af_family) Herbert Xu

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=20090126163452.85EAF54A11@localhost \
    --to=reumann.linux@gmail.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.