ublk: read any SQE values upfront
authorJens Axboe <axboe@kernel.dk>
Thu, 6 Apr 2023 02:00:46 +0000 (20:00 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 6 Apr 2023 02:59:17 +0000 (20:59 -0600)
commit8c68ae3b22fa6fb2dbe83ef955ff10936503d28e
tree0c43bbb9204ae77d2f6d2e116f8d55ad36430c37
parent38a8c4d1d45006841f0643f4cb29b5e50758837c
ublk: read any SQE values upfront

Since SQE memory is shared with userspace, we should only be reading it
once. We cannot read it multiple times, particularly when it's read once
for validation and then read again for the actual use.

ublk_ch_uring_cmd() is safe when called as a retry operation, as the
memory backing is stable at that point. But for normal issue, we want
to ensure that we only read ublksrv_io_cmd once. Wrap the function in
a helper that reads the value into an on-stack copy of the struct.

Cc: stable@vger.kernel.org # 6.0+
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c