tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 65f0d2414b7079556fbbcc070b3d1c9f9587606d commit: 3047766bc6ec9c6bc9ece85b45a41ff401e8d988 s390/pci: fix enabling a reserved PCI function config: s390-randconfig-m031-20210114 (attached as .config) compiler: s390-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: arch/s390/pci/pci_event.c:101 __zpci_event_availability() error: we previously assumed 'zdev->zbus' could be null (see line 83) vim +101 arch/s390/pci/pci_event.c aa3b7c296732b4 Sebastian Ott 2013-12-12 76 static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf) cbc0dd1f856b52 Jan Glauber 2012-11-29 77 { cbc0dd1f856b52 Jan Glauber 2012-11-29 78 struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid); 9a99649f2a89fd Sebastian Ott 2016-01-29 79 struct pci_dev *pdev = NULL; 623bd44d3f277b Sebastian Ott 2017-05-09 80 enum zpci_state state; d795ddad36cbc8 Sebastian Ott 2013-11-15 81 int ret; cbc0dd1f856b52 Jan Glauber 2012-11-29 82 05bc1be6db4b26 Pierre Morel 2020-03-23 @83 if (zdev && zdev->zbus && zdev->zbus->bus) ^^^^^^^^^^ Can this be NULL? 44510d6fa0c00a Pierre Morel 2020-04-22 84 pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn); 9a99649f2a89fd Sebastian Ott 2016-01-29 85 1f1dcbd4f23bd1 Sebastian Ott 2013-10-22 86 zpci_err("avail CCDF:\n"); 1f1dcbd4f23bd1 Sebastian Ott 2013-10-22 87 zpci_err_hex(ccdf, sizeof(*ccdf)); cbc0dd1f856b52 Jan Glauber 2012-11-29 88 cbc0dd1f856b52 Jan Glauber 2012-11-29 89 switch (ccdf->pec) { 7fc611ff3ff1a0 Sebastian Ott 2015-06-16 90 case 0x0301: /* Reserved|Standby -> Configured */ 7fc611ff3ff1a0 Sebastian Ott 2015-06-16 91 if (!zdev) { f606b3ef47c9f8 Pierre Morel 2020-03-25 92 ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 1); 7fc611ff3ff1a0 Sebastian Ott 2015-06-16 93 break; 7fc611ff3ff1a0 Sebastian Ott 2015-06-16 94 } fcf2f402937a66 Sebastian Ott 2013-12-18 95 zdev->fh = ccdf->fh; f606b3ef47c9f8 Pierre Morel 2020-03-25 96 zdev->state = ZPCI_FN_STATE_CONFIGURED; 3047766bc6ec9c Niklas Schnelle 2020-06-18 97 ret = zpci_enable_device(zdev); 3047766bc6ec9c Niklas Schnelle 2020-06-18 98 if (ret) 3047766bc6ec9c Niklas Schnelle 2020-06-18 99 break; 3047766bc6ec9c Niklas Schnelle 2020-06-18 100 3047766bc6ec9c Niklas Schnelle 2020-06-18 @101 pdev = pci_scan_single_device(zdev->zbus->bus, zdev->devfn); ^^^^^^^^^^^^^^^ Unchecked dereference 3047766bc6ec9c Niklas Schnelle 2020-06-18 102 if (!pdev) 3047766bc6ec9c Niklas Schnelle 2020-06-18 103 break; 3047766bc6ec9c Niklas Schnelle 2020-06-18 104 3047766bc6ec9c Niklas Schnelle 2020-06-18 105 pci_bus_add_device(pdev); 3047766bc6ec9c Niklas Schnelle 2020-06-18 106 pci_lock_rescan_remove(); 3047766bc6ec9c Niklas Schnelle 2020-06-18 107 pci_bus_add_devices(zdev->zbus->bus); 3047766bc6ec9c Niklas Schnelle 2020-06-18 108 pci_unlock_rescan_remove(); cbc0dd1f856b52 Jan Glauber 2012-11-29 109 break; d795ddad36cbc8 Sebastian Ott 2013-11-15 110 case 0x0302: /* Reserved -> Standby */ f606b3ef47c9f8 Pierre Morel 2020-03-25 111 if (!zdev) { d795ddad36cbc8 Sebastian Ott 2013-11-15 112 clp_add_pci_device(ccdf->fid, ccdf->fh, 0); cbc0dd1f856b52 Jan Glauber 2012-11-29 113 break; f606b3ef47c9f8 Pierre Morel 2020-03-25 114 } f606b3ef47c9f8 Pierre Morel 2020-03-25 115 zdev->fh = ccdf->fh; f606b3ef47c9f8 Pierre Morel 2020-03-25 116 break; d795ddad36cbc8 Sebastian Ott 2013-11-15 117 case 0x0303: /* Deconfiguration requested */ 623bd44d3f277b Sebastian Ott 2017-05-09 118 if (!zdev) 623bd44d3f277b Sebastian Ott 2017-05-09 119 break; d795ddad36cbc8 Sebastian Ott 2013-11-15 120 if (pdev) 2a01bd1bd3d28d Sebastian Ott 2015-07-28 121 pci_stop_and_remove_bus_device_locked(pdev); cbc0dd1f856b52 Jan Glauber 2012-11-29 122 d795ddad36cbc8 Sebastian Ott 2013-11-15 123 ret = zpci_disable_device(zdev); d795ddad36cbc8 Sebastian Ott 2013-11-15 124 if (ret) d795ddad36cbc8 Sebastian Ott 2013-11-15 125 break; 1f1dcbd4f23bd1 Sebastian Ott 2013-10-22 126 d795ddad36cbc8 Sebastian Ott 2013-11-15 127 ret = sclp_pci_deconfigure(zdev->fid); d795ddad36cbc8 Sebastian Ott 2013-11-15 128 zpci_dbg(3, "deconf fid:%x, rc:%d\n", zdev->fid, ret); d795ddad36cbc8 Sebastian Ott 2013-11-15 129 if (!ret) d795ddad36cbc8 Sebastian Ott 2013-11-15 130 zdev->state = ZPCI_FN_STATE_STANDBY; cbc0dd1f856b52 Jan Glauber 2012-11-29 131 d795ddad36cbc8 Sebastian Ott 2013-11-15 132 break; 623bd44d3f277b Sebastian Ott 2017-05-09 133 case 0x0304: /* Configured -> Standby|Reserved */ 623bd44d3f277b Sebastian Ott 2017-05-09 134 if (!zdev) 623bd44d3f277b Sebastian Ott 2017-05-09 135 break; 0c0c2776926018 Sebastian Ott 2013-12-12 136 if (pdev) { 0c0c2776926018 Sebastian Ott 2013-12-12 137 /* Give the driver a hint that the function is 0c0c2776926018 Sebastian Ott 2013-12-12 138 * already unusable. */ 0c0c2776926018 Sebastian Ott 2013-12-12 139 pdev->error_state = pci_channel_io_perm_failure; 2a01bd1bd3d28d Sebastian Ott 2015-07-28 140 pci_stop_and_remove_bus_device_locked(pdev); 0c0c2776926018 Sebastian Ott 2013-12-12 141 } 1f1dcbd4f23bd1 Sebastian Ott 2013-10-22 142 d795ddad36cbc8 Sebastian Ott 2013-11-15 143 zdev->state = ZPCI_FN_STATE_STANDBY; 623bd44d3f277b Sebastian Ott 2017-05-09 144 if (!clp_get_state(ccdf->fid, &state) && 623bd44d3f277b Sebastian Ott 2017-05-09 145 state == ZPCI_FN_STATE_RESERVED) { 05bc1be6db4b26 Pierre Morel 2020-03-23 146 zpci_zdev_put(zdev); 623bd44d3f277b Sebastian Ott 2017-05-09 147 } d795ddad36cbc8 Sebastian Ott 2013-11-15 148 break; d795ddad36cbc8 Sebastian Ott 2013-11-15 149 case 0x0306: /* 0x308 or 0x302 for multiple devices */ d795ddad36cbc8 Sebastian Ott 2013-11-15 150 clp_rescan_pci_devices(); d795ddad36cbc8 Sebastian Ott 2013-11-15 151 break; d795ddad36cbc8 Sebastian Ott 2013-11-15 152 case 0x0308: /* Standby -> Reserved */ 704268925d32a0 Sebastian Ott 2013-12-12 153 if (!zdev) 704268925d32a0 Sebastian Ott 2013-12-12 154 break; 05bc1be6db4b26 Pierre Morel 2020-03-23 155 zpci_zdev_put(zdev); d795ddad36cbc8 Sebastian Ott 2013-11-15 156 break; d795ddad36cbc8 Sebastian Ott 2013-11-15 157 default: d795ddad36cbc8 Sebastian Ott 2013-11-15 158 break; cbc0dd1f856b52 Jan Glauber 2012-11-29 159 } cbc0dd1f856b52 Jan Glauber 2012-11-29 160 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org