tree:
https://android.googlesource.com/kernel/common android-3.18
head: 2a0e8c1b4148e6622822a5eecc71db8641093f16
commit: 5d83c05d2723a77c287d6d536ab6c47d9ac03408 [15013/15049] ipv6: Remove external
dependency on rt6i_dst and rt6i_src
config: x86_64-defconfig (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
reproduce:
git checkout 5d83c05d2723a77c287d6d536ab6c47d9ac03408
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
In file included from arch/x86/include/asm/compat.h:8:0,
from include/linux/compat.h:19,
from include/linux/ethtool.h:15,
from include/linux/netdevice.h:43,
from net/ipv6/tcp_ipv6.c:36:
include/linux/sched.h:1067:42: warning: type qualifiers ignored on function return type
[-Wignored-qualifiers]
const struct sched_group_energy * const(*sched_domain_energy_f)(int cpu);
^
net/ipv6/tcp_ipv6.c: In function 'tcp_v6_connect':
> net/ipv6/tcp_ipv6.c:137:19: warning: variable 'rt' set
but not used [-Wunused-but-set-variable]
struct rt6_info *rt;
^
vim +/rt +137 net/ipv6/tcp_ipv6.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 126
^1da177e4c3f41 Linus Torvalds 2005-04-16 127 static int tcp_v6_connect(struct
sock *sk, struct sockaddr *uaddr,
^1da177e4c3f41 Linus Torvalds 2005-04-16 128 int addr_len)
^1da177e4c3f41 Linus Torvalds 2005-04-16 129 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 130 struct sockaddr_in6 *usin =
(struct sockaddr_in6 *) uaddr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 131 struct inet_sock *inet =
inet_sk(sk);
d83d8461f902c6 Arnaldo Carvalho de Melo 2005-12-13 132 struct inet_connection_sock
*icsk = inet_csk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 133 struct ipv6_pinfo *np =
inet6_sk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 134 struct tcp_sock *tp =
tcp_sk(sk);
20c59de2e6b6bc Arnaud Ebalard 2010-06-01 135 struct in6_addr *saddr = NULL,
*final_p, final;
aa498f1e3fa305 Eric Dumazet 2015-11-29 136 struct ipv6_txoptions *opt;
493f377d6dd56f David S. Miller 2010-12-02 @137 struct rt6_info *rt;
4c9483b2fb5d25 David S. Miller 2011-03-12 138 struct flowi6 fl6;
^1da177e4c3f41 Linus Torvalds 2005-04-16 139 struct dst_entry *dst;
^1da177e4c3f41 Linus Torvalds 2005-04-16 140 int addr_type;
^1da177e4c3f41 Linus Torvalds 2005-04-16 141 int err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 142
^1da177e4c3f41 Linus Torvalds 2005-04-16 143 if (addr_len <
SIN6_LEN_RFC2133)
^1da177e4c3f41 Linus Torvalds 2005-04-16 144 return -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 145
^1da177e4c3f41 Linus Torvalds 2005-04-16 146 if (usin->sin6_family !=
AF_INET6)
a02cec2155fbea Eric Dumazet 2010-09-22 147 return -EAFNOSUPPORT;
^1da177e4c3f41 Linus Torvalds 2005-04-16 148
4c9483b2fb5d25 David S. Miller 2011-03-12 149 memset(&fl6, 0,
sizeof(fl6));
^1da177e4c3f41 Linus Torvalds 2005-04-16 150
^1da177e4c3f41 Linus Torvalds 2005-04-16 151 if (np->sndflow) {
4c9483b2fb5d25 David S. Miller 2011-03-12 152 fl6.flowlabel =
usin->sin6_flowinfo&IPV6_FLOWINFO_MASK;
4c9483b2fb5d25 David S. Miller 2011-03-12 153
IP6_ECN_flow_init(fl6.flowlabel);
4c9483b2fb5d25 David S. Miller 2011-03-12 154 if
(fl6.flowlabel&IPV6_FLOWLABEL_MASK) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 155 struct ip6_flowlabel
*flowlabel;
4c9483b2fb5d25 David S. Miller 2011-03-12 156 flowlabel =
fl6_sock_lookup(sk, fl6.flowlabel);
^1da177e4c3f41 Linus Torvalds 2005-04-16 157 if (flowlabel == NULL)
^1da177e4c3f41 Linus Torvalds 2005-04-16 158 return -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 159 fl6_sock_release(flowlabel);
^1da177e4c3f41 Linus Torvalds 2005-04-16 160 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 161 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 162
^1da177e4c3f41 Linus Torvalds 2005-04-16 163 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 164 * connect() to INADDR_ANY means
loopback (BSD'ism).
^1da177e4c3f41 Linus Torvalds 2005-04-16 165 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 166
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 167 if
(ipv6_addr_any(&usin->sin6_addr)) {
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 168 if
(ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 169
ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 170
&usin->sin6_addr);
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 171 else
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 172 usin->sin6_addr =
in6addr_loopback;
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 173 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 174
^1da177e4c3f41 Linus Torvalds 2005-04-16 175 addr_type =
ipv6_addr_type(&usin->sin6_addr);
^1da177e4c3f41 Linus Torvalds 2005-04-16 176
^1da177e4c3f41 Linus Torvalds 2005-04-16 177 if (addr_type &
IPV6_ADDR_MULTICAST)
^1da177e4c3f41 Linus Torvalds 2005-04-16 178 return -ENETUNREACH;
^1da177e4c3f41 Linus Torvalds 2005-04-16 179
^1da177e4c3f41 Linus Torvalds 2005-04-16 180 if
(addr_type&IPV6_ADDR_LINKLOCAL) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 181 if (addr_len >=
sizeof(struct sockaddr_in6) &&
^1da177e4c3f41 Linus Torvalds 2005-04-16 182 usin->sin6_scope_id) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 183 /* If interface is set while
binding, indices
^1da177e4c3f41 Linus Torvalds 2005-04-16 184 * must coincide.
^1da177e4c3f41 Linus Torvalds 2005-04-16 185 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 186 if (sk->sk_bound_dev_if
&&
^1da177e4c3f41 Linus Torvalds 2005-04-16 187 sk->sk_bound_dev_if !=
usin->sin6_scope_id)
^1da177e4c3f41 Linus Torvalds 2005-04-16 188 return -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 189
^1da177e4c3f41 Linus Torvalds 2005-04-16 190 sk->sk_bound_dev_if =
usin->sin6_scope_id;
^1da177e4c3f41 Linus Torvalds 2005-04-16 191 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 192
^1da177e4c3f41 Linus Torvalds 2005-04-16 193 /* Connect to link-local
address requires an interface */
^1da177e4c3f41 Linus Torvalds 2005-04-16 194 if (!sk->sk_bound_dev_if)
^1da177e4c3f41 Linus Torvalds 2005-04-16 195 return -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 196 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 197
^1da177e4c3f41 Linus Torvalds 2005-04-16 198 if
(tp->rx_opt.ts_recent_stamp &&
efe4208f47f907 Eric Dumazet 2013-10-03 199
!ipv6_addr_equal(&sk->sk_v6_daddr, &usin->sin6_addr)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 200 tp->rx_opt.ts_recent = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 201 tp->rx_opt.ts_recent_stamp =
0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 202 tp->write_seq = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 203 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 204
efe4208f47f907 Eric Dumazet 2013-10-03 205 sk->sk_v6_daddr =
usin->sin6_addr;
4c9483b2fb5d25 David S. Miller 2011-03-12 206 np->flow_label =
fl6.flowlabel;
^1da177e4c3f41 Linus Torvalds 2005-04-16 207
^1da177e4c3f41 Linus Torvalds 2005-04-16 208 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 209 * TCP over IPv4
^1da177e4c3f41 Linus Torvalds 2005-04-16 210 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 211
a360eb6f74b999 Jonathan T. Leighton 2017-05-23 212 if (addr_type &
IPV6_ADDR_MAPPED) {
d83d8461f902c6 Arnaldo Carvalho de Melo 2005-12-13 213 u32 exthdrlen =
icsk->icsk_ext_hdr_len;
^1da177e4c3f41 Linus Torvalds 2005-04-16 214 struct sockaddr_in sin;
^1da177e4c3f41 Linus Torvalds 2005-04-16 215
^1da177e4c3f41 Linus Torvalds 2005-04-16 216 SOCK_DEBUG(sk, "connect:
ipv4 mapped\n");
^1da177e4c3f41 Linus Torvalds 2005-04-16 217
^1da177e4c3f41 Linus Torvalds 2005-04-16 218 if (__ipv6_only_sock(sk))
^1da177e4c3f41 Linus Torvalds 2005-04-16 219 return -ENETUNREACH;
^1da177e4c3f41 Linus Torvalds 2005-04-16 220
^1da177e4c3f41 Linus Torvalds 2005-04-16 221 sin.sin_family = AF_INET;
^1da177e4c3f41 Linus Torvalds 2005-04-16 222 sin.sin_port =
usin->sin6_port;
^1da177e4c3f41 Linus Torvalds 2005-04-16 223 sin.sin_addr.s_addr =
usin->sin6_addr.s6_addr32[3];
^1da177e4c3f41 Linus Torvalds 2005-04-16 224
d83d8461f902c6 Arnaldo Carvalho de Melo 2005-12-13 225 icsk->icsk_af_ops =
&ipv6_mapped;
^1da177e4c3f41 Linus Torvalds 2005-04-16 226 sk->sk_backlog_rcv =
tcp_v4_do_rcv;
cfb6eeb4c86059 YOSHIFUJI Hideaki 2006-11-14 227 #ifdef CONFIG_TCP_MD5SIG
cfb6eeb4c86059 YOSHIFUJI Hideaki 2006-11-14 228 tp->af_specific =
&tcp_sock_ipv6_mapped_specific;
cfb6eeb4c86059 YOSHIFUJI Hideaki 2006-11-14 229 #endif
^1da177e4c3f41 Linus Torvalds 2005-04-16 230
^1da177e4c3f41 Linus Torvalds 2005-04-16 231 err = tcp_v4_connect(sk,
(struct sockaddr *)&sin, sizeof(sin));
^1da177e4c3f41 Linus Torvalds 2005-04-16 232
^1da177e4c3f41 Linus Torvalds 2005-04-16 233 if (err) {
d83d8461f902c6 Arnaldo Carvalho de Melo 2005-12-13 234 icsk->icsk_ext_hdr_len =
exthdrlen;
d83d8461f902c6 Arnaldo Carvalho de Melo 2005-12-13 235 icsk->icsk_af_ops =
&ipv6_specific;
^1da177e4c3f41 Linus Torvalds 2005-04-16 236 sk->sk_backlog_rcv =
tcp_v6_do_rcv;
cfb6eeb4c86059 YOSHIFUJI Hideaki 2006-11-14 237 #ifdef CONFIG_TCP_MD5SIG
cfb6eeb4c86059 YOSHIFUJI Hideaki 2006-11-14 238 tp->af_specific =
&tcp_sock_ipv6_specific;
cfb6eeb4c86059 YOSHIFUJI Hideaki 2006-11-14 239 #endif
^1da177e4c3f41 Linus Torvalds 2005-04-16 240 goto failure;
^1da177e4c3f41 Linus Torvalds 2005-04-16 241 } else {
c720c7e8383aff Eric Dumazet 2009-10-15 242
ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr);
c720c7e8383aff Eric Dumazet 2009-10-15 243
ipv6_addr_set_v4mapped(inet->inet_rcv_saddr,
efe4208f47f907 Eric Dumazet 2013-10-03 244
&sk->sk_v6_rcv_saddr);
^1da177e4c3f41 Linus Torvalds 2005-04-16 245 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 246
^1da177e4c3f41 Linus Torvalds 2005-04-16 247 return err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 248 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 249
efe4208f47f907 Eric Dumazet 2013-10-03 250 if
(!ipv6_addr_any(&sk->sk_v6_rcv_saddr))
efe4208f47f907 Eric Dumazet 2013-10-03 251 saddr =
&sk->sk_v6_rcv_saddr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 252
4c9483b2fb5d25 David S. Miller 2011-03-12 253 fl6.flowi6_proto = IPPROTO_TCP;
efe4208f47f907 Eric Dumazet 2013-10-03 254 fl6.daddr = sk->sk_v6_daddr;
4e3fd7a06dc20b Alexey Dobriyan 2011-11-21 255 fl6.saddr = saddr ? *saddr :
np->saddr;
4c9483b2fb5d25 David S. Miller 2011-03-12 256 fl6.flowi6_oif =
sk->sk_bound_dev_if;
4c9483b2fb5d25 David S. Miller 2011-03-12 257 fl6.flowi6_mark =
sk->sk_mark;
1958b856c1a59c David S. Miller 2011-03-12 258 fl6.fl6_dport =
usin->sin6_port;
1958b856c1a59c David S. Miller 2011-03-12 259 fl6.fl6_sport =
inet->inet_sport;
04c0eace816f2b Lorenzo Colitti 2016-11-04 260 fl6.flowi6_uid = sk->sk_uid;
^1da177e4c3f41 Linus Torvalds 2005-04-16 261
aa498f1e3fa305 Eric Dumazet 2015-11-29 262 opt =
rcu_dereference_protected(np->opt, sock_owned_by_user(sk));
aa498f1e3fa305 Eric Dumazet 2015-11-29 263 final_p =
fl6_update_dst(&fl6, opt, &final);
^1da177e4c3f41 Linus Torvalds 2005-04-16 264
4c9483b2fb5d25 David S. Miller 2011-03-12 265 security_sk_classify_flow(sk,
flowi6_to_flowi(&fl6));
beb8d13bed80f8 Venkat Yekkirala 2006-08-04 266
0e0d44ab427554 Steffen Klassert 2013-08-28 267 dst = ip6_dst_lookup_flow(sk,
&fl6, final_p);
68d0c6d34d586a David S. Miller 2011-03-01 268 if (IS_ERR(dst)) {
68d0c6d34d586a David S. Miller 2011-03-01 269 err = PTR_ERR(dst);
^1da177e4c3f41 Linus Torvalds 2005-04-16 270 goto failure;
14e50e57aedb2a David S. Miller 2007-05-24 271 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 272
^1da177e4c3f41 Linus Torvalds 2005-04-16 273 if (saddr == NULL) {
4c9483b2fb5d25 David S. Miller 2011-03-12 274 saddr = &fl6.saddr;
efe4208f47f907 Eric Dumazet 2013-10-03 275 sk->sk_v6_rcv_saddr =
*saddr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 276 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 277
^1da177e4c3f41 Linus Torvalds 2005-04-16 278 /* set the source address */
4e3fd7a06dc20b Alexey Dobriyan 2011-11-21 279 np->saddr = *saddr;
c720c7e8383aff Eric Dumazet 2009-10-15 280 inet->inet_rcv_saddr =
LOOPBACK4_IPV6;
^1da177e4c3f41 Linus Torvalds 2005-04-16 281
f83ef8c0b58dac Herbert Xu 2006-06-30 282 sk->sk_gso_type =
SKB_GSO_TCPV6;
8e1ef0a95b87e8 YOSHIFUJI Hideaki 2006-08-29 283 __ip6_dst_store(sk, dst, NULL,
NULL);
^1da177e4c3f41 Linus Torvalds 2005-04-16 284
493f377d6dd56f David S. Miller 2010-12-02 285 rt = (struct rt6_info *) dst;
493f377d6dd56f David S. Miller 2010-12-02 286 if
(tcp_death_row.sysctl_tw_recycle &&
493f377d6dd56f David S. Miller 2010-12-02 287
!tp->rx_opt.ts_recent_stamp &&
5d83c05d2723a7 Martin KaFai Lau 2015-05-22 288
ipv6_addr_equal(&fl6.daddr, &sk->sk_v6_daddr))
81166dd6fa8eb7 David S. Miller 2012-07-10 289 tcp_fetch_timewait_stamp(sk,
dst);
493f377d6dd56f David S. Miller 2010-12-02 290
d83d8461f902c6 Arnaldo Carvalho de Melo 2005-12-13 291 icsk->icsk_ext_hdr_len = 0;
aa498f1e3fa305 Eric Dumazet 2015-11-29 292 if (opt)
aa498f1e3fa305 Eric Dumazet 2015-11-29 293 icsk->icsk_ext_hdr_len =
opt->opt_flen +
aa498f1e3fa305 Eric Dumazet 2015-11-29 294 opt->opt_nflen;
^1da177e4c3f41 Linus Torvalds 2005-04-16 295
^1da177e4c3f41 Linus Torvalds 2005-04-16 296 tp->rx_opt.mss_clamp =
IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
^1da177e4c3f41 Linus Torvalds 2005-04-16 297
c720c7e8383aff Eric Dumazet 2009-10-15 298 inet->inet_dport =
usin->sin6_port;
^1da177e4c3f41 Linus Torvalds 2005-04-16 299
^1da177e4c3f41 Linus Torvalds 2005-04-16 300 tcp_set_state(sk,
TCP_SYN_SENT);
d8313f5ca2b1f8 Arnaldo Carvalho de Melo 2005-12-13 301 err =
inet6_hash_connect(&tcp_death_row, sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 302 if (err)
^1da177e4c3f41 Linus Torvalds 2005-04-16 303 goto late_failure;
^1da177e4c3f41 Linus Torvalds 2005-04-16 304
9e7ceb060754f1 Sathya Perla 2014-10-22 305 ip6_set_txhash(sk);
9e7ceb060754f1 Sathya Perla 2014-10-22 306
2b9164771efe19 Andrey Vagin 2012-11-22 307 if (!tp->write_seq &&
likely(!tp->repair))
^1da177e4c3f41 Linus Torvalds 2005-04-16 308 tp->write_seq =
secure_tcpv6_sequence_number(np->saddr.s6_addr32,
efe4208f47f907 Eric Dumazet 2013-10-03 309
sk->sk_v6_daddr.s6_addr32,
c720c7e8383aff Eric Dumazet 2009-10-15 310 inet->inet_sport,
c720c7e8383aff Eric Dumazet 2009-10-15 311
inet->inet_dport);
^1da177e4c3f41 Linus Torvalds 2005-04-16 312
^1da177e4c3f41 Linus Torvalds 2005-04-16 313 err = tcp_connect(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 314 if (err)
^1da177e4c3f41 Linus Torvalds 2005-04-16 315 goto late_failure;
^1da177e4c3f41 Linus Torvalds 2005-04-16 316
^1da177e4c3f41 Linus Torvalds 2005-04-16 317 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 318
^1da177e4c3f41 Linus Torvalds 2005-04-16 319 late_failure:
^1da177e4c3f41 Linus Torvalds 2005-04-16 320 tcp_set_state(sk, TCP_CLOSE);
^1da177e4c3f41 Linus Torvalds 2005-04-16 321 __sk_dst_reset(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 322 failure:
c720c7e8383aff Eric Dumazet 2009-10-15 323 inet->inet_dport = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 324 sk->sk_route_caps = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 325 return err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 326 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 327
:::::: The code at line 137 was first introduced by commit
:::::: 493f377d6dd56f4e98b198d637fe714ab124681b tcp: Add timewait recycling bits to ipv6
connect code.
:::::: TO: David S. Miller <davem(a)davemloft.net>
:::::: CC: David S. Miller <davem(a)davemloft.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org