CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Shyam Prasad N <[email protected]>

tree:   git://git.samba.org/ksmbd.git for-next
head:   43c233283f928be86531f030c8a3faa497a30e15
commit: 29c5f6efd1d496330e43ed2779ed371663f446b5 [2/5] cifs: change iface_list 
from array to sorted linked list
:::::: branch date: 20 hours ago
:::::: commit date: 20 hours ago
config: i386-randconfig-m021-20220613 
(https://download.01.org/0day-ci/archive/20220615/[email protected]/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
fs/cifs/smb2ops.c:571 parse_server_interfaces() warn: sleeping in atomic context

vim +571 fs/cifs/smb2ops.c

fe856be475f7cf Aurelien Aptel 2018-06-14  511  
fe856be475f7cf Aurelien Aptel 2018-06-14  512  static int
fe856be475f7cf Aurelien Aptel 2018-06-14  513  parse_server_interfaces(struct 
network_interface_info_ioctl_rsp *buf,
fe856be475f7cf Aurelien Aptel 2018-06-14  514                   size_t buf_len,
29c5f6efd1d496 Shyam Prasad N 2022-01-01  515                   struct cifs_ses 
*ses)
fe856be475f7cf Aurelien Aptel 2018-06-14  516  {
fe856be475f7cf Aurelien Aptel 2018-06-14  517   struct 
network_interface_info_ioctl_rsp *p;
fe856be475f7cf Aurelien Aptel 2018-06-14  518   struct sockaddr_in *addr4;
fe856be475f7cf Aurelien Aptel 2018-06-14  519   struct sockaddr_in6 *addr6;
fe856be475f7cf Aurelien Aptel 2018-06-14  520   struct iface_info_ipv4 *p4;
fe856be475f7cf Aurelien Aptel 2018-06-14  521   struct iface_info_ipv6 *p6;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  522   struct cifs_server_iface *info 
= NULL, *iface = NULL, *niface = NULL;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  523   struct cifs_server_iface 
tmp_iface;
fe856be475f7cf Aurelien Aptel 2018-06-14  524   ssize_t bytes_left;
fe856be475f7cf Aurelien Aptel 2018-06-14  525   size_t next = 0;
fe856be475f7cf Aurelien Aptel 2018-06-14  526   int nb_iface = 0;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  527   int rc = 0, ret = 0;
fe856be475f7cf Aurelien Aptel 2018-06-14  528  
fe856be475f7cf Aurelien Aptel 2018-06-14  529   bytes_left = buf_len;
fe856be475f7cf Aurelien Aptel 2018-06-14  530   p = buf;
fe856be475f7cf Aurelien Aptel 2018-06-14  531  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  532   spin_lock(&ses->iface_lock);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  533   /*
29c5f6efd1d496 Shyam Prasad N 2022-01-01  534    * Go through iface_list and do 
kref_put to remove
29c5f6efd1d496 Shyam Prasad N 2022-01-01  535    * any unused ifaces. ifaces in 
use will be removed
29c5f6efd1d496 Shyam Prasad N 2022-01-01  536    * when the last user calls a 
kref_put on it
29c5f6efd1d496 Shyam Prasad N 2022-01-01  537    */
29c5f6efd1d496 Shyam Prasad N 2022-01-01  538   list_for_each_entry_safe(iface, 
niface, &ses->iface_list,
29c5f6efd1d496 Shyam Prasad N 2022-01-01  539                            
iface_head) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  540           iface->is_active = 0;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  541           
kref_put(&iface->refcount, release_iface);
fe856be475f7cf Aurelien Aptel 2018-06-14  542   }
fe856be475f7cf Aurelien Aptel 2018-06-14  543  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  544   while (bytes_left >= 
sizeof(*p)) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  545           memset(&tmp_iface, 0, 
sizeof(tmp_iface));
29c5f6efd1d496 Shyam Prasad N 2022-01-01  546           tmp_iface.speed = 
le64_to_cpu(p->LinkSpeed);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  547           tmp_iface.rdma_capable 
= le32_to_cpu(p->Capability & RDMA_CAPABLE) ? 1 : 0;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  548           tmp_iface.rss_capable = 
le32_to_cpu(p->Capability & RSS_CAPABLE) ? 1 : 0;
fe856be475f7cf Aurelien Aptel 2018-06-14  549  
fe856be475f7cf Aurelien Aptel 2018-06-14  550           /*
29c5f6efd1d496 Shyam Prasad N 2022-01-01  551            * The iface_list is 
assumed to be sorted by speed.
29c5f6efd1d496 Shyam Prasad N 2022-01-01  552            * Check if the new 
interface exists in that list.
29c5f6efd1d496 Shyam Prasad N 2022-01-01  553            * NEVER change iface. 
it could be in use.
29c5f6efd1d496 Shyam Prasad N 2022-01-01  554            * Add a new one instead
fe856be475f7cf Aurelien Aptel 2018-06-14  555            */
29c5f6efd1d496 Shyam Prasad N 2022-01-01  556           
list_for_each_entry_safe(iface, niface, &ses->iface_list,
29c5f6efd1d496 Shyam Prasad N 2022-01-01  557                                   
 iface_head) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  558                   ret = 
iface_cmp(iface, &tmp_iface);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  559                   if (!ret) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  560                           /* just 
get a ref so that it doesn't get picked/freed */
29c5f6efd1d496 Shyam Prasad N 2022-01-01  561                           
iface->is_active = 1;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  562                           
kref_get(&iface->refcount);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  563                           goto 
next_iface;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  564                   } else if (ret 
> 0) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  565                           /* all 
remaining ifaces are slower */
29c5f6efd1d496 Shyam Prasad N 2022-01-01  566                           break;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  567                   }
29c5f6efd1d496 Shyam Prasad N 2022-01-01  568           }
fe856be475f7cf Aurelien Aptel 2018-06-14  569  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  570           /* no match. insert the 
entry in the list */
29c5f6efd1d496 Shyam Prasad N 2022-01-01 @571           info = 
kmalloc(sizeof(struct cifs_server_iface),
29c5f6efd1d496 Shyam Prasad N 2022-01-01  572                          
GFP_KERNEL);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  573           if (!info) {
fe856be475f7cf Aurelien Aptel 2018-06-14  574                   rc = -ENOMEM;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  575                   
spin_unlock(&ses->iface_lock);
fe856be475f7cf Aurelien Aptel 2018-06-14  576                   goto out;
fe856be475f7cf Aurelien Aptel 2018-06-14  577           }
29c5f6efd1d496 Shyam Prasad N 2022-01-01  578           memcpy(info, 
&tmp_iface, sizeof(tmp_iface));
fe856be475f7cf Aurelien Aptel 2018-06-14  579  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  580           /* add this new entry 
to the list */
29c5f6efd1d496 Shyam Prasad N 2022-01-01  581           
kref_init(&info->refcount);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  582           info->is_active = 1;
fe856be475f7cf Aurelien Aptel 2018-06-14  583  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  584           cifs_dbg(FYI, "%s: 
adding iface %zu\n", __func__, ses->iface_count);
fe856be475f7cf Aurelien Aptel 2018-06-14  585           cifs_dbg(FYI, "%s: 
speed %zu bps\n", __func__, info->speed);
fe856be475f7cf Aurelien Aptel 2018-06-14  586           cifs_dbg(FYI, "%s: 
capabilities 0x%08x\n", __func__,
fe856be475f7cf Aurelien Aptel 2018-06-14  587                    
le32_to_cpu(p->Capability));
fe856be475f7cf Aurelien Aptel 2018-06-14  588  
fe856be475f7cf Aurelien Aptel 2018-06-14  589           switch (p->Family) {
fe856be475f7cf Aurelien Aptel 2018-06-14  590           /*
fe856be475f7cf Aurelien Aptel 2018-06-14  591            * The kernel and wire 
socket structures have the same
fe856be475f7cf Aurelien Aptel 2018-06-14  592            * layout and use 
network byte order but make the
fe856be475f7cf Aurelien Aptel 2018-06-14  593            * conversion explicit 
in case either one changes.
fe856be475f7cf Aurelien Aptel 2018-06-14  594            */
fe856be475f7cf Aurelien Aptel 2018-06-14  595           case INTERNETWORK:
fe856be475f7cf Aurelien Aptel 2018-06-14  596                   addr4 = (struct 
sockaddr_in *)&info->sockaddr;
fe856be475f7cf Aurelien Aptel 2018-06-14  597                   p4 = (struct 
iface_info_ipv4 *)p->Buffer;
fe856be475f7cf Aurelien Aptel 2018-06-14  598                   
addr4->sin_family = AF_INET;
fe856be475f7cf Aurelien Aptel 2018-06-14  599                   
memcpy(&addr4->sin_addr, &p4->IPv4Address, 4);
fe856be475f7cf Aurelien Aptel 2018-06-14  600  
fe856be475f7cf Aurelien Aptel 2018-06-14  601                   /* [MS-SMB2] 
2.2.32.5.1.1 Clients MUST ignore these */
fe856be475f7cf Aurelien Aptel 2018-06-14  602                   addr4->sin_port 
= cpu_to_be16(CIFS_PORT);
fe856be475f7cf Aurelien Aptel 2018-06-14  603  
fe856be475f7cf Aurelien Aptel 2018-06-14  604                   cifs_dbg(FYI, 
"%s: ipv4 %pI4\n", __func__,
fe856be475f7cf Aurelien Aptel 2018-06-14  605                            
&addr4->sin_addr);
fe856be475f7cf Aurelien Aptel 2018-06-14  606                   break;
fe856be475f7cf Aurelien Aptel 2018-06-14  607           case INTERNETWORKV6:
fe856be475f7cf Aurelien Aptel 2018-06-14  608                   addr6 = (struct 
sockaddr_in6 *)&info->sockaddr;
fe856be475f7cf Aurelien Aptel 2018-06-14  609                   p6 = (struct 
iface_info_ipv6 *)p->Buffer;
fe856be475f7cf Aurelien Aptel 2018-06-14  610                   
addr6->sin6_family = AF_INET6;
fe856be475f7cf Aurelien Aptel 2018-06-14  611                   
memcpy(&addr6->sin6_addr, &p6->IPv6Address, 16);
fe856be475f7cf Aurelien Aptel 2018-06-14  612  
fe856be475f7cf Aurelien Aptel 2018-06-14  613                   /* [MS-SMB2] 
2.2.32.5.1.2 Clients MUST ignore these */
fe856be475f7cf Aurelien Aptel 2018-06-14  614                   
addr6->sin6_flowinfo = 0;
fe856be475f7cf Aurelien Aptel 2018-06-14  615                   
addr6->sin6_scope_id = 0;
fe856be475f7cf Aurelien Aptel 2018-06-14  616                   
addr6->sin6_port = cpu_to_be16(CIFS_PORT);
fe856be475f7cf Aurelien Aptel 2018-06-14  617  
fe856be475f7cf Aurelien Aptel 2018-06-14  618                   cifs_dbg(FYI, 
"%s: ipv6 %pI6\n", __func__,
fe856be475f7cf Aurelien Aptel 2018-06-14  619                            
&addr6->sin6_addr);
fe856be475f7cf Aurelien Aptel 2018-06-14  620                   break;
fe856be475f7cf Aurelien Aptel 2018-06-14  621           default:
fe856be475f7cf Aurelien Aptel 2018-06-14  622                   cifs_dbg(VFS,
fe856be475f7cf Aurelien Aptel 2018-06-14  623                            "%s: 
skipping unsupported socket family\n",
fe856be475f7cf Aurelien Aptel 2018-06-14  624                            
__func__);
fe856be475f7cf Aurelien Aptel 2018-06-14  625                   goto next_iface;
fe856be475f7cf Aurelien Aptel 2018-06-14  626           }
fe856be475f7cf Aurelien Aptel 2018-06-14  627  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  628           if 
(!list_entry_is_head(iface, &ses->iface_list, iface_head))
29c5f6efd1d496 Shyam Prasad N 2022-01-01  629                   
list_add_tail(&info->iface_head, &iface->iface_head);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  630           else
29c5f6efd1d496 Shyam Prasad N 2022-01-01  631                   
list_add_tail(&info->iface_head, &ses->iface_list);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  632  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  633           ses->iface_count++;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  634           ses->iface_last_update 
= jiffies;
fe856be475f7cf Aurelien Aptel 2018-06-14  635  next_iface:
29c5f6efd1d496 Shyam Prasad N 2022-01-01  636           nb_iface++;
fe856be475f7cf Aurelien Aptel 2018-06-14  637           next = 
le32_to_cpu(p->Next);
29c5f6efd1d496 Shyam Prasad N 2022-01-01  638           if (!next) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  639                   bytes_left -= 
sizeof(*p);
fe856be475f7cf Aurelien Aptel 2018-06-14  640                   break;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  641           }
fe856be475f7cf Aurelien Aptel 2018-06-14  642           p = (struct 
network_interface_info_ioctl_rsp *)((u8 *)p+next);
fe856be475f7cf Aurelien Aptel 2018-06-14  643           bytes_left -= next;
fe856be475f7cf Aurelien Aptel 2018-06-14  644   }
29c5f6efd1d496 Shyam Prasad N 2022-01-01  645   spin_unlock(&ses->iface_lock);
fe856be475f7cf Aurelien Aptel 2018-06-14  646  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  647   if (!nb_iface) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  648           cifs_dbg(VFS, "%s: 
malformed interface info\n", __func__);
fe856be475f7cf Aurelien Aptel 2018-06-14  649           rc = -EINVAL;
fe856be475f7cf Aurelien Aptel 2018-06-14  650           goto out;
fe856be475f7cf Aurelien Aptel 2018-06-14  651   }
fe856be475f7cf Aurelien Aptel 2018-06-14  652  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  653   /* Azure rounds the buffer size 
up 8, to a 16 byte boundary */
29c5f6efd1d496 Shyam Prasad N 2022-01-01  654   if ((bytes_left > 8) || p->Next)
29c5f6efd1d496 Shyam Prasad N 2022-01-01  655           cifs_dbg(VFS, "%s: 
incomplete interface info\n", __func__);
fe856be475f7cf Aurelien Aptel 2018-06-14  656  
35adffed079fdc Aurelien Aptel 2019-09-20  657  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  658   if (!ses->iface_count) {
29c5f6efd1d496 Shyam Prasad N 2022-01-01  659           rc = -EINVAL;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  660           goto out;
29c5f6efd1d496 Shyam Prasad N 2022-01-01  661   }
29c5f6efd1d496 Shyam Prasad N 2022-01-01  662  
29c5f6efd1d496 Shyam Prasad N 2022-01-01  663  out:
29c5f6efd1d496 Shyam Prasad N 2022-01-01  664   return rc;
35adffed079fdc Aurelien Aptel 2019-09-20  665  }
fe856be475f7cf Aurelien Aptel 2018-06-14  666  

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

Reply via email to