CC: l...@lists.linux.dev
CC: kbuild-...@lists.01.org
BCC: l...@intel.com
CC: linux-ker...@vger.kernel.org
TO: "Håkon Bugge" <haakon.bu...@oracle.com>
CC: Jason Gunthorpe <j...@nvidia.com>
CC: Leon Romanovsky <leo...@nvidia.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   09688c0166e76ce2fb85e86b9d99be8b0084cdf9
commit: 8d0d2b0f41b1b2add8a30dbd816051a964efa497 RDMA/cma: Remove open coding 
of overflow checking for private_data_len
date:   4 months ago
:::::: branch date: 2 days ago
:::::: commit date: 4 months ago
config: arm-randconfig-c002-20220310 
(https://download.01.org/0day-ci/archive/20220316/202203161044.lv767crh-...@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
276ca87382b8f16a65bddac700202924228982f6)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8d0d2b0f41b1b2add8a30dbd816051a964efa497
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 8d0d2b0f41b1b2add8a30dbd816051a964efa497
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
               ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:2: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
           ^
   include/linux/compiler_types.h:335:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:323:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:315:3: note: expanded from macro 
'__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   drivers/infiniband/core/cma.c:4405:6: note: Loop condition is false.  
Exiting loop
           if (READ_ONCE(id_priv->state) != RDMA_CM_CONNECT)
               ^
   include/asm-generic/rwonce.h:49:2: note: expanded from macro 'READ_ONCE'
           compiletime_assert_rwonce_type(x);                              \
           ^
   include/asm-generic/rwonce.h:36:2: note: expanded from macro 
'compiletime_assert_rwonce_type'
           compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long 
