mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-16 04:04:06 +00:00
io_uring/rsrc: disallow multi-source reg buffers
commit edd4782696
upstream.
If two or more mappings go back to back to each other they can be passed
into io_uring to be registered as a single registered buffer. That would
even work if mappings came from different sources, e.g. it's possible to
mix in this way anon pages and pages from shmem or hugetlb. That is not
a problem but it'd rather be less prone if we forbid such mixing.
Cc: <stable@vger.kernel.org>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
71f3d0f9ff
commit
42e15b278c
1 changed files with 8 additions and 5 deletions
|
@ -9228,14 +9228,17 @@ static int io_sqe_buffer_register(struct io_ring_ctx *ctx, struct iovec *iov,
|
|||
pret = pin_user_pages(ubuf, nr_pages, FOLL_WRITE | FOLL_LONGTERM,
|
||||
pages, vmas);
|
||||
if (pret == nr_pages) {
|
||||
struct file *file = vmas[0]->vm_file;
|
||||
|
||||
/* don't support file backed memory */
|
||||
for (i = 0; i < nr_pages; i++) {
|
||||
struct vm_area_struct *vma = vmas[i];
|
||||
|
||||
if (vma_is_shmem(vma))
|
||||
if (vmas[i]->vm_file != file) {
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
if (!file)
|
||||
continue;
|
||||
if (vma->vm_file &&
|
||||
!is_file_hugepages(vma->vm_file)) {
|
||||
if (!vma_is_shmem(vmas[i]) && !is_file_hugepages(file)) {
|
||||
ret = -EOPNOTSUPP;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue