All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 2741/6030] drivers/net/can/usb/peak_usb/pcan_usb.c:523:32: warning: Dereference of null pointer [clang-analyzer-core.NullDereference]
@ 2021-08-08  1:54 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-08-08  1:54 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 26369 bytes --]

CC: clang-built-linux(a)googlegroups.com
CC: kbuild-all(a)lists.01.org
CC: Linux Memory Management List <linux-mm@kvack.org>
TO: Stephane Grosjean <s.grosjean@peak-system.com>
CC: "Marc Kleine-Budde" <mkl@pengutronix.de>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   7999516e20bd9bb5d1f7351cbd05ca529a3a8d60
commit: c11dcee758302702a83c6e85e4c4c3d9af42d2b3 [2741/6030] can: peak_usb: pcan_usb_decode_error(): upgrade handling of bus state changes
:::::: branch date: 33 hours ago
:::::: commit date: 2 weeks ago
config: x86_64-randconfig-c001-20210807 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 41a6b50c25961addc04438b567ee1f4ef9e40f98)
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 x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=c11dcee758302702a83c6e85e4c4c3d9af42d2b3
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout c11dcee758302702a83c6e85e4c4c3d9af42d2b3
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
           ^
   drivers/clk/clk-si5341.c:854:23: note: Division by zero
                   rate = *parent_rate / (r << 1);
                          ~~~~~~~~~~~~~^~~~~~~~~~
   drivers/clk/clk-si5341.c:893:2: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
           err = regmap_bulk_write(output->data->regmap,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk-si5341.c:893:2: note: Value stored to 'err' is never read
           err = regmap_bulk_write(output->data->regmap,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   4 warnings generated.
   drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c:699:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(cmd->map_ch_req.name, name);
           ^~~~~~
   drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c:699:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
           strcpy(cmd->map_ch_req.name, name);
           ^~~~~~
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   6 warnings generated.
   drivers/net/can/usb/peak_usb/pcan_usb.c:394:14: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
                   *device_id = args[0];
                              ^ ~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:389:8: note: Calling 'pcan_usb_wait_rsp'
           err = pcan_usb_wait_rsp(dev, PCAN_USB_CMD_DEVID, PCAN_USB_GET, args);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:188:6: note: Assuming the condition is true
           if (!(dev->state & PCAN_USB_STATE_CONNECTED))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:188:2: note: Taking true branch
           if (!(dev->state & PCAN_USB_STATE_CONNECTED))
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:189:3: note: Returning without writing to '*p'
                   return 0;
                   ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:189:3: note: Returning zero, which participates in a condition later
                   return 0;
                   ^~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:389:8: note: Returning from 'pcan_usb_wait_rsp'
           err = pcan_usb_wait_rsp(dev, PCAN_USB_CMD_DEVID, PCAN_USB_GET, args);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:390:6: note: 'err' is 0
           if (err)
               ^~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:390:2: note: Taking false branch
           if (err)
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:394:14: note: Assigned value is garbage or undefined
                   *device_id = args[0];
                              ^ ~~~~~~~
>> drivers/net/can/usb/peak_usb/pcan_usb.c:523:32: warning: Dereference of null pointer [clang-analyzer-core.NullDereference]
           mc->netdev->stats.rx_bytes += cf->len;
                                         ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:734:6: note: Assuming field 'actual_length' is > PCAN_USB_MSG_HEADER_LEN
           if (urb->actual_length > PCAN_USB_MSG_HEADER_LEN) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:734:2: note: Taking true branch
           if (urb->actual_length > PCAN_USB_MSG_HEADER_LEN) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:735:9: note: Calling 'pcan_usb_decode_msg'
                   err = pcan_usb_decode_msg(dev, urb->transfer_buffer,
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:708:11: note: Left side of '&&' is false
                   .pdev = container_of(dev, struct pcan_usb, dev),
                           ^
   include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:708:11: note: Taking false branch
                   .pdev = container_of(dev, struct pcan_usb, dev),
                           ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:708:11: note: Loop condition is false.  Exiting loop
                   .pdev = container_of(dev, struct pcan_usb, dev),
                           ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert'
           do {                                                            \
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:712:16: note: Assuming field 'rec_idx' is < field 'rec_cnt'
           for (err = 0; mc.rec_idx < mc.rec_cnt && !err; mc.rec_idx++) {
                         ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:712:16: note: Left side of '&&' is true
   drivers/net/can/usb/peak_usb/pcan_usb.c:712:2: note: Loop condition is true.  Entering loop body
           for (err = 0; mc.rec_idx < mc.rec_cnt && !err; mc.rec_idx++) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:716:7: note: Assuming the condition is true
                   if (sl & PCAN_USB_STATUSLEN_INTERNAL) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:716:3: note: Taking true branch
                   if (sl & PCAN_USB_STATUSLEN_INTERNAL) {
                   ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:717:10: note: Calling 'pcan_usb_decode_status'
                           err = pcan_usb_decode_status(&mc, sl);
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:564:6: note: Assuming the condition is false
           if ((mc->ptr + 2) > mc->end)
               ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:564:2: note: Taking false branch
           if ((mc->ptr + 2) > mc->end)
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:571:6: note: Assuming the condition is false
           if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:571:2: note: Taking false branch
           if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:583:2: note: Control jumps to 'case 1:'  at line 584
           switch (f) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:585:9: note: Calling 'pcan_usb_decode_error'
                   err = pcan_usb_decode_error(mc, n, status_len);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:458:6: note: Assuming 'n' is not equal to PCAN_USB_ERROR_QOVR
           if (n == PCAN_USB_ERROR_QOVR)
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:458:2: note: Taking false branch
           if (n == PCAN_USB_ERROR_QOVR)
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:463:8: note: Value assigned to 'cf'
           skb = alloc_can_err_skb(mc->netdev, &cf);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:465:6: note: Assuming the condition is true
           if (n & PCAN_USB_ERROR_RXQOVR) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:465:2: note: Taking true branch

vim +523 drivers/net/can/usb/peak_usb/pcan_usb.c

46be265d338833 Stephane Grosjean 2012-03-02  380  
46be265d338833 Stephane Grosjean 2012-03-02  381  /*
46be265d338833 Stephane Grosjean 2012-03-02  382   * read device id from device
46be265d338833 Stephane Grosjean 2012-03-02  383   */
46be265d338833 Stephane Grosjean 2012-03-02  384  static int pcan_usb_get_device_id(struct peak_usb_device *dev, u32 *device_id)
46be265d338833 Stephane Grosjean 2012-03-02  385  {
46be265d338833 Stephane Grosjean 2012-03-02  386  	u8 args[PCAN_USB_CMD_ARGS_LEN];
46be265d338833 Stephane Grosjean 2012-03-02  387  	int err;
46be265d338833 Stephane Grosjean 2012-03-02  388  
a8bb19dfab5a64 Stephane Grosjean 2019-12-06  389  	err = pcan_usb_wait_rsp(dev, PCAN_USB_CMD_DEVID, PCAN_USB_GET, args);
46be265d338833 Stephane Grosjean 2012-03-02 @390  	if (err)
46be265d338833 Stephane Grosjean 2012-03-02  391  		netdev_err(dev->netdev, "getting device id failure: %d\n", err);
426718f3fe0e43 Marc Kleine-Budde 2021-04-05  392  
1d0214a0f5db10 Stephane Grosjean 2021-06-25  393  	else
46be265d338833 Stephane Grosjean 2012-03-02  394  		*device_id = args[0];
46be265d338833 Stephane Grosjean 2012-03-02  395  
46be265d338833 Stephane Grosjean 2012-03-02  396  	return err;
46be265d338833 Stephane Grosjean 2012-03-02  397  }
46be265d338833 Stephane Grosjean 2012-03-02  398  
46be265d338833 Stephane Grosjean 2012-03-02  399  /*
46be265d338833 Stephane Grosjean 2012-03-02  400   * update current time ref with received timestamp
46be265d338833 Stephane Grosjean 2012-03-02  401   */
46be265d338833 Stephane Grosjean 2012-03-02  402  static int pcan_usb_update_ts(struct pcan_usb_msg_context *mc)
46be265d338833 Stephane Grosjean 2012-03-02  403  {
46be265d338833 Stephane Grosjean 2012-03-02  404  	if ((mc->ptr + 2) > mc->end)
46be265d338833 Stephane Grosjean 2012-03-02  405  		return -EINVAL;
46be265d338833 Stephane Grosjean 2012-03-02  406  
bd573ea5720470 Marc Kleine-Budde 2021-04-05  407  	mc->ts16 = get_unaligned_le16(mc->ptr);
46be265d338833 Stephane Grosjean 2012-03-02  408  
46be265d338833 Stephane Grosjean 2012-03-02  409  	if (mc->rec_idx > 0)
46be265d338833 Stephane Grosjean 2012-03-02  410  		peak_usb_update_ts_now(&mc->pdev->time_ref, mc->ts16);
46be265d338833 Stephane Grosjean 2012-03-02  411  	else
46be265d338833 Stephane Grosjean 2012-03-02  412  		peak_usb_set_ts_now(&mc->pdev->time_ref, mc->ts16);
46be265d338833 Stephane Grosjean 2012-03-02  413  
46be265d338833 Stephane Grosjean 2012-03-02  414  	return 0;
46be265d338833 Stephane Grosjean 2012-03-02  415  }
46be265d338833 Stephane Grosjean 2012-03-02  416  
46be265d338833 Stephane Grosjean 2012-03-02  417  /*
46be265d338833 Stephane Grosjean 2012-03-02  418   * decode received timestamp
46be265d338833 Stephane Grosjean 2012-03-02  419   */
46be265d338833 Stephane Grosjean 2012-03-02  420  static int pcan_usb_decode_ts(struct pcan_usb_msg_context *mc, u8 first_packet)
46be265d338833 Stephane Grosjean 2012-03-02  421  {
46be265d338833 Stephane Grosjean 2012-03-02  422  	/* only 1st packet supplies a word timestamp */
46be265d338833 Stephane Grosjean 2012-03-02  423  	if (first_packet) {
46be265d338833 Stephane Grosjean 2012-03-02  424  		if ((mc->ptr + 2) > mc->end)
46be265d338833 Stephane Grosjean 2012-03-02  425  			return -EINVAL;
46be265d338833 Stephane Grosjean 2012-03-02  426  
bd573ea5720470 Marc Kleine-Budde 2021-04-05  427  		mc->ts16 = get_unaligned_le16(mc->ptr);
46be265d338833 Stephane Grosjean 2012-03-02  428  		mc->prev_ts8 = mc->ts16 & 0x00ff;
bd573ea5720470 Marc Kleine-Budde 2021-04-05  429  
bd573ea5720470 Marc Kleine-Budde 2021-04-05  430  		mc->ptr += 2;
46be265d338833 Stephane Grosjean 2012-03-02  431  	} else {
46be265d338833 Stephane Grosjean 2012-03-02  432  		u8 ts8;
46be265d338833 Stephane Grosjean 2012-03-02  433  
46be265d338833 Stephane Grosjean 2012-03-02  434  		if ((mc->ptr + 1) > mc->end)
46be265d338833 Stephane Grosjean 2012-03-02  435  			return -EINVAL;
46be265d338833 Stephane Grosjean 2012-03-02  436  
46be265d338833 Stephane Grosjean 2012-03-02  437  		ts8 = *mc->ptr++;
46be265d338833 Stephane Grosjean 2012-03-02  438  
46be265d338833 Stephane Grosjean 2012-03-02  439  		if (ts8 < mc->prev_ts8)
46be265d338833 Stephane Grosjean 2012-03-02  440  			mc->ts16 += 0x100;
46be265d338833 Stephane Grosjean 2012-03-02  441  
46be265d338833 Stephane Grosjean 2012-03-02  442  		mc->ts16 &= 0xff00;
46be265d338833 Stephane Grosjean 2012-03-02  443  		mc->ts16 |= ts8;
46be265d338833 Stephane Grosjean 2012-03-02  444  		mc->prev_ts8 = ts8;
46be265d338833 Stephane Grosjean 2012-03-02  445  	}
46be265d338833 Stephane Grosjean 2012-03-02  446  
46be265d338833 Stephane Grosjean 2012-03-02  447  	return 0;
46be265d338833 Stephane Grosjean 2012-03-02  448  }
46be265d338833 Stephane Grosjean 2012-03-02  449  
46be265d338833 Stephane Grosjean 2012-03-02  450  static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n,
46be265d338833 Stephane Grosjean 2012-03-02  451  				 u8 status_len)
46be265d338833 Stephane Grosjean 2012-03-02  452  {
46be265d338833 Stephane Grosjean 2012-03-02  453  	struct sk_buff *skb;
46be265d338833 Stephane Grosjean 2012-03-02  454  	struct can_frame *cf;
c11dcee7583027 Stephane Grosjean 2021-07-15  455  	enum can_state new_state = CAN_STATE_ERROR_ACTIVE;
46be265d338833 Stephane Grosjean 2012-03-02  456  
46be265d338833 Stephane Grosjean 2012-03-02  457  	/* ignore this error until 1st ts received */
46be265d338833 Stephane Grosjean 2012-03-02  458  	if (n == PCAN_USB_ERROR_QOVR)
46be265d338833 Stephane Grosjean 2012-03-02  459  		if (!mc->pdev->time_ref.tick_count)
46be265d338833 Stephane Grosjean 2012-03-02  460  			return 0;
46be265d338833 Stephane Grosjean 2012-03-02  461  
c11dcee7583027 Stephane Grosjean 2021-07-15  462  	/* allocate an skb to store the error frame */
c11dcee7583027 Stephane Grosjean 2021-07-15  463  	skb = alloc_can_err_skb(mc->netdev, &cf);
46be265d338833 Stephane Grosjean 2012-03-02  464  
c11dcee7583027 Stephane Grosjean 2021-07-15  465  	if (n & PCAN_USB_ERROR_RXQOVR) {
c11dcee7583027 Stephane Grosjean 2021-07-15  466  		/* data overrun interrupt */
c11dcee7583027 Stephane Grosjean 2021-07-15  467  		netdev_dbg(mc->netdev, "data overrun interrupt\n");
c11dcee7583027 Stephane Grosjean 2021-07-15  468  		mc->netdev->stats.rx_over_errors++;
c11dcee7583027 Stephane Grosjean 2021-07-15  469  		mc->netdev->stats.rx_errors++;
c11dcee7583027 Stephane Grosjean 2021-07-15  470  		if (cf) {
c11dcee7583027 Stephane Grosjean 2021-07-15  471  			cf->can_id |= CAN_ERR_CRTL;
c11dcee7583027 Stephane Grosjean 2021-07-15  472  			cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
46be265d338833 Stephane Grosjean 2012-03-02  473  		}
46be265d338833 Stephane Grosjean 2012-03-02  474  	}
46be265d338833 Stephane Grosjean 2012-03-02  475  
c11dcee7583027 Stephane Grosjean 2021-07-15  476  	if (n & PCAN_USB_ERROR_TXQFULL)
c11dcee7583027 Stephane Grosjean 2021-07-15  477  		netdev_dbg(mc->netdev, "device Tx queue full)\n");
c11dcee7583027 Stephane Grosjean 2021-07-15  478  
46be265d338833 Stephane Grosjean 2012-03-02  479  	if (n & PCAN_USB_ERROR_BUS_OFF) {
46be265d338833 Stephane Grosjean 2012-03-02  480  		new_state = CAN_STATE_BUS_OFF;
c11dcee7583027 Stephane Grosjean 2021-07-15  481  	} else if (n & PCAN_USB_ERROR_BUS_HEAVY) {
c11dcee7583027 Stephane Grosjean 2021-07-15  482  		new_state = ((mc->pdev->bec.txerr >= 128) ||
c11dcee7583027 Stephane Grosjean 2021-07-15  483  			     (mc->pdev->bec.rxerr >= 128)) ?
c11dcee7583027 Stephane Grosjean 2021-07-15  484  				CAN_STATE_ERROR_PASSIVE :
c11dcee7583027 Stephane Grosjean 2021-07-15  485  				CAN_STATE_ERROR_WARNING;
c11dcee7583027 Stephane Grosjean 2021-07-15  486  	} else {
c11dcee7583027 Stephane Grosjean 2021-07-15  487  		new_state = CAN_STATE_ERROR_ACTIVE;
46be265d338833 Stephane Grosjean 2012-03-02  488  	}
46be265d338833 Stephane Grosjean 2012-03-02  489  
c11dcee7583027 Stephane Grosjean 2021-07-15  490  	/* handle change of state */
c11dcee7583027 Stephane Grosjean 2021-07-15  491  	if (new_state != mc->pdev->dev.can.state) {
c11dcee7583027 Stephane Grosjean 2021-07-15  492  		enum can_state tx_state =
c11dcee7583027 Stephane Grosjean 2021-07-15  493  			(mc->pdev->bec.txerr >= mc->pdev->bec.rxerr) ?
c11dcee7583027 Stephane Grosjean 2021-07-15  494  				new_state : 0;
c11dcee7583027 Stephane Grosjean 2021-07-15  495  		enum can_state rx_state =
c11dcee7583027 Stephane Grosjean 2021-07-15  496  			(mc->pdev->bec.txerr <= mc->pdev->bec.rxerr) ?
c11dcee7583027 Stephane Grosjean 2021-07-15  497  				new_state : 0;
46be265d338833 Stephane Grosjean 2012-03-02  498  
c11dcee7583027 Stephane Grosjean 2021-07-15  499  		can_change_state(mc->netdev, cf, tx_state, rx_state);
46be265d338833 Stephane Grosjean 2012-03-02  500  
c11dcee7583027 Stephane Grosjean 2021-07-15  501  		if (new_state == CAN_STATE_BUS_OFF) {
46be265d338833 Stephane Grosjean 2012-03-02  502  			can_bus_off(mc->netdev);
c11dcee7583027 Stephane Grosjean 2021-07-15  503  		} else if (cf && (cf->can_id & CAN_ERR_CRTL)) {
c11dcee7583027 Stephane Grosjean 2021-07-15  504  			/* Supply TX/RX error counters in case of
c11dcee7583027 Stephane Grosjean 2021-07-15  505  			 * controller error.
c11dcee7583027 Stephane Grosjean 2021-07-15  506  			 */
ea8b33bde76c8f Stephane Grosjean 2019-12-06  507  			cf->data[6] = mc->pdev->bec.txerr;
ea8b33bde76c8f Stephane Grosjean 2019-12-06  508  			cf->data[7] = mc->pdev->bec.rxerr;
ea8b33bde76c8f Stephane Grosjean 2019-12-06  509  		}
46be265d338833 Stephane Grosjean 2012-03-02  510  	}
46be265d338833 Stephane Grosjean 2012-03-02  511  
c11dcee7583027 Stephane Grosjean 2021-07-15  512  	if (!skb)
c11dcee7583027 Stephane Grosjean 2021-07-15  513  		return -ENOMEM;
46be265d338833 Stephane Grosjean 2012-03-02  514  
46be265d338833 Stephane Grosjean 2012-03-02  515  	if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) {
c9faaa09e2a133 Oliver Hartkopp   2012-11-21  516  		struct skb_shared_hwtstamps *hwts = skb_hwtstamps(skb);
c9faaa09e2a133 Oliver Hartkopp   2012-11-21  517  
d5888a1e75c799 Arnd Bergmann     2017-11-03  518  		peak_usb_get_ts_time(&mc->pdev->time_ref, mc->ts16,
d5888a1e75c799 Arnd Bergmann     2017-11-03  519  				     &hwts->hwtstamp);
46be265d338833 Stephane Grosjean 2012-03-02  520  	}
46be265d338833 Stephane Grosjean 2012-03-02  521  
46be265d338833 Stephane Grosjean 2012-03-02  522  	mc->netdev->stats.rx_packets++;
c7b74967799b1a Oliver Hartkopp   2020-11-20 @523  	mc->netdev->stats.rx_bytes += cf->len;
1c0ee046957648 Marc Kleine-Budde 2015-07-11  524  	netif_rx(skb);
46be265d338833 Stephane Grosjean 2012-03-02  525  
46be265d338833 Stephane Grosjean 2012-03-02  526  	return 0;
46be265d338833 Stephane Grosjean 2012-03-02  527  }
46be265d338833 Stephane Grosjean 2012-03-02  528  

:::::: The code at line 523 was first introduced by commit
:::::: c7b74967799b1af52b3045d69d4c26836b2d41de can: replace can_dlc as variable/element for payload length

:::::: TO: Oliver Hartkopp <socketcan@hartkopp.net>
:::::: CC: Marc Kleine-Budde <mkl@pengutronix.de>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36838 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-08  1:54 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-08  1:54 [linux-next:master 2741/6030] drivers/net/can/usb/peak_usb/pcan_usb.c:523:32: warning: Dereference of null pointer [clang-analyzer-core.NullDereference] kernel test robot

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.