From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: net/kcm/kcmsock.c:645 kcm_write_msgs() error: we previously assumed 'psock' could be null (see line 585)
Date: Sat, 22 Jan 2022 03:31:25 +0800 [thread overview]
Message-ID: <202201220354.fJ3VzqBt-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 13428 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Christophe Leroy <christophe.leroy@csgroup.eu>
CC: Michael Ellerman <mpe@ellerman.id.au>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 9b57f458985742bd1c585f4c7f36d04634ce1143
commit: 1e688dd2a3d6759d416616ff07afc4bb836c4213 powerpc/bug: Provide better flexibility to WARN_ON/__WARN_FLAGS() with asm goto
date: 5 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 5 months ago
config: powerpc64-randconfig-m031-20220120 (https://download.01.org/0day-ci/archive/20220122/202201220354.fJ3VzqBt-lkp(a)intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
net/kcm/kcmsock.c:645 kcm_write_msgs() error: we previously assumed 'psock' could be null (see line 585)
vim +/psock +645 net/kcm/kcmsock.c
cd6e111bf5be5c7 Tom Herbert 2016-03-07 569
ab7ac4eb9832e32 Tom Herbert 2016-03-07 570 /* Write any messages ready on the kcm socket. Called with kcm sock lock
ab7ac4eb9832e32 Tom Herbert 2016-03-07 571 * held. Return bytes actually sent or error.
ab7ac4eb9832e32 Tom Herbert 2016-03-07 572 */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 573 static int kcm_write_msgs(struct kcm_sock *kcm)
ab7ac4eb9832e32 Tom Herbert 2016-03-07 574 {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 575 struct sock *sk = &kcm->sk;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 576 struct kcm_psock *psock;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 577 struct sk_buff *skb, *head;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 578 struct kcm_tx_msg *txm;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 579 unsigned short fragidx, frag_offset;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 580 unsigned int sent, total_sent = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 581 int ret = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 582
ab7ac4eb9832e32 Tom Herbert 2016-03-07 583 kcm->tx_wait_more = false;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 584 psock = kcm->tx_psock;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 @585 if (unlikely(psock && psock->tx_stopped)) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 586 /* A reserved psock was aborted asynchronously. Unreserve
ab7ac4eb9832e32 Tom Herbert 2016-03-07 587 * it and we'll retry the message.
ab7ac4eb9832e32 Tom Herbert 2016-03-07 588 */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 589 unreserve_psock(kcm);
cd6e111bf5be5c7 Tom Herbert 2016-03-07 590 kcm_report_tx_retry(kcm);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 591 if (skb_queue_empty(&sk->sk_write_queue))
ab7ac4eb9832e32 Tom Herbert 2016-03-07 592 return 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 593
ab7ac4eb9832e32 Tom Herbert 2016-03-07 594 kcm_tx_msg(skb_peek(&sk->sk_write_queue))->sent = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 595
ab7ac4eb9832e32 Tom Herbert 2016-03-07 596 } else if (skb_queue_empty(&sk->sk_write_queue)) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 597 return 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 598 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 599
ab7ac4eb9832e32 Tom Herbert 2016-03-07 600 head = skb_peek(&sk->sk_write_queue);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 601 txm = kcm_tx_msg(head);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 602
ab7ac4eb9832e32 Tom Herbert 2016-03-07 603 if (txm->sent) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 604 /* Send of first skbuff in queue already in progress */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 605 if (WARN_ON(!psock)) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 606 ret = -EINVAL;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 607 goto out;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 608 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 609 sent = txm->sent;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 610 frag_offset = txm->frag_offset;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 611 fragidx = txm->fragidx;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 612 skb = txm->frag_skb;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 613
ab7ac4eb9832e32 Tom Herbert 2016-03-07 614 goto do_frag;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 615 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 616
ab7ac4eb9832e32 Tom Herbert 2016-03-07 617 try_again:
ab7ac4eb9832e32 Tom Herbert 2016-03-07 618 psock = reserve_psock(kcm);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 619 if (!psock)
ab7ac4eb9832e32 Tom Herbert 2016-03-07 620 goto out;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 621
ab7ac4eb9832e32 Tom Herbert 2016-03-07 622 do {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 623 skb = head;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 624 txm = kcm_tx_msg(head);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 625 sent = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 626
ab7ac4eb9832e32 Tom Herbert 2016-03-07 627 do_frag_list:
ab7ac4eb9832e32 Tom Herbert 2016-03-07 628 if (WARN_ON(!skb_shinfo(skb)->nr_frags)) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 629 ret = -EINVAL;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 630 goto out;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 631 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 632
ab7ac4eb9832e32 Tom Herbert 2016-03-07 633 for (fragidx = 0; fragidx < skb_shinfo(skb)->nr_frags;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 634 fragidx++) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 635 skb_frag_t *frag;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 636
ab7ac4eb9832e32 Tom Herbert 2016-03-07 637 frag_offset = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 638 do_frag:
ab7ac4eb9832e32 Tom Herbert 2016-03-07 639 frag = &skb_shinfo(skb)->frags[fragidx];
d8e18a516f8f674 Matthew Wilcox (Oracle 2019-07-22 640) if (WARN_ON(!skb_frag_size(frag))) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 641 ret = -EINVAL;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 642 goto out;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 643 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 644
ab7ac4eb9832e32 Tom Herbert 2016-03-07 @645 ret = kernel_sendpage(psock->sk->sk_socket,
d8e18a516f8f674 Matthew Wilcox (Oracle 2019-07-22 646) skb_frag_page(frag),
b54c9d5bd6e38ed Jonathan Lemon 2019-07-30 647 skb_frag_off(frag) + frag_offset,
d8e18a516f8f674 Matthew Wilcox (Oracle 2019-07-22 648) skb_frag_size(frag) - frag_offset,
ab7ac4eb9832e32 Tom Herbert 2016-03-07 649 MSG_DONTWAIT);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 650 if (ret <= 0) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 651 if (ret == -EAGAIN) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 652 /* Save state to try again when there's
ab7ac4eb9832e32 Tom Herbert 2016-03-07 653 * write space on the socket
ab7ac4eb9832e32 Tom Herbert 2016-03-07 654 */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 655 txm->sent = sent;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 656 txm->frag_offset = frag_offset;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 657 txm->fragidx = fragidx;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 658 txm->frag_skb = skb;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 659
ab7ac4eb9832e32 Tom Herbert 2016-03-07 660 ret = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 661 goto out;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 662 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 663
ab7ac4eb9832e32 Tom Herbert 2016-03-07 664 /* Hard failure in sending message, abort this
ab7ac4eb9832e32 Tom Herbert 2016-03-07 665 * psock since it has lost framing
71a2fae50895b32 Bhaskar Chowdhury 2021-03-27 666 * synchronization and retry sending the
ab7ac4eb9832e32 Tom Herbert 2016-03-07 667 * message from the beginning.
ab7ac4eb9832e32 Tom Herbert 2016-03-07 668 */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 669 kcm_abort_tx_psock(psock, ret ? -ret : EPIPE,
ab7ac4eb9832e32 Tom Herbert 2016-03-07 670 true);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 671 unreserve_psock(kcm);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 672
ab7ac4eb9832e32 Tom Herbert 2016-03-07 673 txm->sent = 0;
cd6e111bf5be5c7 Tom Herbert 2016-03-07 674 kcm_report_tx_retry(kcm);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 675 ret = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 676
ab7ac4eb9832e32 Tom Herbert 2016-03-07 677 goto try_again;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 678 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 679
ab7ac4eb9832e32 Tom Herbert 2016-03-07 680 sent += ret;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 681 frag_offset += ret;
cd6e111bf5be5c7 Tom Herbert 2016-03-07 682 KCM_STATS_ADD(psock->stats.tx_bytes, ret);
d8e18a516f8f674 Matthew Wilcox (Oracle 2019-07-22 683) if (frag_offset < skb_frag_size(frag)) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 684 /* Not finished with this frag */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 685 goto do_frag;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 686 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 687 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 688
ab7ac4eb9832e32 Tom Herbert 2016-03-07 689 if (skb == head) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 690 if (skb_has_frag_list(skb)) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 691 skb = skb_shinfo(skb)->frag_list;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 692 goto do_frag_list;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 693 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 694 } else if (skb->next) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 695 skb = skb->next;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 696 goto do_frag_list;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 697 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 698
ab7ac4eb9832e32 Tom Herbert 2016-03-07 699 /* Successfully sent the whole packet, account for it. */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 700 skb_dequeue(&sk->sk_write_queue);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 701 kfree_skb(head);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 702 sk->sk_wmem_queued -= sent;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 703 total_sent += sent;
cd6e111bf5be5c7 Tom Herbert 2016-03-07 704 KCM_STATS_INCR(psock->stats.tx_msgs);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 705 } while ((head = skb_peek(&sk->sk_write_queue)));
ab7ac4eb9832e32 Tom Herbert 2016-03-07 706 out:
ab7ac4eb9832e32 Tom Herbert 2016-03-07 707 if (!head) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 708 /* Done with all queued messages. */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 709 WARN_ON(!skb_queue_empty(&sk->sk_write_queue));
ab7ac4eb9832e32 Tom Herbert 2016-03-07 710 unreserve_psock(kcm);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 711 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 712
ab7ac4eb9832e32 Tom Herbert 2016-03-07 713 /* Check if write space is available */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 714 sk->sk_write_space(sk);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 715
ab7ac4eb9832e32 Tom Herbert 2016-03-07 716 return total_sent ? : ret;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 717 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 718
:::::: The code at line 645 was first introduced by commit
:::::: ab7ac4eb9832e32a09f4e8042705484d2fb0aad3 kcm: Kernel Connection Multiplexor module
:::::: TO: Tom Herbert <tom@herbertland.com>
:::::: CC: David S. Miller <davem@davemloft.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: net/kcm/kcmsock.c:645 kcm_write_msgs() error: we previously assumed 'psock' could be null (see line 585)
Date: Tue, 25 Jan 2022 17:47:12 +0300 [thread overview]
Message-ID: <202201220354.fJ3VzqBt-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 3255 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 9b57f458985742bd1c585f4c7f36d04634ce1143
commit: 1e688dd2a3d6759d416616ff07afc4bb836c4213 powerpc/bug: Provide better flexibility to WARN_ON/__WARN_FLAGS() with asm goto
config: powerpc64-randconfig-m031-20220120 (https://download.01.org/0day-ci/archive/20220122/202201220354.fJ3VzqBt-lkp(a)intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
net/kcm/kcmsock.c:645 kcm_write_msgs() error: we previously assumed 'psock' could be null (see line 585)
vim +/psock +645 net/kcm/kcmsock.c
ab7ac4eb9832e32 Tom Herbert 2016-03-07 589 unreserve_psock(kcm);
cd6e111bf5be5c7 Tom Herbert 2016-03-07 590 kcm_report_tx_retry(kcm);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 591 if (skb_queue_empty(&sk->sk_write_queue))
ab7ac4eb9832e32 Tom Herbert 2016-03-07 592 return 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 593
ab7ac4eb9832e32 Tom Herbert 2016-03-07 594 kcm_tx_msg(skb_peek(&sk->sk_write_queue))->sent = 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 595
ab7ac4eb9832e32 Tom Herbert 2016-03-07 596 } else if (skb_queue_empty(&sk->sk_write_queue)) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 597 return 0;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 598 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 599
ab7ac4eb9832e32 Tom Herbert 2016-03-07 600 head = skb_peek(&sk->sk_write_queue);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 601 txm = kcm_tx_msg(head);
ab7ac4eb9832e32 Tom Herbert 2016-03-07 602
ab7ac4eb9832e32 Tom Herbert 2016-03-07 603 if (txm->sent) {
ab7ac4eb9832e32 Tom Herbert 2016-03-07 604 /* Send of first skbuff in queue already in progress */
ab7ac4eb9832e32 Tom Herbert 2016-03-07 605 if (WARN_ON(!psock)) {
This warning is a false positive.
The new Power PC implementation of WARN_ON() is written in asm and
Smatch can only parse C. I don't have a cross compile system set up so
fixing this is going to be a big headache. :/
ab7ac4eb9832e32 Tom Herbert 2016-03-07 606 ret = -EINVAL;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 607 goto out;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 608 }
ab7ac4eb9832e32 Tom Herbert 2016-03-07 609 sent = txm->sent;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 610 frag_offset = txm->frag_offset;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 611 fragidx = txm->fragidx;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 612 skb = txm->frag_skb;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 613
ab7ac4eb9832e32 Tom Herbert 2016-03-07 614 goto do_frag;
ab7ac4eb9832e32 Tom Herbert 2016-03-07 615 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next reply other threads:[~2022-01-21 19:31 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-21 19:31 kernel test robot [this message]
2022-01-25 14:47 ` net/kcm/kcmsock.c:645 kcm_write_msgs() error: we previously assumed 'psock' could be null (see line 585) Dan Carpenter
2022-01-25 17:11 ` Christophe Leroy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202201220354.fJ3VzqBt-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.