long),  \
           ^
   include/linux/compiler_types.h:335:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:323:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:307:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \
           ^
   drivers/infiniband/core/cma.c:4405:6: note: Assuming the condition is false
           if (READ_ONCE(id_priv->state) != RDMA_CM_CONNECT)
               ^
   include/asm-generic/rwonce.h:47:28: note: expanded from macro 'READ_ONCE'
   #define READ_ONCE(x)                                                    \
                                                                           ^
   drivers/infiniband/core/cma.c:4405:2: note: Taking false branch
           if (READ_ONCE(id_priv->state) != RDMA_CM_CONNECT)
           ^
   drivers/infiniband/core/cma.c:4408:6: note: Assuming field 'qp' is non-null
           if (!id->qp && conn_param) {
               ^~~~~~~
   drivers/infiniband/core/cma.c:4408:14: note: Left side of '&&' is false
           if (!id->qp && conn_param) {
                       ^
   drivers/infiniband/core/cma.c:4413:6: note: Assuming the condition is true
           if (rdma_cap_ib_cm(id->device, id->port_num)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4413:2: note: Taking true branch
           if (rdma_cap_ib_cm(id->device, id->port_num)) {
           ^
   drivers/infiniband/core/cma.c:4414:7: note: Assuming field 'qp_type' is not 
equal to IB_QPT_UD
                   if (id->qp_type == IB_QPT_UD) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4414:3: note: Taking false branch
                   if (id->qp_type == IB_QPT_UD) {
                   ^
   drivers/infiniband/core/cma.c:4424:8: note: Assuming 'conn_param' is null
                           if (conn_param)
                               ^~~~~~~~~~
   drivers/infiniband/core/cma.c:4424:4: note: Taking false branch
                           if (conn_param)
                           ^
   drivers/infiniband/core/cma.c:4427:11: note: Calling 'cma_rep_recv'
                                   ret = cma_rep_recv(id_priv);
                                         ^~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:1944:8: note: Calling 'cma_modify_qp_rtr'
           ret = cma_modify_qp_rtr(id_priv, NULL);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:1000:6: note: 'qp_attr_mask' declared without 
an initial value
           int qp_attr_mask, ret;
               ^~~~~~~~~~~~
   drivers/infiniband/core/cma.c:1003:6: note: Assuming field 'qp' is non-null
           if (!id_priv->id.qp) {
               ^~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:1003:2: note: Taking false branch
           if (!id_priv->id.qp) {
           ^
   drivers/infiniband/core/cma.c:1010:8: note: Calling 'rdma_init_qp_attr'
           ret = rdma_init_qp_attr(&id_priv->id, &qp_attr, &qp_attr_mask);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:1117:6: note: Assuming the condition is false
           if (rdma_cap_ib_cm(id->device, id->port_num)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:1117:2: note: Taking false branch
           if (rdma_cap_ib_cm(id->device, id->port_num)) {
           ^
   drivers/infiniband/core/cma.c:1126:13: note: Assuming the condition is false
           } else if (rdma_cap_iw_cm(id->device, id->port_num)) {
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:1126:9: note: Taking false branch
           } else if (rdma_cap_iw_cm(id->device, id->port_num)) {
                  ^
   drivers/infiniband/core/cma.c:1139:21: note: The left operand of '&' is a 
garbage value
           if ((*qp_attr_mask & IB_QP_TIMEOUT) && id_priv->timeout_set)
                ~~~~~~~~~~~~~ ^
>> drivers/infiniband/core/cma.c:4048:3: warning: Null pointer passed as 1st 
>> argument to memory copy function [clang-analyzer-unix.cstring.NullArg]
                   memcpy(private_data + offset, conn_param->private_data,
                   ^
   drivers/infiniband/core/cma.c:4289:9: note: Calling 'rdma_connect'
           return rdma_connect(id, conn_param);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4266:8: note: Calling 'rdma_connect_locked'
           ret = rdma_connect_locked(id, conn_param);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4220:6: note: Assuming the condition is false
           if (!cma_comp_exch(id_priv, RDMA_CM_ROUTE_RESOLVED, RDMA_CM_CONNECT))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4220:2: note: Taking false branch
           if (!cma_comp_exch(id_priv, RDMA_CM_ROUTE_RESOLVED, RDMA_CM_CONNECT))
           ^
   drivers/infiniband/core/cma.c:4223:6: note: Assuming field 'qp' is non-null
           if (!id->qp) {
               ^~~~~~~
   drivers/infiniband/core/cma.c:4223:2: note: Taking false branch
           if (!id->qp) {
           ^
   drivers/infiniband/core/cma.c:4228:6: note: Assuming the condition is true
           if (rdma_cap_ib_cm(id->device, id->port_num)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4228:2: note: Taking true branch
           if (rdma_cap_ib_cm(id->device, id->port_num)) {
           ^
   drivers/infiniband/core/cma.c:4229:7: note: Assuming field 'qp_type' is 
equal to IB_QPT_UD
                   if (id->qp_type == IB_QPT_UD)
                       ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4229:3: note: Taking true branch
                   if (id->qp_type == IB_QPT_UD)
                   ^
   drivers/infiniband/core/cma.c:4230:10: note: Calling 'cma_resolve_ib_udp'
                           ret = cma_resolve_ib_udp(id_priv, conn_param);
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4036:6: note: Calling '__must_check_overflow'
           if (check_add_overflow(offset, conn_param->private_data_len, 
&req.private_data_len))
               ^
   include/linux/overflow.h:62:37: note: expanded from macro 
'check_add_overflow'
   #define check_add_overflow(a, b, d) __must_check_overflow(({    \
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/overflow.h:51:9: note: Assuming 'overflow' is false
           return unlikely(overflow);
                  ^
   include/linux/compiler.h:78:40: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                             ^~~~
   include/linux/overflow.h:51:2: note: Returning zero, which participates in a 
condition later
           return unlikely(overflow);
           ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4036:6: note: Returning from 
'__must_check_overflow'
           if (check_add_overflow(offset, conn_param->private_data_len, 
&req.private_data_len))
               ^
   include/linux/overflow.h:62:37: note: expanded from macro 
'check_add_overflow'
   #define check_add_overflow(a, b, d) __must_check_overflow(({    \
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4036:2: note: Taking false branch
           if (check_add_overflow(offset, conn_param->private_data_len, 
&req.private_data_len))
           ^
   drivers/infiniband/core/cma.c:4039:6: note: Assuming field 
'private_data_len' is 0
           if (req.private_data_len) {
               ^~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4039:2: note: Taking false branch
           if (req.private_data_len) {
           ^
   drivers/infiniband/core/cma.c:4044:3: note: Null pointer value stored to 
'private_data'
                   private_data = NULL;
                   ^~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4047:6: note: Assuming field 'private_data' is 
non-null
           if (conn_param->private_data && conn_param->private_data_len)
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4047:6: note: Left side of '&&' is true
   drivers/infiniband/core/cma.c:4047:34: note: Assuming field 
'private_data_len' is not equal to 0
           if (conn_param->private_data && conn_param->private_data_len)
                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4047:2: note: Taking true branch
           if (conn_param->private_data && conn_param->private_data_len)
           ^
   drivers/infiniband/core/cma.c:4048:3: note: Null pointer passed as 1st 
argument to memory copy function
                   memcpy(private_data + offset, conn_param->private_data,
                   ^      ~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4107:3: warning: Null pointer passed as 1st 
argument to memory copy function [clang-analyzer-unix.cstring.NullArg]
                   memcpy(private_data + offset, conn_param->private_data,
                   ^
   drivers/infiniband/core/cma.c:4289:9: note: Calling 'rdma_connect'
           return rdma_connect(id, conn_param);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4266:8: note: Calling 'rdma_connect_locked'
           ret = rdma_connect_locked(id, conn_param);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4220:6: note: Assuming the condition is false
           if (!cma_comp_exch(id_priv, RDMA_CM_ROUTE_RESOLVED, RDMA_CM_CONNECT))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/infiniband/core/cma.c:4220:2: note: Taking false branch
           if (!cma_comp_exch(id_priv, RDMA_CM_ROUTE_RESOLVED, RDMA_CM_CONNECT))
           ^
   drivers/infiniband/core/cma.c:4223:6: note: Assuming field 'qp' is non-null
           if (!id->qp) {
               ^~~~~~~
   drivers/infiniband/core/cma.c:4223:2: note: Taking false branch

vim +4048 drivers/infiniband/core/cma.c

628e5f6d39d5a6 Sean Hefty       2006-11-30  4024  
628e5f6d39d5a6 Sean Hefty       2006-11-30  4025  static int 
cma_resolve_ib_udp(struct rdma_id_private *id_priv,
628e5f6d39d5a6 Sean Hefty       2006-11-30  4026                              
struct rdma_conn_param *conn_param)
628e5f6d39d5a6 Sean Hefty       2006-11-30  4027  {
628e5f6d39d5a6 Sean Hefty       2006-11-30  4028        struct 
ib_cm_sidr_req_param req;
0c9361fcdeccd3 Jack Morgenstein 2011-07-17  4029        struct ib_cm_id *id;
e511d1ae16745b Sean Hefty       2013-07-24  4030        void *private_data;
c0b64f58e8d495 Bart Van Assche  2017-10-11  4031        u8 offset;
c0b64f58e8d495 Bart Van Assche  2017-10-11  4032        int ret;
628e5f6d39d5a6 Sean Hefty       2006-11-30  4033  
e511d1ae16745b Sean Hefty       2013-07-24  4034        memset(&req, 0, sizeof 
req);
e8160e15930969 Sean Hefty       2013-05-29  4035        offset = 
cma_user_data_offset(id_priv);
8d0d2b0f41b1b2 Håkon Bugge      2021-11-23  4036        if 
(check_add_overflow(offset, conn_param->private_data_len, 
&req.private_data_len))
04ded167240257 Sean Hefty       2011-12-06  4037                return -EINVAL;
04ded167240257 Sean Hefty       2011-12-06  4038  
e8160e15930969 Sean Hefty       2013-05-29  4039        if 
(req.private_data_len) {
e511d1ae16745b Sean Hefty       2013-07-24  4040                private_data = 
kzalloc(req.private_data_len, GFP_ATOMIC);
e511d1ae16745b Sean Hefty       2013-07-24  4041                if 
(!private_data)
628e5f6d39d5a6 Sean Hefty       2006-11-30  4042                        return 
-ENOMEM;
e8160e15930969 Sean Hefty       2013-05-29  4043        } else {
e511d1ae16745b Sean Hefty       2013-07-24  4044                private_data = 
NULL;
e8160e15930969 Sean Hefty       2013-05-29  4045        }
628e5f6d39d5a6 Sean Hefty       2006-11-30  4046  
628e5f6d39d5a6 Sean Hefty       2006-11-30  4047        if 
(conn_param->private_data && conn_param->private_data_len)
e511d1ae16745b Sean Hefty       2013-07-24 @4048                
memcpy(private_data + offset, conn_param->private_data,
e511d1ae16745b Sean Hefty       2013-07-24  4049                       
conn_param->private_data_len);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4050  
e511d1ae16745b Sean Hefty       2013-07-24  4051        if (private_data) {
e511d1ae16745b Sean Hefty       2013-07-24  4052                ret = 
cma_format_hdr(private_data, id_priv);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4053                if (ret)
628e5f6d39d5a6 Sean Hefty       2006-11-30  4054                        goto 
out;
e511d1ae16745b Sean Hefty       2013-07-24  4055                
req.private_data = private_data;
e8160e15930969 Sean Hefty       2013-05-29  4056        }
628e5f6d39d5a6 Sean Hefty       2006-11-30  4057  
0c9361fcdeccd3 Jack Morgenstein 2011-07-17  4058        id = 
ib_create_cm_id(id_priv->id.device, cma_sidr_rep_handler,
0c9361fcdeccd3 Jack Morgenstein 2011-07-17  4059                             
id_priv);
0c9361fcdeccd3 Jack Morgenstein 2011-07-17  4060        if (IS_ERR(id)) {
0c9361fcdeccd3 Jack Morgenstein 2011-07-17  4061                ret = 
PTR_ERR(id);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4062                goto out;
628e5f6d39d5a6 Sean Hefty       2006-11-30  4063        }
0c9361fcdeccd3 Jack Morgenstein 2011-07-17  4064        id_priv->cm_id.ib = id;
628e5f6d39d5a6 Sean Hefty       2006-11-30  4065  
f4753834b5d06c Sean Hefty       2013-05-29  4066        req.path = 
id_priv->id.route.path_rec;
815d456ef21a13 Parav Pandit     2018-06-19  4067        req.sgid_attr = 
id_priv->id.route.addr.dev_addr.sgid_attr;
cf53936f229d81 Sean Hefty       2013-05-29  4068        req.service_id = 
rdma_get_service_id(&id_priv->id, cma_dst_addr(id_priv));
628e5f6d39d5a6 Sean Hefty       2006-11-30  4069        req.timeout_ms = 1 << 
(CMA_CM_RESPONSE_TIMEOUT - 8);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4070        req.max_cm_retries = 
CMA_MAX_CM_RETRIES;
628e5f6d39d5a6 Sean Hefty       2006-11-30  4071  
ed999f820a6c57 Chuck Lever      2019-12-18  4072        
trace_cm_send_sidr_req(id_priv);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4073        ret = 
ib_send_cm_sidr_req(id_priv->cm_id.ib, &req);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4074        if (ret) {
628e5f6d39d5a6 Sean Hefty       2006-11-30  4075                
ib_destroy_cm_id(id_priv->cm_id.ib);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4076                
id_priv->cm_id.ib = NULL;
628e5f6d39d5a6 Sean Hefty       2006-11-30  4077        }
628e5f6d39d5a6 Sean Hefty       2006-11-30  4078  out:
e511d1ae16745b Sean Hefty       2013-07-24  4079        kfree(private_data);
628e5f6d39d5a6 Sean Hefty       2006-11-30  4080        return ret;
628e5f6d39d5a6 Sean Hefty       2006-11-30  4081  }
628e5f6d39d5a6 Sean Hefty       2006-11-30  4082  

:::::: The code at line 4048 was first introduced by commit
:::::: e511d1ae16745baca1e6d807c5b963716e8bdd01 RDMA/cma: Fix accessing invalid 
private data for UD

:::::: TO: Sean Hefty <sean.he...@intel.com>
:::::: CC: Roland Dreier <rol...@purestorage.com>

---
0-DAY CI Kernel Test Service
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to