Skip to content

Commit 9c71d39

Browse files
metze-sambaaxboe
authored andcommitted
io_uring: add missing BUILD_BUG_ON() checks for new io_uring_sqe fields
Signed-off-by: Stefan Metzmacher <[email protected]> Link: https://lore.kernel.org/r/ffcaf8dc4778db4af673822df60dbda6efdd3065.1660201408.git.metze@samba.org Signed-off-by: Jens Axboe <[email protected]>
1 parent f2ccb5a commit 9c71d39

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

io_uring/io_uring.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3885,20 +3885,24 @@ SYSCALL_DEFINE4(io_uring_register, unsigned int, fd, unsigned int, opcode,
38853885

38863886
static int __init io_uring_init(void)
38873887
{
3888-
#define __BUILD_BUG_VERIFY_ELEMENT(stype, eoffset, etype, ename) do { \
3888+
#define __BUILD_BUG_VERIFY_OFFSET_SIZE(stype, eoffset, esize, ename) do { \
38893889
BUILD_BUG_ON(offsetof(stype, ename) != eoffset); \
3890-
BUILD_BUG_ON(sizeof(etype) != sizeof_field(stype, ename)); \
3890+
BUILD_BUG_ON(sizeof_field(stype, ename) != esize); \
38913891
} while (0)
38923892

38933893
#define BUILD_BUG_SQE_ELEM(eoffset, etype, ename) \
3894-
__BUILD_BUG_VERIFY_ELEMENT(struct io_uring_sqe, eoffset, etype, ename)
3894+
__BUILD_BUG_VERIFY_OFFSET_SIZE(struct io_uring_sqe, eoffset, sizeof(etype), ename)
3895+
#define BUILD_BUG_SQE_ELEM_SIZE(eoffset, esize, ename) \
3896+
__BUILD_BUG_VERIFY_OFFSET_SIZE(struct io_uring_sqe, eoffset, esize, ename)
38953897
BUILD_BUG_ON(sizeof(struct io_uring_sqe) != 64);
38963898
BUILD_BUG_SQE_ELEM(0, __u8, opcode);
38973899
BUILD_BUG_SQE_ELEM(1, __u8, flags);
38983900
BUILD_BUG_SQE_ELEM(2, __u16, ioprio);
38993901
BUILD_BUG_SQE_ELEM(4, __s32, fd);
39003902
BUILD_BUG_SQE_ELEM(8, __u64, off);
39013903
BUILD_BUG_SQE_ELEM(8, __u64, addr2);
3904+
BUILD_BUG_SQE_ELEM(8, __u32, cmd_op);
3905+
BUILD_BUG_SQE_ELEM(12, __u32, __pad1);
39023906
BUILD_BUG_SQE_ELEM(16, __u64, addr);
39033907
BUILD_BUG_SQE_ELEM(16, __u64, splice_off_in);
39043908
BUILD_BUG_SQE_ELEM(24, __u32, len);
@@ -3917,13 +3921,22 @@ static int __init io_uring_init(void)
39173921
BUILD_BUG_SQE_ELEM(28, __u32, statx_flags);
39183922
BUILD_BUG_SQE_ELEM(28, __u32, fadvise_advice);
39193923
BUILD_BUG_SQE_ELEM(28, __u32, splice_flags);
3924+
BUILD_BUG_SQE_ELEM(28, __u32, rename_flags);
3925+
BUILD_BUG_SQE_ELEM(28, __u32, unlink_flags);
3926+
BUILD_BUG_SQE_ELEM(28, __u32, hardlink_flags);
3927+
BUILD_BUG_SQE_ELEM(28, __u32, xattr_flags);
3928+
BUILD_BUG_SQE_ELEM(28, __u32, msg_ring_flags);
39203929
BUILD_BUG_SQE_ELEM(32, __u64, user_data);
39213930
BUILD_BUG_SQE_ELEM(40, __u16, buf_index);
39223931
BUILD_BUG_SQE_ELEM(40, __u16, buf_group);
39233932
BUILD_BUG_SQE_ELEM(42, __u16, personality);
39243933
BUILD_BUG_SQE_ELEM(44, __s32, splice_fd_in);
39253934
BUILD_BUG_SQE_ELEM(44, __u32, file_index);
3935+
BUILD_BUG_SQE_ELEM(44, __u16, notification_idx);
3936+
BUILD_BUG_SQE_ELEM(46, __u16, addr_len);
39263937
BUILD_BUG_SQE_ELEM(48, __u64, addr3);
3938+
BUILD_BUG_SQE_ELEM_SIZE(48, 0, cmd);
3939+
BUILD_BUG_SQE_ELEM(56, __u64, __pad2);
39273940

39283941
BUILD_BUG_ON(sizeof(struct io_uring_files_update) !=
39293942
sizeof(struct io_uring_rsrc_update));

io_uring/uring_cmd.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ int io_uring_cmd_prep_async(struct io_kiocb *req)
5858
struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
5959
size_t cmd_size;
6060

61+
BUILD_BUG_ON(uring_cmd_pdu_size(0) != 16);
62+
BUILD_BUG_ON(uring_cmd_pdu_size(1) != 80);
63+
6164
cmd_size = uring_cmd_pdu_size(req->ctx->flags & IORING_SETUP_SQE128);
6265

6366
memcpy(req->async_data, ioucmd->cmd, cmd_size);

0 commit comments

Comments
 (0)