CC: [email protected]
CC: [email protected]
TO: Christophe Leroy <[email protected]>
CC: Michael Ellerman <[email protected]>

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/[email protected]/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 <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

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 <[email protected]>
:::::: CC: David S. Miller <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to