[PATCH 5.3 36/48] io_uring: ensure registered buffer import returns the IO length

From: Greg Kroah-Hartman
Date: Tue Nov 19 2019 - 00:22:21 EST


From: Jens Axboe <axboe@xxxxxxxxx>

commit 5e559561a8d7e6d4adfce6aa8fbf3daa3dec1577 upstream.

A test case was reported where two linked reads with registered buffers
failed the second link always. This is because we set the expected value
of a request in req->result, and if we don't get this result, then we
fail the dependent links. For some reason the registered buffer import
returned -ERROR/0, while the normal import returns -ERROR/length. This
broke linked commands with registered buffers.

Fix this by making io_import_fixed() correctly return the mapped length.

Cc: stable@xxxxxxxxxxxxxxx # v5.3
Reported-by: æéæ <carter.li@xxxxxxxxxx>
Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

---
fs/io_uring.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -1179,7 +1179,7 @@ static int io_import_fixed(struct io_rin
}
}

- return 0;
+ return len;
}

static ssize_t io_import_iovec(struct io_ring_ctx *ctx, int rw,