Spdk/test/unit/lib/nvme
Alexey Marchuk 8818ace2f4 nvme: Don't use stack variable to track request completion
A pointer to a stack variable is passed as an argument to
nvme_completion_poll_cb function, later this variable is used
to track completion in the spdk_nvme_wait_for_completion() function.
If normal scenario a request submitted to the admin queue will be completed
within the function which submitted the request.
spdk_nvme_wait_for_completion() calls nvme_transport_qpair_process_completions
which may return an error to the caller, the caller may exit from the
function which submitted the request and the pointer to the stack variable
will no longer be valid. Thereby the request may not be completed at that time
and completed later (e.g. when the controller/qpair are destroyed)
and that will lead to call to nvme_completion_poll_cb with the pointer
to invalid stack variable.
Fix - Dynamically allocate status structure to track the completion;
Add a new field to nvme_completion_poll_status structure to track status
objects that need to be freed in a completion callback

Fixes #1125

Change-Id: Ie0cd8316e1284d42a67439b056c48ab89f23e0d0
Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/481530
Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
2020-01-27 22:48:18 +00:00
..
nvme_ctrlr_cmd.c test/unit: Add set_host_id_cmds to unittest. 2020-01-08 09:12:10 +00:00
nvme_ctrlr_ocssd_cmd.c ocssd: nvme driver public API extension for Open-Channel 2018-06-12 17:59:33 +00:00
nvme_ctrlr.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
nvme_ns_cmd.c lib/nvme: add spdk_nvme_transport_available_by_name 2020-01-16 09:10:38 +00:00
nvme_ns_ocssd_cmd.c lib/nvme: add spdk_nvme_transport_available_by_name 2020-01-16 09:10:38 +00:00
nvme_ns.c nvme: add helper to wait for internal commands 2018-05-28 01:43:55 +00:00
nvme_pcie.c lib/nvme: add function tables for all transports. 2020-01-16 09:10:38 +00:00
nvme_qpair.c nvme: call the callback for the queued requests when there is submission failure 2019-12-20 10:04:57 +00:00
nvme_quirks.c nvme: add debug logs for matched quirks 2018-02-23 10:07:39 -05:00
nvme_rdma.c lib/nvme: add function tables for all transports. 2020-01-16 09:10:38 +00:00
nvme_tcp.c lib/nvme: add function tables for all transports. 2020-01-16 09:10:38 +00:00
nvme_uevent.c test/unit: Add nvme_uevent_ut.c to unittest. 2020-01-07 12:20:01 +00:00
nvme.c nvme: Don't use stack variable to track request completion 2020-01-27 22:48:18 +00:00
Makefile test/unit: Add nvme_uevent_ut.c to unittest. 2020-01-07 12:20:01 +00:00