Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aea0929e authored by Eric B Munson's avatar Eric B Munson Committed by David S. Miller
Browse files

tcp: Return error instead of partial read for saved syn headers



Currently the getsockopt() requesting the cached contents of the syn
packet headers will fail silently if the caller uses a buffer that is
too small to contain the requested data.  Rather than fail silently and
discard the headers, getsockopt() should return an error and report the
required size to hold the data.

Signed-off-by: default avatarEric B Munson <emunson@akamai.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: James Morris <jmorris@namei.org>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: Patrick McHardy <kaber@trash.net>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c9a70d43
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -2845,7 +2845,15 @@ static int do_tcp_getsockopt(struct sock *sk, int level,

		lock_sock(sk);
		if (tp->saved_syn) {
			len = min_t(unsigned int, tp->saved_syn[0], len);
			if (len < tp->saved_syn[0]) {
				if (put_user(tp->saved_syn[0], optlen)) {
					release_sock(sk);
					return -EFAULT;
				}
				release_sock(sk);
				return -EINVAL;
			}
			len = tp->saved_syn[0];
			if (put_user(len, optlen)) {
				release_sock(sk);
				return -EFAULT;