io_uring-5.10-2020-11-27
-----BEGIN PGP SIGNATURE----- iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAl/BZBwQHGF4Ym9lQGtl cm5lbC5kawAKCRD301j7KXHgpku+EACqrIZ6wuA/mIWbKs9wWf280hRbIQL1q7zy Ejj2A6DfclZz8XuUUfrRQ2diDDPBNnfPVRfiIzAi/AO7f7jDn91+2ZYfoJJWLZbq kCDHScPI6+OjDho5r+3vocxdoXZfuYxBlKsIzdiLl32mGEWbYjd+rmlAVJ74FPYz mFddmQCZoTBuEArpW6h8bKoPLgoC4zzZ2MgcjjpHT7Me/ai8t7OoA+FBpUjRcu+q Bt/ZfjIiWOzss9+psk5BSrHo5yXY51TWiiuV8hVM3RwVsL2dabG4WPgaLzum3H9p UZ4NAvXdRX9gWfF85mo7PEo1/0REmRy4BOJQ8qtBnvq6eepttAXHBx0SFDfpcLzG oAB4HaxuixAdsutnIynBXad3MskhNtFzbz/4UqOcnKbpT5Zxi65YiBKAsNwXjIdU bc3rZ3hyP4FifzNFa86wFLQ9w9gKV8mEogAz122lxL44AyguZzwN1I3H/YSEt2iX tKqHNWxnrb9MP3ycAuMvwjF3aNruns3QVv5fZQ9CrAUnAVF6Q8o/E2aTt4rmiJUW kQAvQJQj6MhBi/GXJk6YmTTDYgEMZ5JxFV3IVW17YZiMlpvIFML4X2nKo12qhwnq 8eZ0qJHFRyycW9eBY3qznw8S5Z7Nh8r91MjJs5sullHg99xKJbvR+IoswImfJMme Gk857imwGw== =HJnn -----END PGP SIGNATURE----- Merge tag 'io_uring-5.10-2020-11-27' of git://git.kernel.dk/linux-block Pull io_uring fixes from Jens Axboe: - Out of bounds fix for the cq size cap from earlier this release (Joseph) - iov_iter type check fix (Pavel) - Files grab + cancelation fix (Pavel) * tag 'io_uring-5.10-2020-11-27' of git://git.kernel.dk/linux-block: io_uring: fix files grab/cancel race io_uring: fix ITER_BVEC check io_uring: fix shift-out-of-bounds when round up cq size
This commit is contained in:
Коммит
9223e74f99
|
@ -1313,22 +1313,6 @@ static bool io_grab_identity(struct io_kiocb *req)
|
|||
return false;
|
||||
req->work.flags |= IO_WQ_WORK_FSIZE;
|
||||
}
|
||||
|
||||
if (!(req->work.flags & IO_WQ_WORK_FILES) &&
|
||||
(def->work_flags & IO_WQ_WORK_FILES) &&
|
||||
!(req->flags & REQ_F_NO_FILE_TABLE)) {
|
||||
if (id->files != current->files ||
|
||||
id->nsproxy != current->nsproxy)
|
||||
return false;
|
||||
atomic_inc(&id->files->count);
|
||||
get_nsproxy(id->nsproxy);
|
||||
req->flags |= REQ_F_INFLIGHT;
|
||||
|
||||
spin_lock_irq(&ctx->inflight_lock);
|
||||
list_add(&req->inflight_entry, &ctx->inflight_list);
|
||||
spin_unlock_irq(&ctx->inflight_lock);
|
||||
req->work.flags |= IO_WQ_WORK_FILES;
|
||||
}
|
||||
#ifdef CONFIG_BLK_CGROUP
|
||||
if (!(req->work.flags & IO_WQ_WORK_BLKCG) &&
|
||||
(def->work_flags & IO_WQ_WORK_BLKCG)) {
|
||||
|
@ -1370,6 +1354,21 @@ static bool io_grab_identity(struct io_kiocb *req)
|
|||
}
|
||||
spin_unlock(¤t->fs->lock);
|
||||
}
|
||||
if (!(req->work.flags & IO_WQ_WORK_FILES) &&
|
||||
(def->work_flags & IO_WQ_WORK_FILES) &&
|
||||
!(req->flags & REQ_F_NO_FILE_TABLE)) {
|
||||
if (id->files != current->files ||
|
||||
id->nsproxy != current->nsproxy)
|
||||
return false;
|
||||
atomic_inc(&id->files->count);
|
||||
get_nsproxy(id->nsproxy);
|
||||
req->flags |= REQ_F_INFLIGHT;
|
||||
|
||||
spin_lock_irq(&ctx->inflight_lock);
|
||||
list_add(&req->inflight_entry, &ctx->inflight_list);
|
||||
spin_unlock_irq(&ctx->inflight_lock);
|
||||
req->work.flags |= IO_WQ_WORK_FILES;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -3193,7 +3192,7 @@ static void io_req_map_rw(struct io_kiocb *req, const struct iovec *iovec,
|
|||
rw->free_iovec = iovec;
|
||||
rw->bytes_done = 0;
|
||||
/* can only be fixed buffers, no need to do anything */
|
||||
if (iter->type == ITER_BVEC)
|
||||
if (iov_iter_is_bvec(iter))
|
||||
return;
|
||||
if (!iovec) {
|
||||
unsigned iov_off = 0;
|
||||
|
@ -9252,14 +9251,16 @@ static int io_uring_create(unsigned entries, struct io_uring_params *p,
|
|||
* to a power-of-two, if it isn't already. We do NOT impose
|
||||
* any cq vs sq ring sizing.
|
||||
*/
|
||||
p->cq_entries = roundup_pow_of_two(p->cq_entries);
|
||||
if (p->cq_entries < p->sq_entries)
|
||||
if (!p->cq_entries)
|
||||
return -EINVAL;
|
||||
if (p->cq_entries > IORING_MAX_CQ_ENTRIES) {
|
||||
if (!(p->flags & IORING_SETUP_CLAMP))
|
||||
return -EINVAL;
|
||||
p->cq_entries = IORING_MAX_CQ_ENTRIES;
|
||||
}
|
||||
p->cq_entries = roundup_pow_of_two(p->cq_entries);
|
||||
if (p->cq_entries < p->sq_entries)
|
||||
return -EINVAL;
|
||||
} else {
|
||||
p->cq_entries = 2 * p->sq_entries;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче