Subject: linux-next: manual merge of the net-next tree with the net tree

From: Stephen Rothwell <[email-masked]>
Date: Mon, 16 Mar 2015 13:04:47 +1100

Hi all,

Today's linux-next merge of the net-next tree got a conflict in
net/ipv4/inet_diag.c between commit c8e2c80d7ec0 ("inet_diag: fix
possible overflow in inet_diag_dump_one_icsk()") from the net tree and
commit a4458343ac59 ("inet_diag: factorize code in new
inet_diag_msg_common_fill() helper") from the net-next tree.

I fixed it up (see below) and can carry the fix as necessary (no action
is required).

-- 
Cheers,
Stephen Rothwell                    [email-masked]

diff --cc net/ipv4/inet_diag.c
index 592aff37366b,ac7b5c909fe7..000000000000
--- a/net/ipv4/inet_diag.c
+++ b/net/ipv4/inet_diag.c
@@@ -71,27 -66,39 +66,53 @@@ static void inet_diag_unlock_handler(co
  	mutex_unlock(&inet_diag_table_mutex);
  }
  
 +static size_t inet_sk_attr_size(void)
 +{
 +	return	  nla_total_size(sizeof(struct tcp_info))
 +		+ nla_total_size(1) /* INET_DIAG_SHUTDOWN */
 +		+ nla_total_size(1) /* INET_DIAG_TOS */
 +		+ nla_total_size(1) /* INET_DIAG_TCLASS */
 +		+ nla_total_size(sizeof(struct inet_diag_meminfo))
 +		+ nla_total_size(sizeof(struct inet_diag_msg))
 +		+ nla_total_size(SK_MEMINFO_VARS * sizeof(u32))
 +		+ nla_total_size(TCP_CA_NAME_MAX)
 +		+ nla_total_size(sizeof(struct tcpvegas_info))
 +		+ 64;
 +}
 +
+ static void inet_diag_msg_common_fill(struct inet_diag_msg *r, struct sock *sk)
+ {
+ 	r->idiag_family = sk->sk_family;
+ 
+ 	r->id.idiag_sport = htons(sk->sk_num);
+ 	r->id.idiag_dport = sk->sk_dport;
+ 	r->id.idiag_if = sk->sk_bound_dev_if;
+ 	sock_diag_save_cookie(sk, r->id.idiag_cookie);
+ 
+ #if IS_ENABLED(CONFIG_IPV6)
+ 	if (sk->sk_family == AF_INET6) {
+ 		*(struct in6_addr *)r->id.idiag_src = sk->sk_v6_rcv_saddr;
+ 		*(struct in6_addr *)r->id.idiag_dst = sk->sk_v6_daddr;
+ 	} else
+ #endif
+ 	{
+ 	memset(&r->id.idiag_src, 0, sizeof(r->id.idiag_src));
+ 	memset(&r->id.idiag_dst, 0, sizeof(r->id.idiag_dst));
+ 
+ 	r->id.idiag_src[0] = sk->sk_rcv_saddr;
+ 	r->id.idiag_dst[0] = sk->sk_daddr;
+ 	}
+ }
+ 
  int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
- 			      struct sk_buff *skb, struct inet_diag_req_v2 *req,
- 			      struct user_namespace *user_ns,		      	
- 			      u32 portid, u32 seq, u16 nlmsg_flags,
- 			      const struct nlmsghdr *unlh)
+ 		      struct sk_buff *skb, const struct inet_diag_req_v2 *req,
+ 		      struct user_namespace *user_ns,
+ 		      u32 portid, u32 seq, u16 nlmsg_flags,
+ 		      const struct nlmsghdr *unlh)
  {
  	const struct inet_sock *inet = inet_sk(sk);
+ 	const struct inet_diag_handler *handler;
+ 	int ext = req->idiag_ext;
  	struct inet_diag_msg *r;
  	struct nlmsghdr  *nlh;
  	struct nlattr *attr;