Skip to content

Commit b0b6e2c

Browse files
committed
Merge tag 'block-6.1-2022-11-11' of git://git.kernel.dk/linux
Pull block fixes from Jens Axboe: - NVMe pull request via Christoph: - Quiet user passthrough command errors (Keith Busch) - Fix memory leak in nvmet_subsys_attr_model_store_locked - Fix a memory leak in nvmet-auth (Sagi Grimberg) - Fix a potential NULL point deref in bfq (Yu) - Allocate command/response buffers separately for DMA for sed-opal, rather than rely on embedded alignment (Serge) * tag 'block-6.1-2022-11-11' of git://git.kernel.dk/linux: nvmet: fix a memory leak nvmet: fix memory leak in nvmet_subsys_attr_model_store_locked nvme: quiet user passthrough command errors block: sed-opal: kmalloc the cmd/resp buffers block, bfq: fix null pointer dereference in bfq_bio_bfqg()
2 parents 4e6b2b2 + df24560 commit b0b6e2c

File tree

5 files changed

+39
-10
lines changed

5 files changed

+39
-10
lines changed

block/bfq-cgroup.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,10 @@ struct bfq_group *bfq_bio_bfqg(struct bfq_data *bfqd, struct bio *bio)
610610
struct bfq_group *bfqg;
611611

612612
while (blkg) {
613+
if (!blkg->online) {
614+
blkg = blkg->parent;
615+
continue;
616+
}
613617
bfqg = blkg_to_bfqg(blkg);
614618
if (bfqg->online) {
615619
bio_associate_blkg_from_css(bio, &blkg->blkcg->css);

block/sed-opal.c

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ struct opal_dev {
8787
u64 lowest_lba;
8888

8989
size_t pos;
90-
u8 cmd[IO_BUFFER_LENGTH];
91-
u8 resp[IO_BUFFER_LENGTH];
90+
u8 *cmd;
91+
u8 *resp;
9292

9393
struct parsed_resp parsed;
9494
size_t prev_d_len;
@@ -2175,6 +2175,8 @@ void free_opal_dev(struct opal_dev *dev)
21752175
return;
21762176

21772177
clean_opal_dev(dev);
2178+
kfree(dev->resp);
2179+
kfree(dev->cmd);
21782180
kfree(dev);
21792181
}
21802182
EXPORT_SYMBOL(free_opal_dev);
@@ -2187,18 +2189,40 @@ struct opal_dev *init_opal_dev(void *data, sec_send_recv *send_recv)
21872189
if (!dev)
21882190
return NULL;
21892191

2192+
/*
2193+
* Presumably DMA-able buffers must be cache-aligned. Kmalloc makes
2194+
* sure the allocated buffer is DMA-safe in that regard.
2195+
*/
2196+
dev->cmd = kmalloc(IO_BUFFER_LENGTH, GFP_KERNEL);
2197+
if (!dev->cmd)
2198+
goto err_free_dev;
2199+
2200+
dev->resp = kmalloc(IO_BUFFER_LENGTH, GFP_KERNEL);
2201+
if (!dev->resp)
2202+
goto err_free_cmd;
2203+
21902204
INIT_LIST_HEAD(&dev->unlk_lst);
21912205
mutex_init(&dev->dev_lock);
21922206
dev->flags = 0;
21932207
dev->data = data;
21942208
dev->send_recv = send_recv;
21952209
if (check_opal_support(dev) != 0) {
21962210
pr_debug("Opal is not supported on this device\n");
2197-
kfree(dev);
2198-
return NULL;
2211+
goto err_free_resp;
21992212
}
22002213

22012214
return dev;
2215+
2216+
err_free_resp:
2217+
kfree(dev->resp);
2218+
2219+
err_free_cmd:
2220+
kfree(dev->cmd);
2221+
2222+
err_free_dev:
2223+
kfree(dev);
2224+
2225+
return NULL;
22022226
}
22032227
EXPORT_SYMBOL(init_opal_dev);
22042228

drivers/nvme/host/core.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,7 @@ void nvme_init_request(struct request *req, struct nvme_command *cmd)
675675
if (req->mq_hctx->type == HCTX_TYPE_POLL)
676676
req->cmd_flags |= REQ_POLLED;
677677
nvme_clear_nvme_request(req);
678+
req->rq_flags |= RQF_QUIET;
678679
memcpy(nvme_req(req)->cmd, cmd, sizeof(*cmd));
679680
}
680681
EXPORT_SYMBOL_GPL(nvme_init_request);
@@ -1037,7 +1038,6 @@ int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
10371038
goto out;
10381039
}
10391040

1040-
req->rq_flags |= RQF_QUIET;
10411041
ret = nvme_execute_rq(req, at_head);
10421042
if (result && ret >= 0)
10431043
*result = nvme_req(req)->result;
@@ -1227,7 +1227,6 @@ static void nvme_keep_alive_work(struct work_struct *work)
12271227
rq->timeout = ctrl->kato * HZ;
12281228
rq->end_io = nvme_keep_alive_end_io;
12291229
rq->end_io_data = ctrl;
1230-
rq->rq_flags |= RQF_QUIET;
12311230
blk_execute_rq_nowait(rq, false);
12321231
}
12331232

drivers/nvme/host/pci.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,7 +1436,6 @@ static enum blk_eh_timer_return nvme_timeout(struct request *req)
14361436

14371437
abort_req->end_io = abort_endio;
14381438
abort_req->end_io_data = NULL;
1439-
abort_req->rq_flags |= RQF_QUIET;
14401439
blk_execute_rq_nowait(abort_req, false);
14411440

14421441
/*
@@ -2490,7 +2489,6 @@ static int nvme_delete_queue(struct nvme_queue *nvmeq, u8 opcode)
24902489
req->end_io_data = nvmeq;
24912490

24922491
init_completion(&nvmeq->delete_done);
2493-
req->rq_flags |= RQF_QUIET;
24942492
blk_execute_rq_nowait(req, false);
24952493
return 0;
24962494
}

drivers/nvme/target/configfs.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,7 @@ static ssize_t nvmet_subsys_attr_model_store_locked(struct nvmet_subsys *subsys,
12151215
const char *page, size_t count)
12161216
{
12171217
int pos = 0, len;
1218+
char *val;
12181219

12191220
if (subsys->subsys_discovered) {
12201221
pr_err("Can't set model number. %s is already assigned\n",
@@ -1237,9 +1238,11 @@ static ssize_t nvmet_subsys_attr_model_store_locked(struct nvmet_subsys *subsys,
12371238
return -EINVAL;
12381239
}
12391240

1240-
subsys->model_number = kmemdup_nul(page, len, GFP_KERNEL);
1241-
if (!subsys->model_number)
1241+
val = kmemdup_nul(page, len, GFP_KERNEL);
1242+
if (!val)
12421243
return -ENOMEM;
1244+
kfree(subsys->model_number);
1245+
subsys->model_number = val;
12431246
return count;
12441247
}
12451248

@@ -1836,6 +1839,7 @@ static void nvmet_host_release(struct config_item *item)
18361839

18371840
#ifdef CONFIG_NVME_TARGET_AUTH
18381841
kfree(host->dhchap_secret);
1842+
kfree(host->dhchap_ctrl_secret);
18391843
#endif
18401844
kfree(host);
18411845
}

0 commit comments

Comments
 (0)