mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	io_uring: add missing BUILD_BUG_ON() checks for new io_uring_sqe fields
Signed-off-by: Stefan Metzmacher <metze@samba.org> Link: https://lore.kernel.org/r/ffcaf8dc4778db4af673822df60dbda6efdd3065.1660201408.git.metze@samba.org Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
		
							parent
							
								
									f2ccb5aed7
								
							
						
					
					
						commit
						9c71d39aa0
					
				
					 2 changed files with 19 additions and 3 deletions
				
			
		| 
						 | 
					@ -3885,13 +3885,15 @@ SYSCALL_DEFINE4(io_uring_register, unsigned int, fd, unsigned int, opcode,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init io_uring_init(void)
 | 
					static int __init io_uring_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#define __BUILD_BUG_VERIFY_ELEMENT(stype, eoffset, etype, ename) do { \
 | 
					#define __BUILD_BUG_VERIFY_OFFSET_SIZE(stype, eoffset, esize, ename) do { \
 | 
				
			||||||
	BUILD_BUG_ON(offsetof(stype, ename) != eoffset); \
 | 
						BUILD_BUG_ON(offsetof(stype, ename) != eoffset); \
 | 
				
			||||||
	BUILD_BUG_ON(sizeof(etype) != sizeof_field(stype, ename)); \
 | 
						BUILD_BUG_ON(sizeof_field(stype, ename) != esize); \
 | 
				
			||||||
} while (0)
 | 
					} while (0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define BUILD_BUG_SQE_ELEM(eoffset, etype, ename) \
 | 
					#define BUILD_BUG_SQE_ELEM(eoffset, etype, ename) \
 | 
				
			||||||
	__BUILD_BUG_VERIFY_ELEMENT(struct io_uring_sqe, eoffset, etype, ename)
 | 
						__BUILD_BUG_VERIFY_OFFSET_SIZE(struct io_uring_sqe, eoffset, sizeof(etype), ename)
 | 
				
			||||||
 | 
					#define BUILD_BUG_SQE_ELEM_SIZE(eoffset, esize, ename) \
 | 
				
			||||||
 | 
						__BUILD_BUG_VERIFY_OFFSET_SIZE(struct io_uring_sqe, eoffset, esize, ename)
 | 
				
			||||||
	BUILD_BUG_ON(sizeof(struct io_uring_sqe) != 64);
 | 
						BUILD_BUG_ON(sizeof(struct io_uring_sqe) != 64);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(0,  __u8,   opcode);
 | 
						BUILD_BUG_SQE_ELEM(0,  __u8,   opcode);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(1,  __u8,   flags);
 | 
						BUILD_BUG_SQE_ELEM(1,  __u8,   flags);
 | 
				
			||||||
| 
						 | 
					@ -3899,6 +3901,8 @@ static int __init io_uring_init(void)
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(4,  __s32,  fd);
 | 
						BUILD_BUG_SQE_ELEM(4,  __s32,  fd);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(8,  __u64,  off);
 | 
						BUILD_BUG_SQE_ELEM(8,  __u64,  off);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(8,  __u64,  addr2);
 | 
						BUILD_BUG_SQE_ELEM(8,  __u64,  addr2);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(8,  __u32,  cmd_op);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(12, __u32, __pad1);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(16, __u64,  addr);
 | 
						BUILD_BUG_SQE_ELEM(16, __u64,  addr);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(16, __u64,  splice_off_in);
 | 
						BUILD_BUG_SQE_ELEM(16, __u64,  splice_off_in);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(24, __u32,  len);
 | 
						BUILD_BUG_SQE_ELEM(24, __u32,  len);
 | 
				
			||||||
| 
						 | 
					@ -3917,13 +3921,22 @@ static int __init io_uring_init(void)
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(28, __u32,  statx_flags);
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  statx_flags);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(28, __u32,  fadvise_advice);
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  fadvise_advice);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(28, __u32,  splice_flags);
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  splice_flags);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  rename_flags);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  unlink_flags);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  hardlink_flags);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  xattr_flags);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(28, __u32,  msg_ring_flags);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(32, __u64,  user_data);
 | 
						BUILD_BUG_SQE_ELEM(32, __u64,  user_data);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(40, __u16,  buf_index);
 | 
						BUILD_BUG_SQE_ELEM(40, __u16,  buf_index);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(40, __u16,  buf_group);
 | 
						BUILD_BUG_SQE_ELEM(40, __u16,  buf_group);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(42, __u16,  personality);
 | 
						BUILD_BUG_SQE_ELEM(42, __u16,  personality);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(44, __s32,  splice_fd_in);
 | 
						BUILD_BUG_SQE_ELEM(44, __s32,  splice_fd_in);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(44, __u32,  file_index);
 | 
						BUILD_BUG_SQE_ELEM(44, __u32,  file_index);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(44, __u16,  notification_idx);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(46, __u16,  addr_len);
 | 
				
			||||||
	BUILD_BUG_SQE_ELEM(48, __u64,  addr3);
 | 
						BUILD_BUG_SQE_ELEM(48, __u64,  addr3);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM_SIZE(48, 0, cmd);
 | 
				
			||||||
 | 
						BUILD_BUG_SQE_ELEM(56, __u64,  __pad2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUILD_BUG_ON(sizeof(struct io_uring_files_update) !=
 | 
						BUILD_BUG_ON(sizeof(struct io_uring_files_update) !=
 | 
				
			||||||
		     sizeof(struct io_uring_rsrc_update));
 | 
							     sizeof(struct io_uring_rsrc_update));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,6 +58,9 @@ int io_uring_cmd_prep_async(struct io_kiocb *req)
 | 
				
			||||||
	struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
 | 
						struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
 | 
				
			||||||
	size_t cmd_size;
 | 
						size_t cmd_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						BUILD_BUG_ON(uring_cmd_pdu_size(0) != 16);
 | 
				
			||||||
 | 
						BUILD_BUG_ON(uring_cmd_pdu_size(1) != 80);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cmd_size = uring_cmd_pdu_size(req->ctx->flags & IORING_SETUP_SQE128);
 | 
						cmd_size = uring_cmd_pdu_size(req->ctx->flags & IORING_SETUP_SQE128);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(req->async_data, ioucmd->cmd, cmd_size);
 | 
						memcpy(req->async_data, ioucmd->cmd, cmd_size);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue