@@ -2157,7 +2157,7 @@ static int io_sendmsg_prep(struct io_kiocb *req, struct io_async_ctx *io)
2157
2157
unsigned flags ;
2158
2158
2159
2159
flags = READ_ONCE (sqe -> msg_flags );
2160
- msg = ( struct user_msghdr __user * )( unsigned long ) READ_ONCE (sqe -> addr );
2160
+ msg = u64_to_user_ptr ( READ_ONCE (sqe -> addr ) );
2161
2161
io -> msg .iov = io -> msg .fast_iov ;
2162
2162
return sendmsg_copy_msghdr (& io -> msg .msg , msg , flags , & io -> msg .iov );
2163
2163
#else
@@ -2239,7 +2239,7 @@ static int io_recvmsg_prep(struct io_kiocb *req, struct io_async_ctx *io)
2239
2239
unsigned flags ;
2240
2240
2241
2241
flags = READ_ONCE (sqe -> msg_flags );
2242
- msg = ( struct user_msghdr __user * )( unsigned long ) READ_ONCE (sqe -> addr );
2242
+ msg = u64_to_user_ptr ( READ_ONCE (sqe -> addr ) );
2243
2243
io -> msg .iov = io -> msg .fast_iov ;
2244
2244
return recvmsg_copy_msghdr (& io -> msg .msg , msg , flags , & io -> msg .uaddr ,
2245
2245
& io -> msg .iov );
@@ -2273,8 +2273,7 @@ static int io_recvmsg(struct io_kiocb *req, struct io_kiocb **nxt,
2273
2273
else if (force_nonblock )
2274
2274
flags |= MSG_DONTWAIT ;
2275
2275
2276
- msg = (struct user_msghdr __user * ) (unsigned long )
2277
- READ_ONCE (sqe -> addr );
2276
+ msg = u64_to_user_ptr (READ_ONCE (sqe -> addr ));
2278
2277
if (req -> io ) {
2279
2278
kmsg = & req -> io -> msg ;
2280
2279
kmsg -> msg .msg_name = & addr ;
@@ -2331,9 +2330,8 @@ static int io_accept_prep(struct io_kiocb *req)
2331
2330
if (sqe -> ioprio || sqe -> len || sqe -> buf_index )
2332
2331
return - EINVAL ;
2333
2332
2334
- accept -> addr = (struct sockaddr __user * )
2335
- (unsigned long ) READ_ONCE (sqe -> addr );
2336
- accept -> addr_len = (int __user * ) (unsigned long ) READ_ONCE (sqe -> addr2 );
2333
+ accept -> addr = u64_to_user_ptr (READ_ONCE (sqe -> addr ));
2334
+ accept -> addr_len = u64_to_user_ptr (READ_ONCE (sqe -> addr2 ));
2337
2335
accept -> flags = READ_ONCE (sqe -> accept_flags );
2338
2336
req -> flags |= REQ_F_PREPPED ;
2339
2337
return 0 ;
@@ -2407,7 +2405,7 @@ static int io_connect_prep(struct io_kiocb *req, struct io_async_ctx *io)
2407
2405
struct sockaddr __user * addr ;
2408
2406
int addr_len ;
2409
2407
2410
- addr = ( struct sockaddr __user * ) ( unsigned long ) READ_ONCE (sqe -> addr );
2408
+ addr = u64_to_user_ptr ( READ_ONCE (sqe -> addr ) );
2411
2409
addr_len = READ_ONCE (sqe -> addr2 );
2412
2410
return move_addr_to_kernel (addr , addr_len , & io -> connect .address );
2413
2411
#else
@@ -4702,7 +4700,7 @@ static int io_copy_iov(struct io_ring_ctx *ctx, struct iovec *dst,
4702
4700
if (copy_from_user (& ciov , & ciovs [index ], sizeof (ciov )))
4703
4701
return - EFAULT ;
4704
4702
4705
- dst -> iov_base = ( void __user * ) ( unsigned long ) ciov .iov_base ;
4703
+ dst -> iov_base = u64_to_user_ptr (( u64 ) ciov .iov_base ) ;
4706
4704
dst -> iov_len = ciov .iov_len ;
4707
4705
return 0 ;
4708
4706
}
0 commit comments