hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/9153 ---------------------------------------- This reverts commit daf28c1b005f61ff365062ee901d591b45346c1a. Revert self-developed patchset, using mainline patchset. Signed-off-by: Yang Erkun <yangerkun@huawei.com> --- drivers/block/nbd.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 621f42fb87cb..25885a2c7e70 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -989,7 +989,7 @@ static int find_fallback(struct nbd_device *nbd, int index) goto no_fallback; fallback = nsock->fallback_index; - if (fallback >= 0) { + if (fallback >= 0 && fallback < config->num_connections) { fallback_nsock = xa_load(&config->socks, fallback); if (fallback_nsock && !fallback_nsock->dead) return fallback; @@ -1044,6 +1044,12 @@ static blk_status_t nbd_handle_cmd(struct nbd_cmd *cmd, int index) return BLK_STS_IOERR; } + if (index >= config->num_connections) { + dev_err_ratelimited(disk_to_dev(nbd->disk), + "Attempted send on invalid socket\n"); + nbd_config_put(nbd); + return BLK_STS_IOERR; + } cmd->status = BLK_STS_OK; again: nsock = xa_load(&config->socks, index); @@ -1388,9 +1394,11 @@ static void nbd_config_put(struct nbd_device *nbd) } nbd_clear_sock(nbd); - xa_for_each(&config->socks, i, nsock) { - sockfd_put(nsock->sock); - kfree(nsock); + if (config->num_connections) { + xa_for_each(&config->socks, i, nsock) { + sockfd_put(nsock->sock); + kfree(nsock); + } } xa_destroy(&config->socks); -- 2.52.0