CC: [email protected]
TO: Md Haris Iqbal <[email protected]>
CC: Jason Gunthorpe <[email protected]>
CC: Lutz Pogrell <[email protected]>
CC: Jack Wang <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git 
wip/jgg-for-next
head:   c88b31c46cefe50f524a1ad3deaf1599bc9ee2e6
commit: f0751419d3a15fb06d9b7d9435312472c3cb122d [198/203] RDMA/rtrs: Only 
allow addition of path to an already established session
:::::: branch date: 4 hours ago
:::::: commit date: 6 hours ago
config: ia64-randconfig-m031-20210209 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.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:
drivers/infiniband/ulp/rtrs/rtrs-srv.c:1805 rtrs_rdma_connect() warn: passing 
zero to 'PTR_ERR'

vim +/PTR_ERR +1805 drivers/infiniband/ulp/rtrs/rtrs-srv.c

9cb837480424e7 Jack Wang      2020-05-11  1759  
9cb837480424e7 Jack Wang      2020-05-11  1760  static int 
rtrs_rdma_connect(struct rdma_cm_id *cm_id,
9cb837480424e7 Jack Wang      2020-05-11  1761                                
const struct rtrs_msg_conn_req *msg,
9cb837480424e7 Jack Wang      2020-05-11  1762                                
size_t len)
9cb837480424e7 Jack Wang      2020-05-11  1763  {
9cb837480424e7 Jack Wang      2020-05-11  1764          struct rtrs_srv_ctx 
*ctx = cm_id->context;
9cb837480424e7 Jack Wang      2020-05-11  1765          struct rtrs_srv_sess 
*sess;
9cb837480424e7 Jack Wang      2020-05-11  1766          struct rtrs_srv *srv;
9cb837480424e7 Jack Wang      2020-05-11  1767  
9cb837480424e7 Jack Wang      2020-05-11  1768          u16 version, con_num, 
cid;
9cb837480424e7 Jack Wang      2020-05-11  1769          u16 recon_cnt;
9cb837480424e7 Jack Wang      2020-05-11  1770          int err;
9cb837480424e7 Jack Wang      2020-05-11  1771  
9cb837480424e7 Jack Wang      2020-05-11  1772          if (len < sizeof(*msg)) 
{
9cb837480424e7 Jack Wang      2020-05-11  1773                  pr_err("Invalid 
RTRS connection request\n");
9cb837480424e7 Jack Wang      2020-05-11  1774                  goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1775          }
9cb837480424e7 Jack Wang      2020-05-11  1776          if 
(le16_to_cpu(msg->magic) != RTRS_MAGIC) {
9cb837480424e7 Jack Wang      2020-05-11  1777                  pr_err("Invalid 
RTRS magic\n");
9cb837480424e7 Jack Wang      2020-05-11  1778                  goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1779          }
9cb837480424e7 Jack Wang      2020-05-11  1780          version = 
le16_to_cpu(msg->version);
9cb837480424e7 Jack Wang      2020-05-11  1781          if (version >> 8 != 
RTRS_PROTO_VER_MAJOR) {
9cb837480424e7 Jack Wang      2020-05-11  1782                  
pr_err("Unsupported major RTRS version: %d, expected %d\n",
9cb837480424e7 Jack Wang      2020-05-11  1783                         version 
>> 8, RTRS_PROTO_VER_MAJOR);
9cb837480424e7 Jack Wang      2020-05-11  1784                  goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1785          }
9cb837480424e7 Jack Wang      2020-05-11  1786          con_num = 
le16_to_cpu(msg->cid_num);
9cb837480424e7 Jack Wang      2020-05-11  1787          if (con_num > 4096) {
9cb837480424e7 Jack Wang      2020-05-11  1788                  /* Sanity check 
*/
9cb837480424e7 Jack Wang      2020-05-11  1789                  pr_err("Too 
many connections requested: %d\n", con_num);
9cb837480424e7 Jack Wang      2020-05-11  1790                  goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1791          }
9cb837480424e7 Jack Wang      2020-05-11  1792          cid = 
le16_to_cpu(msg->cid);
9cb837480424e7 Jack Wang      2020-05-11  1793          if (cid >= con_num) {
9cb837480424e7 Jack Wang      2020-05-11  1794                  /* Sanity check 
*/
9cb837480424e7 Jack Wang      2020-05-11  1795                  
pr_err("Incorrect cid: %d >= %d\n", cid, con_num);
9cb837480424e7 Jack Wang      2020-05-11  1796                  goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1797          }
9cb837480424e7 Jack Wang      2020-05-11  1798          recon_cnt = 
le16_to_cpu(msg->recon_cnt);
f0751419d3a15f Md Haris Iqbal 2021-02-12  1799          srv = 
get_or_create_srv(ctx, &msg->paths_uuid, msg->first_conn);
d715ff8acbd587 Guoqing Jiang  2020-10-23  1800          /*
d715ff8acbd587 Guoqing Jiang  2020-10-23  1801           * "refcount == 0" 
happens if a previous thread calls get_or_create_srv
d715ff8acbd587 Guoqing Jiang  2020-10-23  1802           * allocate srv, but 
chunks of srv are not allocated yet.
d715ff8acbd587 Guoqing Jiang  2020-10-23  1803           */
f0751419d3a15f Md Haris Iqbal 2021-02-12  1804          if (IS_ERR(srv) || 
refcount_read(&srv->refcount) == 0) {
f0751419d3a15f Md Haris Iqbal 2021-02-12 @1805                  err = 
PTR_ERR(srv);
9cb837480424e7 Jack Wang      2020-05-11  1806                  goto 
reject_w_err;
9cb837480424e7 Jack Wang      2020-05-11  1807          }
9cb837480424e7 Jack Wang      2020-05-11  1808          
mutex_lock(&srv->paths_mutex);
9cb837480424e7 Jack Wang      2020-05-11  1809          sess = __find_sess(srv, 
&msg->sess_uuid);
9cb837480424e7 Jack Wang      2020-05-11  1810          if (sess) {
9cb837480424e7 Jack Wang      2020-05-11  1811                  struct 
rtrs_sess *s = &sess->s;
9cb837480424e7 Jack Wang      2020-05-11  1812  
9cb837480424e7 Jack Wang      2020-05-11  1813                  /* Session 
already holds a reference */
9cb837480424e7 Jack Wang      2020-05-11  1814                  put_srv(srv);
9cb837480424e7 Jack Wang      2020-05-11  1815  
9cb837480424e7 Jack Wang      2020-05-11  1816                  if (sess->state 
!= RTRS_SRV_CONNECTING) {
9cb837480424e7 Jack Wang      2020-05-11  1817                          
rtrs_err(s, "Session in wrong state: %s\n",
9cb837480424e7 Jack Wang      2020-05-11  1818                                  
  rtrs_srv_state_str(sess->state));
9cb837480424e7 Jack Wang      2020-05-11  1819                          
mutex_unlock(&srv->paths_mutex);
9cb837480424e7 Jack Wang      2020-05-11  1820                          goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1821                  }
9cb837480424e7 Jack Wang      2020-05-11  1822                  /*
9cb837480424e7 Jack Wang      2020-05-11  1823                   * Sanity checks
9cb837480424e7 Jack Wang      2020-05-11  1824                   */
e172037be757dc Md Haris Iqbal 2020-05-22  1825                  if (con_num != 
s->con_num || cid >= s->con_num) {
9cb837480424e7 Jack Wang      2020-05-11  1826                          
rtrs_err(s, "Incorrect request: %d, %d\n",
9cb837480424e7 Jack Wang      2020-05-11  1827                                  
  cid, con_num);
9cb837480424e7 Jack Wang      2020-05-11  1828                          
mutex_unlock(&srv->paths_mutex);
9cb837480424e7 Jack Wang      2020-05-11  1829                          goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1830                  }
e172037be757dc Md Haris Iqbal 2020-05-22  1831                  if 
(s->con[cid]) {
9cb837480424e7 Jack Wang      2020-05-11  1832                          
rtrs_err(s, "Connection already exists: %d\n",
9cb837480424e7 Jack Wang      2020-05-11  1833                                  
  cid);
9cb837480424e7 Jack Wang      2020-05-11  1834                          
mutex_unlock(&srv->paths_mutex);
9cb837480424e7 Jack Wang      2020-05-11  1835                          goto 
reject_w_econnreset;
9cb837480424e7 Jack Wang      2020-05-11  1836                  }
9cb837480424e7 Jack Wang      2020-05-11  1837          } else {
9cb837480424e7 Jack Wang      2020-05-11  1838                  sess = 
__alloc_sess(srv, cm_id, con_num, recon_cnt,
9cb837480424e7 Jack Wang      2020-05-11  1839                                  
    &msg->sess_uuid);
9cb837480424e7 Jack Wang      2020-05-11  1840                  if 
(IS_ERR(sess)) {
9cb837480424e7 Jack Wang      2020-05-11  1841                          
mutex_unlock(&srv->paths_mutex);
9cb837480424e7 Jack Wang      2020-05-11  1842                          
put_srv(srv);
9cb837480424e7 Jack Wang      2020-05-11  1843                          err = 
PTR_ERR(sess);
9cb837480424e7 Jack Wang      2020-05-11  1844                          goto 
reject_w_err;
9cb837480424e7 Jack Wang      2020-05-11  1845                  }
9cb837480424e7 Jack Wang      2020-05-11  1846          }
9cb837480424e7 Jack Wang      2020-05-11  1847          err = create_con(sess, 
cm_id, cid);
9cb837480424e7 Jack Wang      2020-05-11  1848          if (err) {
9cb837480424e7 Jack Wang      2020-05-11  1849                  
(void)rtrs_rdma_do_reject(cm_id, err);
9cb837480424e7 Jack Wang      2020-05-11  1850                  /*
9cb837480424e7 Jack Wang      2020-05-11  1851                   * Since 
session has other connections we follow normal way
9cb837480424e7 Jack Wang      2020-05-11  1852                   * through 
workqueue, but still return an error to tell cma.c
9cb837480424e7 Jack Wang      2020-05-11  1853                   * to call 
rdma_destroy_id() for current connection.
9cb837480424e7 Jack Wang      2020-05-11  1854                   */
9cb837480424e7 Jack Wang      2020-05-11  1855                  goto 
close_and_return_err;
9cb837480424e7 Jack Wang      2020-05-11  1856          }
9cb837480424e7 Jack Wang      2020-05-11  1857          err = 
rtrs_rdma_do_accept(sess, cm_id);
9cb837480424e7 Jack Wang      2020-05-11  1858          if (err) {
9cb837480424e7 Jack Wang      2020-05-11  1859                  
(void)rtrs_rdma_do_reject(cm_id, err);
9cb837480424e7 Jack Wang      2020-05-11  1860                  /*
9cb837480424e7 Jack Wang      2020-05-11  1861                   * Since 
current connection was successfully added to the
9cb837480424e7 Jack Wang      2020-05-11  1862                   * session we 
follow normal way through workqueue to close the
9cb837480424e7 Jack Wang      2020-05-11  1863                   * session, 
thus return 0 to tell cma.c we call
9cb837480424e7 Jack Wang      2020-05-11  1864                   * 
rdma_destroy_id() ourselves.
9cb837480424e7 Jack Wang      2020-05-11  1865                   */
9cb837480424e7 Jack Wang      2020-05-11  1866                  err = 0;
9cb837480424e7 Jack Wang      2020-05-11  1867                  goto 
close_and_return_err;
9cb837480424e7 Jack Wang      2020-05-11  1868          }
9cb837480424e7 Jack Wang      2020-05-11  1869          
mutex_unlock(&srv->paths_mutex);
9cb837480424e7 Jack Wang      2020-05-11  1870  
9cb837480424e7 Jack Wang      2020-05-11  1871          return 0;
9cb837480424e7 Jack Wang      2020-05-11  1872  
9cb837480424e7 Jack Wang      2020-05-11  1873  reject_w_err:
9cb837480424e7 Jack Wang      2020-05-11  1874          return 
rtrs_rdma_do_reject(cm_id, err);
9cb837480424e7 Jack Wang      2020-05-11  1875  
9cb837480424e7 Jack Wang      2020-05-11  1876  reject_w_econnreset:
9cb837480424e7 Jack Wang      2020-05-11  1877          return 
rtrs_rdma_do_reject(cm_id, -ECONNRESET);
9cb837480424e7 Jack Wang      2020-05-11  1878  
9cb837480424e7 Jack Wang      2020-05-11  1879  close_and_return_err:
9cb837480424e7 Jack Wang      2020-05-11  1880          
mutex_unlock(&srv->paths_mutex);
99f0c380797335 Jack Wang      2020-12-17  1881          close_sess(sess);
9cb837480424e7 Jack Wang      2020-05-11  1882  
9cb837480424e7 Jack Wang      2020-05-11  1883          return err;
9cb837480424e7 Jack Wang      2020-05-11  1884  }
9cb837480424e7 Jack Wang      2020-05-11  1885  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to