forked from Minki/linux
nvmet: seset ns->file when open fails
Reset the ns->file value to NULL also in the error case in nvmet_file_ns_enable(). The ns->file variable points either to file object or contains the error code after the filp_open() call. This can lead to following problem: When the user first setups an invalid file backend and tries to enable the ns, it will fail. Then the user switches over to a bdev backend and enables successfully the ns. The first received I/O will crash the system because the IO backend is chosen based on the ns->file value: static u16 nvmet_parse_io_cmd(struct nvmet_req *req) { [...] if (req->ns->file) return nvmet_file_parse_io_cmd(req); return nvmet_bdev_parse_io_cmd(req); } Reported-by: Enzo Matsumiya <ematsumiya@suse.com> Signed-off-by: Daniel Wagner <dwagner@suse.de> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
7a4ffd20ec
commit
85428beac8
@ -49,9 +49,11 @@ int nvmet_file_ns_enable(struct nvmet_ns *ns)
|
||||
|
||||
ns->file = filp_open(ns->device_path, flags, 0);
|
||||
if (IS_ERR(ns->file)) {
|
||||
pr_err("failed to open file %s: (%ld)\n",
|
||||
ns->device_path, PTR_ERR(ns->file));
|
||||
return PTR_ERR(ns->file);
|
||||
ret = PTR_ERR(ns->file);
|
||||
pr_err("failed to open file %s: (%d)\n",
|
||||
ns->device_path, ret);
|
||||
ns->file = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = nvmet_file_ns_revalidate(ns);
|
||||
|
Loading…
Reference in New Issue
Block a user