On 11/5/25 11:25, Hamza Mahfooz wrote:
If the allocation of tl_hba->sh fails in tcm_loop_driver_probe() and we attempt to dereference it in tcm_loop_tpg_address_show() we will get a segfault, see below for an example. So, check tl_hba->sh before dereferencing it.
Unable to allocate struct scsi_host BUG: kernel NULL pointer dereference, address: 0000000000000194 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: 0000 [#1] PREEMPT SMP NOPTI CPU: 1 PID: 8356 Comm: tokio-runtime-w Not tainted 6.6.104.2-4.azl3 #1 Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 09/28/2024 RIP: 0010:tcm_loop_tpg_address_show+0x2e/0x50 [tcm_loop] ... Call Trace: <TASK> configfs_read_iter+0x12d/0x1d0 [configfs] vfs_read+0x1b5/0x300 ksys_read+0x6f/0xf0 ...
Cc:stable@vger.kernel.org Fixes: 2628b352c3d4 ("tcm_loop: Show address of tpg in configfs") Signed-off-by: Hamza Mahfoozhamzamahfooz@linux.microsoft.com
indeed :-
313 static int tcm_loop_driver_probe(struct device *dev) 314 { 315 struct tcm_loop_hba *tl_hba; 316 struct Scsi_Host *sh; 317 int error, host_prot; 318 319 tl_hba = to_tcm_loop_hba(dev); 320 321 sh = scsi_host_alloc(&tcm_loop_driver_template, 322 sizeof(struct tcm_loop_hba)); 323 if (!sh) { 324 pr_err("Unable to allocate struct scsi_host\n"); 325 return -ENODEV; 326 } 327 tl_hba->sh = sh;
Looks good.
Reviewed-by: Chaitanya Kulkarni kch@nvidia.com
-ck