Patch "tcp: beware of alignments in tcp_get_info()" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
tcp: beware of alignments in tcp_get_info()
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
tcp-beware-of-alignments-in-tcp_get_info.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Feb 29 14:33:50 PST 2016
From: Eric Dumazet <[email protected]>
Date: Wed, 27 Jan 2016 10:52:43 -0800
Subject: tcp: beware of alignments in tcp_get_info()
From: Eric Dumazet <[email protected]>
[ Upstream commit ff5d749772018602c47509bdc0093ff72acd82ec ]
With some combinations of user provided flags in netlink command, it is possible to call tcp_get_info() with a buffer that is not 8-bytes aligned.
It does matter on some arches, so we need to use put_unaligned() to store the u64 fields.
Current iproute2 package does not trigger this particular issue.
--- net/ipv4/tcp.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
net/ipv4/tcp.c +8 -4
@@ -279,6 +279,7 @@#include <asm/uaccess.h> #include <asm/ioctls.h> +#include <asm/unaligned.h> #include <net/busy_poll.h> int sysctl_tcp_fin_timeout__read_mostly =TCP_FIN_TIMEOUT ;
@@ -2637,6 +2638,7 @@ void tcp_get_info(struct sock *sk, strucconst struct inet_connection_sock *icsk =inet_csk (sk);u32 now = tcp_time_stamp;unsigned int start; +u64 rate64;u32 rate;memset (info,0 ,sizeof (*info));
@@ -2702,15 +2704,17 @@ void tcp_get_info(struct sock *sk, struc info->tcpi_total_retrans = tp->total_retrans; rate =READ_ONCE (sk->sk_pacing_rate); - info->tcpi_pacing_rate = rate != ~0U ? rate : ~0ULL ; + rate64 = rate != ~0U ? rate : ~0ULL ; +put_unaligned (rate64, &info->tcpi_pacing_rate); rate =READ_ONCE (sk->sk_max_pacing_rate); - info->tcpi_max_pacing_rate = rate != ~0U ? rate : ~0ULL ; + rate64 = rate != ~0U ? rate : ~0ULL ; +put_unaligned (rate64, &info->tcpi_max_pacing_rate);do { start =u64_stats_fetch_begin_irq (&tp->syncp); - info->tcpi_bytes_acked = tp->bytes_acked; - info->tcpi_bytes_received = tp->bytes_received; +put_unaligned (tp->bytes_acked, &info->tcpi_bytes_acked); +put_unaligned (tp->bytes_received, &info->tcpi_bytes_received); }while (u64_stats_fetch_retry_irq (&tp->syncp, start)); info->tcpi_segs_out = tp->segs_out; info->tcpi_segs_in = tp->segs_in;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/ipv4-fix-memory-leaks-in-ip_cmsg_send-callers.patch queue-4.4/tcp-dccp-fix-another-race-at-listener-dismantle.patch queue-4.4/ipv6-fix-a-lockdep-splat.patch queue-4.4/ipv6-addrconf-fix-recursive-spin-lock-call.patch queue-4.4/tcp-do-not-drop-syn_recv-on-all-icmp-reports.patch queue-4.4/tcp-beware-of-alignments-in-tcp_get_info.patch queue-4.4/tcp-md5-release-request-socket-instead-of-listener.patch queue-4.4/gro-make-gro-aware-of-lightweight-tunnels.patch queue-4.4/tcp-fix-null-deref-in-tcp_v4_send_ack.patch queue-4.4/af_unix-fix-struct-pid-memory-leak.patch queue-4.4/net-add-sysctl_max_skb_frags.patch