From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [linux-next:master 2736/10638] drivers/net/can/usb/peak_usb/pcan_usb.c:523 pcan_usb_decode_error() error: we previously assumed 'cf' could be null (see line 503)
Date: Fri, 27 Aug 2021 12:39:43 +0800 [thread overview]
Message-ID: <202108271237.qIqXe17x-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 7504 bytes --]
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: 88fac11862d38306dd0d2398015744877140390d
commit: c11dcee758302702a83c6e85e4c4c3d9af42d2b3 [2736/10638] can: peak_usb: pcan_usb_decode_error(): upgrade handling of bus state changes
:::::: branch date:
:::::: commit date: 5 weeks ago
config: i386-randconfig-m021-20210827 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/net/can/usb/peak_usb/pcan_usb.c:523 pcan_usb_decode_error() error: we previously assumed 'cf' could be null (see line 503)
vim +/cf +523 drivers/net/can/usb/peak_usb/pcan_usb.c
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: 42268 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: [linux-next:master 2736/10638] drivers/net/can/usb/peak_usb/pcan_usb.c:523 pcan_usb_decode_error() error: we previously assumed 'cf' could be null (see line 503)
Date: Fri, 27 Aug 2021 11:05:05 +0300 [thread overview]
Message-ID: <202108271237.qIqXe17x-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 7190 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 88fac11862d38306dd0d2398015744877140390d
commit: c11dcee758302702a83c6e85e4c4c3d9af42d2b3 [2736/10638] can: peak_usb: pcan_usb_decode_error(): upgrade handling of bus state changes
config: i386-randconfig-m021-20210827 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/net/can/usb/peak_usb/pcan_usb.c:523 pcan_usb_decode_error() error: we previously assumed 'cf' could be null (see line 503)
vim +/cf +523 drivers/net/can/usb/peak_usb/pcan_usb.c
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) {
^^
Check for NULL
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)) {
^^
Check for NULL
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;
^^^^^^^
Unchecked dereference.
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 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next reply other threads:[~2021-08-27 4:39 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-27 4:39 kernel test robot [this message]
2021-08-27 8:05 ` [linux-next:master 2736/10638] drivers/net/can/usb/peak_usb/pcan_usb.c:523 pcan_usb_decode_error() error: we previously assumed 'cf' could be null (see line 503) Dan Carpenter
2021-08-27 9:20 ` Marc Kleine-Budde
2021-08-27 9:54 ` Dan Carpenter
2021-08-27 9:54 ` Dan Carpenter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202108271237.qIqXe17x-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.