All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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.