* [linux-next:master 12558/12912] net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
@ 2020-05-27 14:08 ` Dan Carpenter
0 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2020-05-27 14:08 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 13839 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: b0523c7b1c9d0edcd6c0fe6d2cb558a9ad5c60a8
commit: 45af29ca761c275e350cca659856bc56f1035ef9 [12558/12912] tcp: allow traceroute -Mtcp for unpriv users
config: i386-randconfig-m021-20200526 (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=45af29ca761c275e350cca659856bc56f1035ef9
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git remote update linux-next
git checkout 45af29ca761c275e350cca659856bc56f1035ef9
vim +/skb +576 net/ipv4/tcp_ipv4.c
32bbd8793f24b0 Stefano Brivio 2018-11-08 422 int tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
^1da177e4c3f41 Linus Torvalds 2005-04-16 423 {
b71d1d426d263b Eric Dumazet 2011-04-22 424 const struct iphdr *iph = (const struct iphdr *)icmp_skb->data;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 425 struct tcphdr *th = (struct tcphdr *)(icmp_skb->data + (iph->ihl << 2));
f1ecd5d9e73666 Damian Lukowski 2009-08-26 426 struct inet_connection_sock *icsk;
^1da177e4c3f41 Linus Torvalds 2005-04-16 427 struct tcp_sock *tp;
^1da177e4c3f41 Linus Torvalds 2005-04-16 428 struct inet_sock *inet;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 429 const int type = icmp_hdr(icmp_skb)->type;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 430 const int code = icmp_hdr(icmp_skb)->code;
^1da177e4c3f41 Linus Torvalds 2005-04-16 431 struct sock *sk;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 432 struct sk_buff *skb;
0a672f74131dd6 Yuchung Cheng 2014-05-11 433 struct request_sock *fastopen;
9a568de4818dea Eric Dumazet 2017-05-16 434 u32 seq, snd_una;
9a568de4818dea Eric Dumazet 2017-05-16 435 s32 remaining;
9a568de4818dea Eric Dumazet 2017-05-16 436 u32 delta_us;
^1da177e4c3f41 Linus Torvalds 2005-04-16 437 int err;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 438 struct net *net = dev_net(icmp_skb->dev);
^1da177e4c3f41 Linus Torvalds 2005-04-16 439
26e3736090e103 Eric Dumazet 2015-03-22 440 sk = __inet_lookup_established(net, &tcp_hashinfo, iph->daddr,
26e3736090e103 Eric Dumazet 2015-03-22 441 th->dest, iph->saddr, ntohs(th->source),
3fa6f616a7a4d0 David Ahern 2017-08-07 442 inet_iif(icmp_skb), 0);
^1da177e4c3f41 Linus Torvalds 2005-04-16 443 if (!sk) {
5d3848bc33b7d1 Eric Dumazet 2016-04-27 444 __ICMP_INC_STATS(net, ICMP_MIB_INERRORS);
32bbd8793f24b0 Stefano Brivio 2018-11-08 445 return -ENOENT;
^1da177e4c3f41 Linus Torvalds 2005-04-16 446 }
I guess can "sk->sk_state" start as TCP_SYN_SENT/RECV? Smatch doesn't
know.
^1da177e4c3f41 Linus Torvalds 2005-04-16 447 if (sk->sk_state == TCP_TIME_WAIT) {
9469c7b4aa210c YOSHIFUJI Hideaki 2006-10-10 448 inet_twsk_put(inet_twsk(sk));
32bbd8793f24b0 Stefano Brivio 2018-11-08 449 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 450 }
26e3736090e103 Eric Dumazet 2015-03-22 451 seq = ntohl(th->seq);
32bbd8793f24b0 Stefano Brivio 2018-11-08 452 if (sk->sk_state == TCP_NEW_SYN_RECV) {
32bbd8793f24b0 Stefano Brivio 2018-11-08 453 tcp_req_err(sk, seq, type == ICMP_PARAMETERPROB ||
9cf7490360bf2c Eric Dumazet 2016-02-02 454 type == ICMP_TIME_EXCEEDED ||
9cf7490360bf2c Eric Dumazet 2016-02-02 455 (type == ICMP_DEST_UNREACH &&
9cf7490360bf2c Eric Dumazet 2016-02-02 456 (code == ICMP_NET_UNREACH ||
9cf7490360bf2c Eric Dumazet 2016-02-02 457 code == ICMP_HOST_UNREACH)));
32bbd8793f24b0 Stefano Brivio 2018-11-08 458 return 0;
32bbd8793f24b0 Stefano Brivio 2018-11-08 459 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 460
^1da177e4c3f41 Linus Torvalds 2005-04-16 461 bh_lock_sock(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 462 /* If too many ICMPs get dropped on busy
^1da177e4c3f41 Linus Torvalds 2005-04-16 463 * servers this needs to be solved differently.
563d34d0578626 Eric Dumazet 2012-07-23 464 * We do take care of PMTU discovery (RFC1191) special case :
563d34d0578626 Eric Dumazet 2012-07-23 465 * we can receive locally generated ICMP messages while socket is held.
^1da177e4c3f41 Linus Torvalds 2005-04-16 466 */
b74aa930ef49a3 Eric Dumazet 2013-01-19 467 if (sock_owned_by_user(sk)) {
b74aa930ef49a3 Eric Dumazet 2013-01-19 468 if (!(type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED))
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 469 __NET_INC_STATS(net, LINUX_MIB_LOCKDROPPEDICMPS);
b74aa930ef49a3 Eric Dumazet 2013-01-19 470 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 471 if (sk->sk_state == TCP_CLOSE)
^1da177e4c3f41 Linus Torvalds 2005-04-16 472 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 473
97e3ecd112ba45 stephen hemminger 2010-03-18 474 if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 475 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
97e3ecd112ba45 stephen hemminger 2010-03-18 476 goto out;
97e3ecd112ba45 stephen hemminger 2010-03-18 477 }
97e3ecd112ba45 stephen hemminger 2010-03-18 478
f1ecd5d9e73666 Damian Lukowski 2009-08-26 479 icsk = inet_csk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 480 tp = tcp_sk(sk);
0a672f74131dd6 Yuchung Cheng 2014-05-11 481 /* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */
d983ea6f16b835 Eric Dumazet 2019-10-10 482 fastopen = rcu_dereference(tp->fastopen_rsk);
0a672f74131dd6 Yuchung Cheng 2014-05-11 483 snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;
^1da177e4c3f41 Linus Torvalds 2005-04-16 484 if (sk->sk_state != TCP_LISTEN &&
0a672f74131dd6 Yuchung Cheng 2014-05-11 485 !between(seq, snd_una, tp->snd_nxt)) {
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 486 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
^1da177e4c3f41 Linus Torvalds 2005-04-16 487 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 488 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 489
^1da177e4c3f41 Linus Torvalds 2005-04-16 490 switch (type) {
55be7a9c6074f7 David S. Miller 2012-07-11 491 case ICMP_REDIRECT:
45caeaa5ac0b4b Jon Maxwell 2017-03-10 492 if (!sock_owned_by_user(sk))
55be7a9c6074f7 David S. Miller 2012-07-11 493 do_redirect(icmp_skb, sk);
55be7a9c6074f7 David S. Miller 2012-07-11 494 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 495 case ICMP_SOURCE_QUENCH:
^1da177e4c3f41 Linus Torvalds 2005-04-16 496 /* Just silently ignore these. */
^1da177e4c3f41 Linus Torvalds 2005-04-16 497 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 498 case ICMP_PARAMETERPROB:
^1da177e4c3f41 Linus Torvalds 2005-04-16 499 err = EPROTO;
^1da177e4c3f41 Linus Torvalds 2005-04-16 500 break;
Then we hit a break statement
^1da177e4c3f41 Linus Torvalds 2005-04-16 501 case ICMP_DEST_UNREACH:
^1da177e4c3f41 Linus Torvalds 2005-04-16 502 if (code > NR_ICMP_UNREACH)
^1da177e4c3f41 Linus Torvalds 2005-04-16 503 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 504
^1da177e4c3f41 Linus Torvalds 2005-04-16 505 if (code == ICMP_FRAG_NEEDED) { /* PMTU discovery (RFC1191) */
0d4f0608619de5 Eric Dumazet 2013-03-18 506 /* We are not interested in TCP_LISTEN and open_requests
0d4f0608619de5 Eric Dumazet 2013-03-18 507 * (SYN-ACKs send out by Linux are always <576bytes so
0d4f0608619de5 Eric Dumazet 2013-03-18 508 * they should go through unfragmented).
0d4f0608619de5 Eric Dumazet 2013-03-18 509 */
0d4f0608619de5 Eric Dumazet 2013-03-18 510 if (sk->sk_state == TCP_LISTEN)
0d4f0608619de5 Eric Dumazet 2013-03-18 511 goto out;
0d4f0608619de5 Eric Dumazet 2013-03-18 512
563d34d0578626 Eric Dumazet 2012-07-23 513 tp->mtu_info = info;
144d56e9104418 Eric Dumazet 2012-08-20 514 if (!sock_owned_by_user(sk)) {
563d34d0578626 Eric Dumazet 2012-07-23 515 tcp_v4_mtu_reduced(sk);
144d56e9104418 Eric Dumazet 2012-08-20 516 } else {
7aa5470c2c0926 Eric Dumazet 2016-12-03 517 if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED, &sk->sk_tsq_flags))
144d56e9104418 Eric Dumazet 2012-08-20 518 sock_hold(sk);
144d56e9104418 Eric Dumazet 2012-08-20 519 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 520 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 521 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 522
^1da177e4c3f41 Linus Torvalds 2005-04-16 523 err = icmp_err_convert[code].errno;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 524 /* check if icmp_skb allows revert of backoff
f1ecd5d9e73666 Damian Lukowski 2009-08-26 525 * (see draft-zimmermann-tcp-lcd) */
f1ecd5d9e73666 Damian Lukowski 2009-08-26 526 if (code != ICMP_NET_UNREACH && code != ICMP_HOST_UNREACH)
f1ecd5d9e73666 Damian Lukowski 2009-08-26 527 break;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 528 if (seq != tp->snd_una || !icsk->icsk_retransmits ||
0a672f74131dd6 Yuchung Cheng 2014-05-11 529 !icsk->icsk_backoff || fastopen)
f1ecd5d9e73666 Damian Lukowski 2009-08-26 530 break;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 531
8f49c2703b3351 David S. Miller 2010-11-12 532 if (sock_owned_by_user(sk))
8f49c2703b3351 David S. Miller 2010-11-12 533 break;
8f49c2703b3351 David S. Miller 2010-11-12 534
2c4cc9712364c0 Eric Dumazet 2019-02-15 535 skb = tcp_rtx_queue_head(sk);
2c4cc9712364c0 Eric Dumazet 2019-02-15 536 if (WARN_ON_ONCE(!skb))
2c4cc9712364c0 Eric Dumazet 2019-02-15 537 break;
2c4cc9712364c0 Eric Dumazet 2019-02-15 538
f1ecd5d9e73666 Damian Lukowski 2009-08-26 539 icsk->icsk_backoff--;
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 540 icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) :
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 541 TCP_TIMEOUT_INIT;
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 542 icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 543
f1ecd5d9e73666 Damian Lukowski 2009-08-26 544
9a568de4818dea Eric Dumazet 2017-05-16 545 tcp_mstamp_refresh(tp);
2fd66ffba50716 Eric Dumazet 2018-09-21 546 delta_us = (u32)(tp->tcp_mstamp - tcp_skb_timestamp_us(skb));
7faee5c0d51416 Eric Dumazet 2014-09-05 547 remaining = icsk->icsk_rto -
9a568de4818dea Eric Dumazet 2017-05-16 548 usecs_to_jiffies(delta_us);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 549
9a568de4818dea Eric Dumazet 2017-05-16 550 if (remaining > 0) {
f1ecd5d9e73666 Damian Lukowski 2009-08-26 551 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
f1ecd5d9e73666 Damian Lukowski 2009-08-26 552 remaining, TCP_RTO_MAX);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 553 } else {
f1ecd5d9e73666 Damian Lukowski 2009-08-26 554 /* RTO revert clocked out retransmission.
f1ecd5d9e73666 Damian Lukowski 2009-08-26 555 * Will retransmit now */
f1ecd5d9e73666 Damian Lukowski 2009-08-26 556 tcp_retransmit_timer(sk);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 557 }
f1ecd5d9e73666 Damian Lukowski 2009-08-26 558
^1da177e4c3f41 Linus Torvalds 2005-04-16 559 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 560 case ICMP_TIME_EXCEEDED:
^1da177e4c3f41 Linus Torvalds 2005-04-16 561 err = EHOSTUNREACH;
^1da177e4c3f41 Linus Torvalds 2005-04-16 562 break;
Or this break statement.
^1da177e4c3f41 Linus Torvalds 2005-04-16 563 default:
^1da177e4c3f41 Linus Torvalds 2005-04-16 564 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 565 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 566
^1da177e4c3f41 Linus Torvalds 2005-04-16 567 switch (sk->sk_state) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 568 case TCP_SYN_SENT:
0a672f74131dd6 Yuchung Cheng 2014-05-11 569 case TCP_SYN_RECV:
0a672f74131dd6 Yuchung Cheng 2014-05-11 570 /* Only in fast or simultaneous open. If a fast open socket is
0a672f74131dd6 Yuchung Cheng 2014-05-11 571 * is already accepted it is treated as a connected one below.
^1da177e4c3f41 Linus Torvalds 2005-04-16 572 */
51456b2914a34d Ian Morris 2015-04-03 573 if (fastopen && !fastopen->sk)
0a672f74131dd6 Yuchung Cheng 2014-05-11 574 break;
0a672f74131dd6 Yuchung Cheng 2014-05-11 575
45af29ca761c27 Eric Dumazet 2020-05-24 @576 ip_icmp_error(sk, skb, err, th->dest, info, (u8 *)th);
^^^
Smatch thinks this can be uninitialized.
45af29ca761c27 Eric Dumazet 2020-05-24 577
^1da177e4c3f41 Linus Torvalds 2005-04-16 578 if (!sock_owned_by_user(sk)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 579 sk->sk_err = err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 580
^1da177e4c3f41 Linus Torvalds 2005-04-16 581 sk->sk_error_report(sk);
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 35310 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread* [linux-next:master 12558/12912] net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
@ 2020-05-27 14:08 ` Dan Carpenter
0 siblings, 0 replies; 4+ messages in thread
From: Dan Carpenter @ 2020-05-27 14:08 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 13839 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: b0523c7b1c9d0edcd6c0fe6d2cb558a9ad5c60a8
commit: 45af29ca761c275e350cca659856bc56f1035ef9 [12558/12912] tcp: allow traceroute -Mtcp for unpriv users
config: i386-randconfig-m021-20200526 (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=45af29ca761c275e350cca659856bc56f1035ef9
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git remote update linux-next
git checkout 45af29ca761c275e350cca659856bc56f1035ef9
vim +/skb +576 net/ipv4/tcp_ipv4.c
32bbd8793f24b0 Stefano Brivio 2018-11-08 422 int tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
^1da177e4c3f41 Linus Torvalds 2005-04-16 423 {
b71d1d426d263b Eric Dumazet 2011-04-22 424 const struct iphdr *iph = (const struct iphdr *)icmp_skb->data;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 425 struct tcphdr *th = (struct tcphdr *)(icmp_skb->data + (iph->ihl << 2));
f1ecd5d9e73666 Damian Lukowski 2009-08-26 426 struct inet_connection_sock *icsk;
^1da177e4c3f41 Linus Torvalds 2005-04-16 427 struct tcp_sock *tp;
^1da177e4c3f41 Linus Torvalds 2005-04-16 428 struct inet_sock *inet;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 429 const int type = icmp_hdr(icmp_skb)->type;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 430 const int code = icmp_hdr(icmp_skb)->code;
^1da177e4c3f41 Linus Torvalds 2005-04-16 431 struct sock *sk;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 432 struct sk_buff *skb;
0a672f74131dd6 Yuchung Cheng 2014-05-11 433 struct request_sock *fastopen;
9a568de4818dea Eric Dumazet 2017-05-16 434 u32 seq, snd_una;
9a568de4818dea Eric Dumazet 2017-05-16 435 s32 remaining;
9a568de4818dea Eric Dumazet 2017-05-16 436 u32 delta_us;
^1da177e4c3f41 Linus Torvalds 2005-04-16 437 int err;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 438 struct net *net = dev_net(icmp_skb->dev);
^1da177e4c3f41 Linus Torvalds 2005-04-16 439
26e3736090e103 Eric Dumazet 2015-03-22 440 sk = __inet_lookup_established(net, &tcp_hashinfo, iph->daddr,
26e3736090e103 Eric Dumazet 2015-03-22 441 th->dest, iph->saddr, ntohs(th->source),
3fa6f616a7a4d0 David Ahern 2017-08-07 442 inet_iif(icmp_skb), 0);
^1da177e4c3f41 Linus Torvalds 2005-04-16 443 if (!sk) {
5d3848bc33b7d1 Eric Dumazet 2016-04-27 444 __ICMP_INC_STATS(net, ICMP_MIB_INERRORS);
32bbd8793f24b0 Stefano Brivio 2018-11-08 445 return -ENOENT;
^1da177e4c3f41 Linus Torvalds 2005-04-16 446 }
I guess can "sk->sk_state" start as TCP_SYN_SENT/RECV? Smatch doesn't
know.
^1da177e4c3f41 Linus Torvalds 2005-04-16 447 if (sk->sk_state == TCP_TIME_WAIT) {
9469c7b4aa210c YOSHIFUJI Hideaki 2006-10-10 448 inet_twsk_put(inet_twsk(sk));
32bbd8793f24b0 Stefano Brivio 2018-11-08 449 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 450 }
26e3736090e103 Eric Dumazet 2015-03-22 451 seq = ntohl(th->seq);
32bbd8793f24b0 Stefano Brivio 2018-11-08 452 if (sk->sk_state == TCP_NEW_SYN_RECV) {
32bbd8793f24b0 Stefano Brivio 2018-11-08 453 tcp_req_err(sk, seq, type == ICMP_PARAMETERPROB ||
9cf7490360bf2c Eric Dumazet 2016-02-02 454 type == ICMP_TIME_EXCEEDED ||
9cf7490360bf2c Eric Dumazet 2016-02-02 455 (type == ICMP_DEST_UNREACH &&
9cf7490360bf2c Eric Dumazet 2016-02-02 456 (code == ICMP_NET_UNREACH ||
9cf7490360bf2c Eric Dumazet 2016-02-02 457 code == ICMP_HOST_UNREACH)));
32bbd8793f24b0 Stefano Brivio 2018-11-08 458 return 0;
32bbd8793f24b0 Stefano Brivio 2018-11-08 459 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 460
^1da177e4c3f41 Linus Torvalds 2005-04-16 461 bh_lock_sock(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 462 /* If too many ICMPs get dropped on busy
^1da177e4c3f41 Linus Torvalds 2005-04-16 463 * servers this needs to be solved differently.
563d34d0578626 Eric Dumazet 2012-07-23 464 * We do take care of PMTU discovery (RFC1191) special case :
563d34d0578626 Eric Dumazet 2012-07-23 465 * we can receive locally generated ICMP messages while socket is held.
^1da177e4c3f41 Linus Torvalds 2005-04-16 466 */
b74aa930ef49a3 Eric Dumazet 2013-01-19 467 if (sock_owned_by_user(sk)) {
b74aa930ef49a3 Eric Dumazet 2013-01-19 468 if (!(type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED))
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 469 __NET_INC_STATS(net, LINUX_MIB_LOCKDROPPEDICMPS);
b74aa930ef49a3 Eric Dumazet 2013-01-19 470 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 471 if (sk->sk_state == TCP_CLOSE)
^1da177e4c3f41 Linus Torvalds 2005-04-16 472 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 473
97e3ecd112ba45 stephen hemminger 2010-03-18 474 if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 475 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
97e3ecd112ba45 stephen hemminger 2010-03-18 476 goto out;
97e3ecd112ba45 stephen hemminger 2010-03-18 477 }
97e3ecd112ba45 stephen hemminger 2010-03-18 478
f1ecd5d9e73666 Damian Lukowski 2009-08-26 479 icsk = inet_csk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 480 tp = tcp_sk(sk);
0a672f74131dd6 Yuchung Cheng 2014-05-11 481 /* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */
d983ea6f16b835 Eric Dumazet 2019-10-10 482 fastopen = rcu_dereference(tp->fastopen_rsk);
0a672f74131dd6 Yuchung Cheng 2014-05-11 483 snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;
^1da177e4c3f41 Linus Torvalds 2005-04-16 484 if (sk->sk_state != TCP_LISTEN &&
0a672f74131dd6 Yuchung Cheng 2014-05-11 485 !between(seq, snd_una, tp->snd_nxt)) {
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 486 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
^1da177e4c3f41 Linus Torvalds 2005-04-16 487 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 488 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 489
^1da177e4c3f41 Linus Torvalds 2005-04-16 490 switch (type) {
55be7a9c6074f7 David S. Miller 2012-07-11 491 case ICMP_REDIRECT:
45caeaa5ac0b4b Jon Maxwell 2017-03-10 492 if (!sock_owned_by_user(sk))
55be7a9c6074f7 David S. Miller 2012-07-11 493 do_redirect(icmp_skb, sk);
55be7a9c6074f7 David S. Miller 2012-07-11 494 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 495 case ICMP_SOURCE_QUENCH:
^1da177e4c3f41 Linus Torvalds 2005-04-16 496 /* Just silently ignore these. */
^1da177e4c3f41 Linus Torvalds 2005-04-16 497 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 498 case ICMP_PARAMETERPROB:
^1da177e4c3f41 Linus Torvalds 2005-04-16 499 err = EPROTO;
^1da177e4c3f41 Linus Torvalds 2005-04-16 500 break;
Then we hit a break statement
^1da177e4c3f41 Linus Torvalds 2005-04-16 501 case ICMP_DEST_UNREACH:
^1da177e4c3f41 Linus Torvalds 2005-04-16 502 if (code > NR_ICMP_UNREACH)
^1da177e4c3f41 Linus Torvalds 2005-04-16 503 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 504
^1da177e4c3f41 Linus Torvalds 2005-04-16 505 if (code == ICMP_FRAG_NEEDED) { /* PMTU discovery (RFC1191) */
0d4f0608619de5 Eric Dumazet 2013-03-18 506 /* We are not interested in TCP_LISTEN and open_requests
0d4f0608619de5 Eric Dumazet 2013-03-18 507 * (SYN-ACKs send out by Linux are always <576bytes so
0d4f0608619de5 Eric Dumazet 2013-03-18 508 * they should go through unfragmented).
0d4f0608619de5 Eric Dumazet 2013-03-18 509 */
0d4f0608619de5 Eric Dumazet 2013-03-18 510 if (sk->sk_state == TCP_LISTEN)
0d4f0608619de5 Eric Dumazet 2013-03-18 511 goto out;
0d4f0608619de5 Eric Dumazet 2013-03-18 512
563d34d0578626 Eric Dumazet 2012-07-23 513 tp->mtu_info = info;
144d56e9104418 Eric Dumazet 2012-08-20 514 if (!sock_owned_by_user(sk)) {
563d34d0578626 Eric Dumazet 2012-07-23 515 tcp_v4_mtu_reduced(sk);
144d56e9104418 Eric Dumazet 2012-08-20 516 } else {
7aa5470c2c0926 Eric Dumazet 2016-12-03 517 if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED, &sk->sk_tsq_flags))
144d56e9104418 Eric Dumazet 2012-08-20 518 sock_hold(sk);
144d56e9104418 Eric Dumazet 2012-08-20 519 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 520 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 521 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 522
^1da177e4c3f41 Linus Torvalds 2005-04-16 523 err = icmp_err_convert[code].errno;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 524 /* check if icmp_skb allows revert of backoff
f1ecd5d9e73666 Damian Lukowski 2009-08-26 525 * (see draft-zimmermann-tcp-lcd) */
f1ecd5d9e73666 Damian Lukowski 2009-08-26 526 if (code != ICMP_NET_UNREACH && code != ICMP_HOST_UNREACH)
f1ecd5d9e73666 Damian Lukowski 2009-08-26 527 break;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 528 if (seq != tp->snd_una || !icsk->icsk_retransmits ||
0a672f74131dd6 Yuchung Cheng 2014-05-11 529 !icsk->icsk_backoff || fastopen)
f1ecd5d9e73666 Damian Lukowski 2009-08-26 530 break;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 531
8f49c2703b3351 David S. Miller 2010-11-12 532 if (sock_owned_by_user(sk))
8f49c2703b3351 David S. Miller 2010-11-12 533 break;
8f49c2703b3351 David S. Miller 2010-11-12 534
2c4cc9712364c0 Eric Dumazet 2019-02-15 535 skb = tcp_rtx_queue_head(sk);
2c4cc9712364c0 Eric Dumazet 2019-02-15 536 if (WARN_ON_ONCE(!skb))
2c4cc9712364c0 Eric Dumazet 2019-02-15 537 break;
2c4cc9712364c0 Eric Dumazet 2019-02-15 538
f1ecd5d9e73666 Damian Lukowski 2009-08-26 539 icsk->icsk_backoff--;
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 540 icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) :
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 541 TCP_TIMEOUT_INIT;
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 542 icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 543
f1ecd5d9e73666 Damian Lukowski 2009-08-26 544
9a568de4818dea Eric Dumazet 2017-05-16 545 tcp_mstamp_refresh(tp);
2fd66ffba50716 Eric Dumazet 2018-09-21 546 delta_us = (u32)(tp->tcp_mstamp - tcp_skb_timestamp_us(skb));
7faee5c0d51416 Eric Dumazet 2014-09-05 547 remaining = icsk->icsk_rto -
9a568de4818dea Eric Dumazet 2017-05-16 548 usecs_to_jiffies(delta_us);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 549
9a568de4818dea Eric Dumazet 2017-05-16 550 if (remaining > 0) {
f1ecd5d9e73666 Damian Lukowski 2009-08-26 551 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
f1ecd5d9e73666 Damian Lukowski 2009-08-26 552 remaining, TCP_RTO_MAX);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 553 } else {
f1ecd5d9e73666 Damian Lukowski 2009-08-26 554 /* RTO revert clocked out retransmission.
f1ecd5d9e73666 Damian Lukowski 2009-08-26 555 * Will retransmit now */
f1ecd5d9e73666 Damian Lukowski 2009-08-26 556 tcp_retransmit_timer(sk);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 557 }
f1ecd5d9e73666 Damian Lukowski 2009-08-26 558
^1da177e4c3f41 Linus Torvalds 2005-04-16 559 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 560 case ICMP_TIME_EXCEEDED:
^1da177e4c3f41 Linus Torvalds 2005-04-16 561 err = EHOSTUNREACH;
^1da177e4c3f41 Linus Torvalds 2005-04-16 562 break;
Or this break statement.
^1da177e4c3f41 Linus Torvalds 2005-04-16 563 default:
^1da177e4c3f41 Linus Torvalds 2005-04-16 564 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 565 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 566
^1da177e4c3f41 Linus Torvalds 2005-04-16 567 switch (sk->sk_state) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 568 case TCP_SYN_SENT:
0a672f74131dd6 Yuchung Cheng 2014-05-11 569 case TCP_SYN_RECV:
0a672f74131dd6 Yuchung Cheng 2014-05-11 570 /* Only in fast or simultaneous open. If a fast open socket is
0a672f74131dd6 Yuchung Cheng 2014-05-11 571 * is already accepted it is treated as a connected one below.
^1da177e4c3f41 Linus Torvalds 2005-04-16 572 */
51456b2914a34d Ian Morris 2015-04-03 573 if (fastopen && !fastopen->sk)
0a672f74131dd6 Yuchung Cheng 2014-05-11 574 break;
0a672f74131dd6 Yuchung Cheng 2014-05-11 575
45af29ca761c27 Eric Dumazet 2020-05-24 @576 ip_icmp_error(sk, skb, err, th->dest, info, (u8 *)th);
^^^
Smatch thinks this can be uninitialized.
45af29ca761c27 Eric Dumazet 2020-05-24 577
^1da177e4c3f41 Linus Torvalds 2005-04-16 578 if (!sock_owned_by_user(sk)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 579 sk->sk_err = err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 580
^1da177e4c3f41 Linus Torvalds 2005-04-16 581 sk->sk_error_report(sk);
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 35310 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [linux-next:master 12558/12912] net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
2020-05-27 14:08 ` Dan Carpenter
(?)
@ 2020-05-27 14:36 ` Eric Dumazet
-1 siblings, 0 replies; 4+ messages in thread
From: Eric Dumazet @ 2020-05-27 14:36 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 16034 bytes --]
On Wed, May 27, 2020 at 7:08 AM Dan Carpenter <dan.carpenter@oracle.com> wrote:
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head: b0523c7b1c9d0edcd6c0fe6d2cb558a9ad5c60a8
> commit: 45af29ca761c275e350cca659856bc56f1035ef9 [12558/12912] tcp: allow traceroute -Mtcp for unpriv users
>
> config: i386-randconfig-m021-20200526 (attached as .config)
> compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kbuild test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
>
Well, this has been fixed yesterday already, I won't be able to add
these tags :)
Thanks.
> smatch warnings:
> net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
>
> # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=45af29ca761c275e350cca659856bc56f1035ef9
> git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
> git remote update linux-next
> git checkout 45af29ca761c275e350cca659856bc56f1035ef9
> vim +/skb +576 net/ipv4/tcp_ipv4.c
>
> 32bbd8793f24b0 Stefano Brivio 2018-11-08 422 int tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 423 {
> b71d1d426d263b Eric Dumazet 2011-04-22 424 const struct iphdr *iph = (const struct iphdr *)icmp_skb->data;
> 4d1a2d9ec1c17d Damian Lukowski 2009-08-26 425 struct tcphdr *th = (struct tcphdr *)(icmp_skb->data + (iph->ihl << 2));
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 426 struct inet_connection_sock *icsk;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 427 struct tcp_sock *tp;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 428 struct inet_sock *inet;
> 4d1a2d9ec1c17d Damian Lukowski 2009-08-26 429 const int type = icmp_hdr(icmp_skb)->type;
> 4d1a2d9ec1c17d Damian Lukowski 2009-08-26 430 const int code = icmp_hdr(icmp_skb)->code;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 431 struct sock *sk;
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 432 struct sk_buff *skb;
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 433 struct request_sock *fastopen;
> 9a568de4818dea Eric Dumazet 2017-05-16 434 u32 seq, snd_una;
> 9a568de4818dea Eric Dumazet 2017-05-16 435 s32 remaining;
> 9a568de4818dea Eric Dumazet 2017-05-16 436 u32 delta_us;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 437 int err;
> 4d1a2d9ec1c17d Damian Lukowski 2009-08-26 438 struct net *net = dev_net(icmp_skb->dev);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 439
> 26e3736090e103 Eric Dumazet 2015-03-22 440 sk = __inet_lookup_established(net, &tcp_hashinfo, iph->daddr,
> 26e3736090e103 Eric Dumazet 2015-03-22 441 th->dest, iph->saddr, ntohs(th->source),
> 3fa6f616a7a4d0 David Ahern 2017-08-07 442 inet_iif(icmp_skb), 0);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 443 if (!sk) {
> 5d3848bc33b7d1 Eric Dumazet 2016-04-27 444 __ICMP_INC_STATS(net, ICMP_MIB_INERRORS);
> 32bbd8793f24b0 Stefano Brivio 2018-11-08 445 return -ENOENT;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 446 }
>
> I guess can "sk->sk_state" start as TCP_SYN_SENT/RECV? Smatch doesn't
> know.
>
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 447 if (sk->sk_state == TCP_TIME_WAIT) {
> 9469c7b4aa210c YOSHIFUJI Hideaki 2006-10-10 448 inet_twsk_put(inet_twsk(sk));
> 32bbd8793f24b0 Stefano Brivio 2018-11-08 449 return 0;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 450 }
> 26e3736090e103 Eric Dumazet 2015-03-22 451 seq = ntohl(th->seq);
> 32bbd8793f24b0 Stefano Brivio 2018-11-08 452 if (sk->sk_state == TCP_NEW_SYN_RECV) {
> 32bbd8793f24b0 Stefano Brivio 2018-11-08 453 tcp_req_err(sk, seq, type == ICMP_PARAMETERPROB ||
> 9cf7490360bf2c Eric Dumazet 2016-02-02 454 type == ICMP_TIME_EXCEEDED ||
> 9cf7490360bf2c Eric Dumazet 2016-02-02 455 (type == ICMP_DEST_UNREACH &&
> 9cf7490360bf2c Eric Dumazet 2016-02-02 456 (code == ICMP_NET_UNREACH ||
> 9cf7490360bf2c Eric Dumazet 2016-02-02 457 code == ICMP_HOST_UNREACH)));
> 32bbd8793f24b0 Stefano Brivio 2018-11-08 458 return 0;
> 32bbd8793f24b0 Stefano Brivio 2018-11-08 459 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 460
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 461 bh_lock_sock(sk);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 462 /* If too many ICMPs get dropped on busy
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 463 * servers this needs to be solved differently.
> 563d34d0578626 Eric Dumazet 2012-07-23 464 * We do take care of PMTU discovery (RFC1191) special case :
> 563d34d0578626 Eric Dumazet 2012-07-23 465 * we can receive locally generated ICMP messages while socket is held.
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 466 */
> b74aa930ef49a3 Eric Dumazet 2013-01-19 467 if (sock_owned_by_user(sk)) {
> b74aa930ef49a3 Eric Dumazet 2013-01-19 468 if (!(type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED))
> 02a1d6e7a6bb02 Eric Dumazet 2016-04-27 469 __NET_INC_STATS(net, LINUX_MIB_LOCKDROPPEDICMPS);
> b74aa930ef49a3 Eric Dumazet 2013-01-19 470 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 471 if (sk->sk_state == TCP_CLOSE)
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 472 goto out;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 473
> 97e3ecd112ba45 stephen hemminger 2010-03-18 474 if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
> 02a1d6e7a6bb02 Eric Dumazet 2016-04-27 475 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
> 97e3ecd112ba45 stephen hemminger 2010-03-18 476 goto out;
> 97e3ecd112ba45 stephen hemminger 2010-03-18 477 }
> 97e3ecd112ba45 stephen hemminger 2010-03-18 478
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 479 icsk = inet_csk(sk);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 480 tp = tcp_sk(sk);
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 481 /* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */
> d983ea6f16b835 Eric Dumazet 2019-10-10 482 fastopen = rcu_dereference(tp->fastopen_rsk);
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 483 snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 484 if (sk->sk_state != TCP_LISTEN &&
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 485 !between(seq, snd_una, tp->snd_nxt)) {
> 02a1d6e7a6bb02 Eric Dumazet 2016-04-27 486 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 487 goto out;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 488 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 489
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 490 switch (type) {
> 55be7a9c6074f7 David S. Miller 2012-07-11 491 case ICMP_REDIRECT:
> 45caeaa5ac0b4b Jon Maxwell 2017-03-10 492 if (!sock_owned_by_user(sk))
> 55be7a9c6074f7 David S. Miller 2012-07-11 493 do_redirect(icmp_skb, sk);
> 55be7a9c6074f7 David S. Miller 2012-07-11 494 goto out;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 495 case ICMP_SOURCE_QUENCH:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 496 /* Just silently ignore these. */
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 497 goto out;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 498 case ICMP_PARAMETERPROB:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 499 err = EPROTO;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 500 break;
>
> Then we hit a break statement
>
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 501 case ICMP_DEST_UNREACH:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 502 if (code > NR_ICMP_UNREACH)
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 503 goto out;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 504
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 505 if (code == ICMP_FRAG_NEEDED) { /* PMTU discovery (RFC1191) */
> 0d4f0608619de5 Eric Dumazet 2013-03-18 506 /* We are not interested in TCP_LISTEN and open_requests
> 0d4f0608619de5 Eric Dumazet 2013-03-18 507 * (SYN-ACKs send out by Linux are always <576bytes so
> 0d4f0608619de5 Eric Dumazet 2013-03-18 508 * they should go through unfragmented).
> 0d4f0608619de5 Eric Dumazet 2013-03-18 509 */
> 0d4f0608619de5 Eric Dumazet 2013-03-18 510 if (sk->sk_state == TCP_LISTEN)
> 0d4f0608619de5 Eric Dumazet 2013-03-18 511 goto out;
> 0d4f0608619de5 Eric Dumazet 2013-03-18 512
> 563d34d0578626 Eric Dumazet 2012-07-23 513 tp->mtu_info = info;
> 144d56e9104418 Eric Dumazet 2012-08-20 514 if (!sock_owned_by_user(sk)) {
> 563d34d0578626 Eric Dumazet 2012-07-23 515 tcp_v4_mtu_reduced(sk);
> 144d56e9104418 Eric Dumazet 2012-08-20 516 } else {
> 7aa5470c2c0926 Eric Dumazet 2016-12-03 517 if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED, &sk->sk_tsq_flags))
> 144d56e9104418 Eric Dumazet 2012-08-20 518 sock_hold(sk);
> 144d56e9104418 Eric Dumazet 2012-08-20 519 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 520 goto out;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 521 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 522
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 523 err = icmp_err_convert[code].errno;
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 524 /* check if icmp_skb allows revert of backoff
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 525 * (see draft-zimmermann-tcp-lcd) */
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 526 if (code != ICMP_NET_UNREACH && code != ICMP_HOST_UNREACH)
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 527 break;
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 528 if (seq != tp->snd_una || !icsk->icsk_retransmits ||
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 529 !icsk->icsk_backoff || fastopen)
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 530 break;
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 531
> 8f49c2703b3351 David S. Miller 2010-11-12 532 if (sock_owned_by_user(sk))
> 8f49c2703b3351 David S. Miller 2010-11-12 533 break;
> 8f49c2703b3351 David S. Miller 2010-11-12 534
> 2c4cc9712364c0 Eric Dumazet 2019-02-15 535 skb = tcp_rtx_queue_head(sk);
> 2c4cc9712364c0 Eric Dumazet 2019-02-15 536 if (WARN_ON_ONCE(!skb))
> 2c4cc9712364c0 Eric Dumazet 2019-02-15 537 break;
> 2c4cc9712364c0 Eric Dumazet 2019-02-15 538
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 539 icsk->icsk_backoff--;
> fcdd1cf4dd63ae Eric Dumazet 2014-09-22 540 icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) :
> fcdd1cf4dd63ae Eric Dumazet 2014-09-22 541 TCP_TIMEOUT_INIT;
> fcdd1cf4dd63ae Eric Dumazet 2014-09-22 542 icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX);
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 543
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 544
> 9a568de4818dea Eric Dumazet 2017-05-16 545 tcp_mstamp_refresh(tp);
> 2fd66ffba50716 Eric Dumazet 2018-09-21 546 delta_us = (u32)(tp->tcp_mstamp - tcp_skb_timestamp_us(skb));
> 7faee5c0d51416 Eric Dumazet 2014-09-05 547 remaining = icsk->icsk_rto -
> 9a568de4818dea Eric Dumazet 2017-05-16 548 usecs_to_jiffies(delta_us);
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 549
> 9a568de4818dea Eric Dumazet 2017-05-16 550 if (remaining > 0) {
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 551 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 552 remaining, TCP_RTO_MAX);
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 553 } else {
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 554 /* RTO revert clocked out retransmission.
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 555 * Will retransmit now */
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 556 tcp_retransmit_timer(sk);
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 557 }
> f1ecd5d9e73666 Damian Lukowski 2009-08-26 558
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 559 break;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 560 case ICMP_TIME_EXCEEDED:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 561 err = EHOSTUNREACH;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 562 break;
>
> Or this break statement.
>
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 563 default:
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 564 goto out;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 565 }
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 566
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 567 switch (sk->sk_state) {
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 568 case TCP_SYN_SENT:
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 569 case TCP_SYN_RECV:
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 570 /* Only in fast or simultaneous open. If a fast open socket is
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 571 * is already accepted it is treated as a connected one below.
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 572 */
> 51456b2914a34d Ian Morris 2015-04-03 573 if (fastopen && !fastopen->sk)
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 574 break;
> 0a672f74131dd6 Yuchung Cheng 2014-05-11 575
> 45af29ca761c27 Eric Dumazet 2020-05-24 @576 ip_icmp_error(sk, skb, err, th->dest, info, (u8 *)th);
> ^^^
> Smatch thinks this can be uninitialized.
>
> 45af29ca761c27 Eric Dumazet 2020-05-24 577
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 578 if (!sock_owned_by_user(sk)) {
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 579 sk->sk_err = err;
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 580
> ^1da177e4c3f41 Linus Torvalds 2005-04-16 581 sk->sk_error_report(sk);
>
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 4+ messages in thread
* [linux-next:master 12558/12912] net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
@ 2020-05-26 16:29 kbuild test robot
0 siblings, 0 replies; 4+ messages in thread
From: kbuild test robot @ 2020-05-26 16:29 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 18090 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Eric Dumazet <edumazet@google.com>
CC: "Maciej Żenczykowski" <maze@google.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: b0523c7b1c9d0edcd6c0fe6d2cb558a9ad5c60a8
commit: 45af29ca761c275e350cca659856bc56f1035ef9 [12558/12912] tcp: allow traceroute -Mtcp for unpriv users
:::::: branch date: 6 hours ago
:::::: commit date: 16 hours ago
config: i386-randconfig-m021-20200526 (attached as .config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb'.
# https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=45af29ca761c275e350cca659856bc56f1035ef9
git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git remote update linux-next
git checkout 45af29ca761c275e350cca659856bc56f1035ef9
vim +/skb +576 net/ipv4/tcp_ipv4.c
26e3736090e103 Eric Dumazet 2015-03-22 405
^1da177e4c3f41 Linus Torvalds 2005-04-16 406 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 407 * This routine is called by the ICMP module when it gets some
^1da177e4c3f41 Linus Torvalds 2005-04-16 408 * sort of error condition. If err < 0 then the socket should
^1da177e4c3f41 Linus Torvalds 2005-04-16 409 * be closed and the error returned to the user. If err > 0
^1da177e4c3f41 Linus Torvalds 2005-04-16 410 * it's just the icmp type << 8 | icmp code. After adjustment
^1da177e4c3f41 Linus Torvalds 2005-04-16 411 * header points to the first 8 bytes of the tcp header. We need
^1da177e4c3f41 Linus Torvalds 2005-04-16 412 * to find the appropriate port.
^1da177e4c3f41 Linus Torvalds 2005-04-16 413 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 414 * The locking strategy used here is very "optimistic". When
^1da177e4c3f41 Linus Torvalds 2005-04-16 415 * someone else accesses the socket the ICMP is just dropped
^1da177e4c3f41 Linus Torvalds 2005-04-16 416 * and for some paths there is no check@all.
^1da177e4c3f41 Linus Torvalds 2005-04-16 417 * A more general error queue to queue errors for later handling
^1da177e4c3f41 Linus Torvalds 2005-04-16 418 * is probably better.
^1da177e4c3f41 Linus Torvalds 2005-04-16 419 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 420 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 421
32bbd8793f24b0 Stefano Brivio 2018-11-08 422 int tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
^1da177e4c3f41 Linus Torvalds 2005-04-16 423 {
b71d1d426d263b Eric Dumazet 2011-04-22 424 const struct iphdr *iph = (const struct iphdr *)icmp_skb->data;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 425 struct tcphdr *th = (struct tcphdr *)(icmp_skb->data + (iph->ihl << 2));
f1ecd5d9e73666 Damian Lukowski 2009-08-26 426 struct inet_connection_sock *icsk;
^1da177e4c3f41 Linus Torvalds 2005-04-16 427 struct tcp_sock *tp;
^1da177e4c3f41 Linus Torvalds 2005-04-16 428 struct inet_sock *inet;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 429 const int type = icmp_hdr(icmp_skb)->type;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 430 const int code = icmp_hdr(icmp_skb)->code;
^1da177e4c3f41 Linus Torvalds 2005-04-16 431 struct sock *sk;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 432 struct sk_buff *skb;
0a672f74131dd6 Yuchung Cheng 2014-05-11 433 struct request_sock *fastopen;
9a568de4818dea Eric Dumazet 2017-05-16 434 u32 seq, snd_una;
9a568de4818dea Eric Dumazet 2017-05-16 435 s32 remaining;
9a568de4818dea Eric Dumazet 2017-05-16 436 u32 delta_us;
^1da177e4c3f41 Linus Torvalds 2005-04-16 437 int err;
4d1a2d9ec1c17d Damian Lukowski 2009-08-26 438 struct net *net = dev_net(icmp_skb->dev);
^1da177e4c3f41 Linus Torvalds 2005-04-16 439
26e3736090e103 Eric Dumazet 2015-03-22 440 sk = __inet_lookup_established(net, &tcp_hashinfo, iph->daddr,
26e3736090e103 Eric Dumazet 2015-03-22 441 th->dest, iph->saddr, ntohs(th->source),
3fa6f616a7a4d0 David Ahern 2017-08-07 442 inet_iif(icmp_skb), 0);
^1da177e4c3f41 Linus Torvalds 2005-04-16 443 if (!sk) {
5d3848bc33b7d1 Eric Dumazet 2016-04-27 444 __ICMP_INC_STATS(net, ICMP_MIB_INERRORS);
32bbd8793f24b0 Stefano Brivio 2018-11-08 445 return -ENOENT;
^1da177e4c3f41 Linus Torvalds 2005-04-16 446 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 447 if (sk->sk_state == TCP_TIME_WAIT) {
9469c7b4aa210c YOSHIFUJI Hideaki 2006-10-10 448 inet_twsk_put(inet_twsk(sk));
32bbd8793f24b0 Stefano Brivio 2018-11-08 449 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 450 }
26e3736090e103 Eric Dumazet 2015-03-22 451 seq = ntohl(th->seq);
32bbd8793f24b0 Stefano Brivio 2018-11-08 452 if (sk->sk_state == TCP_NEW_SYN_RECV) {
32bbd8793f24b0 Stefano Brivio 2018-11-08 453 tcp_req_err(sk, seq, type == ICMP_PARAMETERPROB ||
9cf7490360bf2c Eric Dumazet 2016-02-02 454 type == ICMP_TIME_EXCEEDED ||
9cf7490360bf2c Eric Dumazet 2016-02-02 455 (type == ICMP_DEST_UNREACH &&
9cf7490360bf2c Eric Dumazet 2016-02-02 456 (code == ICMP_NET_UNREACH ||
9cf7490360bf2c Eric Dumazet 2016-02-02 457 code == ICMP_HOST_UNREACH)));
32bbd8793f24b0 Stefano Brivio 2018-11-08 458 return 0;
32bbd8793f24b0 Stefano Brivio 2018-11-08 459 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 460
^1da177e4c3f41 Linus Torvalds 2005-04-16 461 bh_lock_sock(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 462 /* If too many ICMPs get dropped on busy
^1da177e4c3f41 Linus Torvalds 2005-04-16 463 * servers this needs to be solved differently.
563d34d0578626 Eric Dumazet 2012-07-23 464 * We do take care of PMTU discovery (RFC1191) special case :
563d34d0578626 Eric Dumazet 2012-07-23 465 * we can receive locally generated ICMP messages while socket is held.
^1da177e4c3f41 Linus Torvalds 2005-04-16 466 */
b74aa930ef49a3 Eric Dumazet 2013-01-19 467 if (sock_owned_by_user(sk)) {
b74aa930ef49a3 Eric Dumazet 2013-01-19 468 if (!(type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED))
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 469 __NET_INC_STATS(net, LINUX_MIB_LOCKDROPPEDICMPS);
b74aa930ef49a3 Eric Dumazet 2013-01-19 470 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 471 if (sk->sk_state == TCP_CLOSE)
^1da177e4c3f41 Linus Torvalds 2005-04-16 472 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 473
97e3ecd112ba45 stephen hemminger 2010-03-18 474 if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 475 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
97e3ecd112ba45 stephen hemminger 2010-03-18 476 goto out;
97e3ecd112ba45 stephen hemminger 2010-03-18 477 }
97e3ecd112ba45 stephen hemminger 2010-03-18 478
f1ecd5d9e73666 Damian Lukowski 2009-08-26 479 icsk = inet_csk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 480 tp = tcp_sk(sk);
0a672f74131dd6 Yuchung Cheng 2014-05-11 481 /* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */
d983ea6f16b835 Eric Dumazet 2019-10-10 482 fastopen = rcu_dereference(tp->fastopen_rsk);
0a672f74131dd6 Yuchung Cheng 2014-05-11 483 snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;
^1da177e4c3f41 Linus Torvalds 2005-04-16 484 if (sk->sk_state != TCP_LISTEN &&
0a672f74131dd6 Yuchung Cheng 2014-05-11 485 !between(seq, snd_una, tp->snd_nxt)) {
02a1d6e7a6bb02 Eric Dumazet 2016-04-27 486 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
^1da177e4c3f41 Linus Torvalds 2005-04-16 487 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 488 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 489
^1da177e4c3f41 Linus Torvalds 2005-04-16 490 switch (type) {
55be7a9c6074f7 David S. Miller 2012-07-11 491 case ICMP_REDIRECT:
45caeaa5ac0b4b Jon Maxwell 2017-03-10 492 if (!sock_owned_by_user(sk))
55be7a9c6074f7 David S. Miller 2012-07-11 493 do_redirect(icmp_skb, sk);
55be7a9c6074f7 David S. Miller 2012-07-11 494 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 495 case ICMP_SOURCE_QUENCH:
^1da177e4c3f41 Linus Torvalds 2005-04-16 496 /* Just silently ignore these. */
^1da177e4c3f41 Linus Torvalds 2005-04-16 497 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 498 case ICMP_PARAMETERPROB:
^1da177e4c3f41 Linus Torvalds 2005-04-16 499 err = EPROTO;
^1da177e4c3f41 Linus Torvalds 2005-04-16 500 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 501 case ICMP_DEST_UNREACH:
^1da177e4c3f41 Linus Torvalds 2005-04-16 502 if (code > NR_ICMP_UNREACH)
^1da177e4c3f41 Linus Torvalds 2005-04-16 503 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 504
^1da177e4c3f41 Linus Torvalds 2005-04-16 505 if (code == ICMP_FRAG_NEEDED) { /* PMTU discovery (RFC1191) */
0d4f0608619de5 Eric Dumazet 2013-03-18 506 /* We are not interested in TCP_LISTEN and open_requests
0d4f0608619de5 Eric Dumazet 2013-03-18 507 * (SYN-ACKs send out by Linux are always <576bytes so
0d4f0608619de5 Eric Dumazet 2013-03-18 508 * they should go through unfragmented).
0d4f0608619de5 Eric Dumazet 2013-03-18 509 */
0d4f0608619de5 Eric Dumazet 2013-03-18 510 if (sk->sk_state == TCP_LISTEN)
0d4f0608619de5 Eric Dumazet 2013-03-18 511 goto out;
0d4f0608619de5 Eric Dumazet 2013-03-18 512
563d34d0578626 Eric Dumazet 2012-07-23 513 tp->mtu_info = info;
144d56e9104418 Eric Dumazet 2012-08-20 514 if (!sock_owned_by_user(sk)) {
563d34d0578626 Eric Dumazet 2012-07-23 515 tcp_v4_mtu_reduced(sk);
144d56e9104418 Eric Dumazet 2012-08-20 516 } else {
7aa5470c2c0926 Eric Dumazet 2016-12-03 517 if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED, &sk->sk_tsq_flags))
144d56e9104418 Eric Dumazet 2012-08-20 518 sock_hold(sk);
144d56e9104418 Eric Dumazet 2012-08-20 519 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 520 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 521 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 522
^1da177e4c3f41 Linus Torvalds 2005-04-16 523 err = icmp_err_convert[code].errno;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 524 /* check if icmp_skb allows revert of backoff
f1ecd5d9e73666 Damian Lukowski 2009-08-26 525 * (see draft-zimmermann-tcp-lcd) */
f1ecd5d9e73666 Damian Lukowski 2009-08-26 526 if (code != ICMP_NET_UNREACH && code != ICMP_HOST_UNREACH)
f1ecd5d9e73666 Damian Lukowski 2009-08-26 527 break;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 528 if (seq != tp->snd_una || !icsk->icsk_retransmits ||
0a672f74131dd6 Yuchung Cheng 2014-05-11 529 !icsk->icsk_backoff || fastopen)
f1ecd5d9e73666 Damian Lukowski 2009-08-26 530 break;
f1ecd5d9e73666 Damian Lukowski 2009-08-26 531
8f49c2703b3351 David S. Miller 2010-11-12 532 if (sock_owned_by_user(sk))
8f49c2703b3351 David S. Miller 2010-11-12 533 break;
8f49c2703b3351 David S. Miller 2010-11-12 534
2c4cc9712364c0 Eric Dumazet 2019-02-15 535 skb = tcp_rtx_queue_head(sk);
2c4cc9712364c0 Eric Dumazet 2019-02-15 536 if (WARN_ON_ONCE(!skb))
2c4cc9712364c0 Eric Dumazet 2019-02-15 537 break;
2c4cc9712364c0 Eric Dumazet 2019-02-15 538
f1ecd5d9e73666 Damian Lukowski 2009-08-26 539 icsk->icsk_backoff--;
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 540 icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) :
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 541 TCP_TIMEOUT_INIT;
fcdd1cf4dd63ae Eric Dumazet 2014-09-22 542 icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 543
f1ecd5d9e73666 Damian Lukowski 2009-08-26 544
9a568de4818dea Eric Dumazet 2017-05-16 545 tcp_mstamp_refresh(tp);
2fd66ffba50716 Eric Dumazet 2018-09-21 546 delta_us = (u32)(tp->tcp_mstamp - tcp_skb_timestamp_us(skb));
7faee5c0d51416 Eric Dumazet 2014-09-05 547 remaining = icsk->icsk_rto -
9a568de4818dea Eric Dumazet 2017-05-16 548 usecs_to_jiffies(delta_us);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 549
9a568de4818dea Eric Dumazet 2017-05-16 550 if (remaining > 0) {
f1ecd5d9e73666 Damian Lukowski 2009-08-26 551 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
f1ecd5d9e73666 Damian Lukowski 2009-08-26 552 remaining, TCP_RTO_MAX);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 553 } else {
f1ecd5d9e73666 Damian Lukowski 2009-08-26 554 /* RTO revert clocked out retransmission.
f1ecd5d9e73666 Damian Lukowski 2009-08-26 555 * Will retransmit now */
f1ecd5d9e73666 Damian Lukowski 2009-08-26 556 tcp_retransmit_timer(sk);
f1ecd5d9e73666 Damian Lukowski 2009-08-26 557 }
f1ecd5d9e73666 Damian Lukowski 2009-08-26 558
^1da177e4c3f41 Linus Torvalds 2005-04-16 559 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 560 case ICMP_TIME_EXCEEDED:
^1da177e4c3f41 Linus Torvalds 2005-04-16 561 err = EHOSTUNREACH;
^1da177e4c3f41 Linus Torvalds 2005-04-16 562 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 563 default:
^1da177e4c3f41 Linus Torvalds 2005-04-16 564 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 565 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 566
^1da177e4c3f41 Linus Torvalds 2005-04-16 567 switch (sk->sk_state) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 568 case TCP_SYN_SENT:
0a672f74131dd6 Yuchung Cheng 2014-05-11 569 case TCP_SYN_RECV:
0a672f74131dd6 Yuchung Cheng 2014-05-11 570 /* Only in fast or simultaneous open. If a fast open socket is
0a672f74131dd6 Yuchung Cheng 2014-05-11 571 * is already accepted it is treated as a connected one below.
^1da177e4c3f41 Linus Torvalds 2005-04-16 572 */
51456b2914a34d Ian Morris 2015-04-03 573 if (fastopen && !fastopen->sk)
0a672f74131dd6 Yuchung Cheng 2014-05-11 574 break;
0a672f74131dd6 Yuchung Cheng 2014-05-11 575
45af29ca761c27 Eric Dumazet 2020-05-24 @576 ip_icmp_error(sk, skb, err, th->dest, info, (u8 *)th);
45af29ca761c27 Eric Dumazet 2020-05-24 577
^1da177e4c3f41 Linus Torvalds 2005-04-16 578 if (!sock_owned_by_user(sk)) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 579 sk->sk_err = err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 580
^1da177e4c3f41 Linus Torvalds 2005-04-16 581 sk->sk_error_report(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 582
^1da177e4c3f41 Linus Torvalds 2005-04-16 583 tcp_done(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 584 } else {
^1da177e4c3f41 Linus Torvalds 2005-04-16 585 sk->sk_err_soft = err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 586 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 587 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 588 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 589
^1da177e4c3f41 Linus Torvalds 2005-04-16 590 /* If we've already connected we will keep trying
^1da177e4c3f41 Linus Torvalds 2005-04-16 591 * until we time out, or the user gives up.
^1da177e4c3f41 Linus Torvalds 2005-04-16 592 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 593 * rfc1122 4.2.3.9 allows to consider as hard errors
^1da177e4c3f41 Linus Torvalds 2005-04-16 594 * only PROTO_UNREACH and PORT_UNREACH (well, FRAG_FAILED too,
^1da177e4c3f41 Linus Torvalds 2005-04-16 595 * but it is obsoleted by pmtu discovery).
^1da177e4c3f41 Linus Torvalds 2005-04-16 596 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 597 * Note, that in modern internet, where routing is unreliable
^1da177e4c3f41 Linus Torvalds 2005-04-16 598 * and in each dark corner broken firewalls sit, sending random
^1da177e4c3f41 Linus Torvalds 2005-04-16 599 * errors ordered by their masters even this two messages finally lose
^1da177e4c3f41 Linus Torvalds 2005-04-16 600 * their original sense (even Linux sends invalid PORT_UNREACHs)
^1da177e4c3f41 Linus Torvalds 2005-04-16 601 *
^1da177e4c3f41 Linus Torvalds 2005-04-16 602 * Now we are in compliance with RFCs.
^1da177e4c3f41 Linus Torvalds 2005-04-16 603 * --ANK (980905)
^1da177e4c3f41 Linus Torvalds 2005-04-16 604 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 605
^1da177e4c3f41 Linus Torvalds 2005-04-16 606 inet = inet_sk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 607 if (!sock_owned_by_user(sk) && inet->recverr) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 608 sk->sk_err = err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 609 sk->sk_error_report(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 610 } else { /* Only an error on timeout */
^1da177e4c3f41 Linus Torvalds 2005-04-16 611 sk->sk_err_soft = err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 612 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 613
^1da177e4c3f41 Linus Torvalds 2005-04-16 614 out:
^1da177e4c3f41 Linus Torvalds 2005-04-16 615 bh_unlock_sock(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 616 sock_put(sk);
32bbd8793f24b0 Stefano Brivio 2018-11-08 617 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 618 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 619
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 35310 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-05-27 14:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-27 14:08 [linux-next:master 12558/12912] net/ipv4/tcp_ipv4.c:576 tcp_v4_err() error: uninitialized symbol 'skb' Dan Carpenter
2020-05-27 14:08 ` Dan Carpenter
2020-05-27 14:36 ` Eric Dumazet
-- strict thread matches above, loose matches on Subject: below --
2020-05-26 16:29 kbuild test robot
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.