diff options
author | Jens Axboe <axboe@kernel.dk> | 2025-10-15 13:38:53 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2025-10-15 13:38:53 -0600 |
commit | 18d6b1743eafeb3fb1e0ea5a2b7fd0a773d525a8 (patch) | |
tree | c605a6126b040092f035bdf85a8efc85e40663ff /scripts/bpf_doc.py | |
parent | 437c23357d897f5b5b7d297c477da44b56654d46 (diff) |
io_uring/rw: check for NULL io_br_sel when putting a buffer
Both the read and write side use kiocb_done() to finish a request, and
kiocb_done() will call io_put_kbuf() in case a provided buffer was used
for the request. Provided buffers are not supported for writes, hence
NULL is being passed in. This normally works fine, as io_put_kbuf()
won't actually use the value unless REQ_F_BUFFER_RING or
REQ_F_BUFFER_SELECTED is set in the request flags. But depending on
compiler (or whether or not CONFIG_CC_OPTIMIZE_FOR_SIZE is set), that
may be done even though the value is never used. This will then cause a
NULL pointer dereference.
Make it a bit more obvious and check for a NULL io_br_sel, and don't
even bother calling io_put_kbuf() for that case.
Fixes: 5fda51255439 ("io_uring/kbuf: switch to storing struct io_buffer_list locally")
Reported-by: David Howells <dhowells@redhat.com>
Tested-by: David Howells <dhowells@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'scripts/bpf_doc.py')
0 files changed, 0 insertions, 0 deletions