Merge tag 'v6.19-rc6-server-fixes' of git://git.samba.org/ksmbd

Pull smb server fixes from Steve French:

- Use the original nents value for ib_dma_unmap_sg(), preventing
potential memory corruption in the RDMA transport layer

- Fix a naming discrepancy in the kernel-doc for
ksmbd_vfs_kern_path_start_removing() as identified by sparse static
analysis

- Reset smb_direct_port to its default value during initialization to
ensure the correct port is used when switching between different RDMA
device types without module reload

* tag 'v6.19-rc6-server-fixes' of git://git.samba.org/ksmbd:
smb: server: reset smb_direct_port = SMB_DIRECT_PORT_INFINIBAND on init
smb: server: fix comment for ksmbd_vfs_kern_path_start_removing()
ksmbd: smbd: fix dma_unmap_sg() nents

+9 -9
+8 -8
fs/smb/server/transport_rdma.c
··· 1353 1353 1354 1354 static int get_mapped_sg_list(struct ib_device *device, void *buf, int size, 1355 1355 struct scatterlist *sg_list, int nentries, 1356 - enum dma_data_direction dir) 1356 + enum dma_data_direction dir, int *npages) 1357 1357 { 1358 - int npages; 1359 - 1360 - npages = get_sg_list(buf, size, sg_list, nentries); 1361 - if (npages < 0) 1358 + *npages = get_sg_list(buf, size, sg_list, nentries); 1359 + if (*npages < 0) 1362 1360 return -EINVAL; 1363 - return ib_dma_map_sg(device, sg_list, npages, dir); 1361 + return ib_dma_map_sg(device, sg_list, *npages, dir); 1364 1362 } 1365 1363 1366 1364 static int post_sendmsg(struct smbdirect_socket *sc, ··· 1429 1431 for (i = 0; i < niov; i++) { 1430 1432 struct ib_sge *sge; 1431 1433 int sg_cnt; 1434 + int npages; 1432 1435 1433 1436 sg_init_table(sg, SMBDIRECT_SEND_IO_MAX_SGE - 1); 1434 1437 sg_cnt = get_mapped_sg_list(sc->ib.dev, 1435 1438 iov[i].iov_base, iov[i].iov_len, 1436 1439 sg, SMBDIRECT_SEND_IO_MAX_SGE - 1, 1437 - DMA_TO_DEVICE); 1440 + DMA_TO_DEVICE, &npages); 1438 1441 if (sg_cnt <= 0) { 1439 1442 pr_err("failed to map buffer\n"); 1440 1443 ret = -ENOMEM; ··· 1443 1444 } else if (sg_cnt + msg->num_sge > SMBDIRECT_SEND_IO_MAX_SGE) { 1444 1445 pr_err("buffer not fitted into sges\n"); 1445 1446 ret = -E2BIG; 1446 - ib_dma_unmap_sg(sc->ib.dev, sg, sg_cnt, 1447 + ib_dma_unmap_sg(sc->ib.dev, sg, npages, 1447 1448 DMA_TO_DEVICE); 1448 1449 goto err; 1449 1450 } ··· 2707 2708 { 2708 2709 int ret; 2709 2710 2711 + smb_direct_port = SMB_DIRECT_PORT_INFINIBAND; 2710 2712 smb_direct_listener.cm_id = NULL; 2711 2713 2712 2714 ret = ib_register_client(&smb_direct_ib_client);
+1 -1
fs/smb/server/vfs.c
··· 1227 1227 } 1228 1228 1229 1229 /** 1230 - * ksmbd_vfs_kern_path_start_remove() - lookup a file and get path info prior to removal 1230 + * ksmbd_vfs_kern_path_start_removing() - lookup a file and get path info prior to removal 1231 1231 * @work: work 1232 1232 * @filepath: file path that is relative to share 1233 1233 * @flags: lookup flags