Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
"Five small fixes, all in drivers.

Most of these are error leg freeing issues, with the only really user
visible one being the zfcp fix"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: iscsi: Fix possible memory leak when device_register() failed
scsi: zfcp: Fix double free of FSF request when qdio send fails
scsi: scsi_debug: Fix possible UAF in sdebug_add_host_helper()
scsi: target: tcm_loop: Fix possible name leak in tcm_loop_setup_hba_bus()
scsi: mpi3mr: Suppress command reply debug prints

+26 -19
+1 -1
drivers/s390/scsi/zfcp_fsf.c
··· 884 884 const bool is_srb = zfcp_fsf_req_is_status_read_buffer(req); 885 885 struct zfcp_adapter *adapter = req->adapter; 886 886 struct zfcp_qdio *qdio = adapter->qdio; 887 - int req_id = req->req_id; 887 + unsigned long req_id = req->req_id; 888 888 889 889 zfcp_reqlist_add(adapter->req_list, req); 890 890
+2 -1
drivers/scsi/mpi3mr/mpi3mr_os.c
··· 3265 3265 } 3266 3266 3267 3267 if (scmd->result != (DID_OK << 16) && (scmd->cmnd[0] != ATA_12) && 3268 - (scmd->cmnd[0] != ATA_16)) { 3268 + (scmd->cmnd[0] != ATA_16) && 3269 + mrioc->logging_level & MPI3_DEBUG_SCSI_ERROR) { 3269 3270 ioc_info(mrioc, "%s :scmd->result 0x%x\n", __func__, 3270 3271 scmd->result); 3271 3272 scsi_print_command(scmd);
+5 -1
drivers/scsi/scsi_debug.c
··· 7323 7323 dev_set_name(&sdbg_host->dev, "adapter%d", sdebug_num_hosts); 7324 7324 7325 7325 error = device_register(&sdbg_host->dev); 7326 - if (error) 7326 + if (error) { 7327 + spin_lock(&sdebug_host_list_lock); 7328 + list_del(&sdbg_host->host_list); 7329 + spin_unlock(&sdebug_host_list_lock); 7327 7330 goto clean; 7331 + } 7328 7332 7329 7333 ++sdebug_num_hosts; 7330 7334 return 0;
+16 -15
drivers/scsi/scsi_transport_iscsi.c
··· 231 231 dev_set_name(&ep->dev, "ep-%d", id); 232 232 err = device_register(&ep->dev); 233 233 if (err) 234 - goto free_id; 234 + goto put_dev; 235 235 236 236 err = sysfs_create_group(&ep->dev.kobj, &iscsi_endpoint_group); 237 237 if (err) ··· 245 245 device_unregister(&ep->dev); 246 246 return NULL; 247 247 248 - free_id: 248 + put_dev: 249 249 mutex_lock(&iscsi_ep_idr_mutex); 250 250 idr_remove(&iscsi_ep_idr, id); 251 251 mutex_unlock(&iscsi_ep_idr_mutex); 252 + put_device(&ep->dev); 253 + return NULL; 252 254 free_ep: 253 255 kfree(ep); 254 256 return NULL; ··· 768 766 769 767 err = device_register(&iface->dev); 770 768 if (err) 771 - goto free_iface; 769 + goto put_dev; 772 770 773 771 err = sysfs_create_group(&iface->dev.kobj, &iscsi_iface_group); 774 772 if (err) ··· 782 780 device_unregister(&iface->dev); 783 781 return NULL; 784 782 785 - free_iface: 786 - put_device(iface->dev.parent); 787 - kfree(iface); 783 + put_dev: 784 + put_device(&iface->dev); 788 785 return NULL; 789 786 } 790 787 EXPORT_SYMBOL_GPL(iscsi_create_iface); ··· 1252 1251 1253 1252 err = device_register(&fnode_sess->dev); 1254 1253 if (err) 1255 - goto free_fnode_sess; 1254 + goto put_dev; 1256 1255 1257 1256 if (dd_size) 1258 1257 fnode_sess->dd_data = &fnode_sess[1]; 1259 1258 1260 1259 return fnode_sess; 1261 1260 1262 - free_fnode_sess: 1263 - kfree(fnode_sess); 1261 + put_dev: 1262 + put_device(&fnode_sess->dev); 1264 1263 return NULL; 1265 1264 } 1266 1265 EXPORT_SYMBOL_GPL(iscsi_create_flashnode_sess); ··· 1300 1299 1301 1300 err = device_register(&fnode_conn->dev); 1302 1301 if (err) 1303 - goto free_fnode_conn; 1302 + goto put_dev; 1304 1303 1305 1304 if (dd_size) 1306 1305 fnode_conn->dd_data = &fnode_conn[1]; 1307 1306 1308 1307 return fnode_conn; 1309 1308 1310 - free_fnode_conn: 1311 - kfree(fnode_conn); 1309 + put_dev: 1310 + put_device(&fnode_conn->dev); 1312 1311 return NULL; 1313 1312 } 1314 1313 EXPORT_SYMBOL_GPL(iscsi_create_flashnode_conn); ··· 4816 4815 dev_set_name(&priv->dev, "%s", tt->name); 4817 4816 err = device_register(&priv->dev); 4818 4817 if (err) 4819 - goto free_priv; 4818 + goto put_dev; 4820 4819 4821 4820 err = sysfs_create_group(&priv->dev.kobj, &iscsi_transport_group); 4822 4821 if (err) ··· 4851 4850 unregister_dev: 4852 4851 device_unregister(&priv->dev); 4853 4852 return NULL; 4854 - free_priv: 4855 - kfree(priv); 4853 + put_dev: 4854 + put_device(&priv->dev); 4856 4855 return NULL; 4857 4856 } 4858 4857 EXPORT_SYMBOL_GPL(iscsi_register_transport);
+2 -1
drivers/target/loopback/tcm_loop.c
··· 397 397 ret = device_register(&tl_hba->dev); 398 398 if (ret) { 399 399 pr_err("device_register() failed for tl_hba->dev: %d\n", ret); 400 + put_device(&tl_hba->dev); 400 401 return -ENODEV; 401 402 } 402 403 ··· 1074 1073 */ 1075 1074 ret = tcm_loop_setup_hba_bus(tl_hba, tcm_loop_hba_no_cnt); 1076 1075 if (ret) 1077 - goto out; 1076 + return ERR_PTR(ret); 1078 1077 1079 1078 sh = tl_hba->sh; 1080 1079 tcm_loop_hba_no_cnt++;