.. | .. |
---|
10 | 10 | #include <linux/compiler.h> /* __user */ |
---|
11 | 11 | #include <uapi/linux/socket.h> |
---|
12 | 12 | |
---|
| 13 | +struct file; |
---|
13 | 14 | struct pid; |
---|
14 | 15 | struct cred; |
---|
| 16 | +struct socket; |
---|
15 | 17 | |
---|
16 | 18 | #define __sockaddr_check_size(size) \ |
---|
17 | 19 | BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage))) |
---|
.. | .. |
---|
49 | 51 | void *msg_name; /* ptr to socket address structure */ |
---|
50 | 52 | int msg_namelen; /* size of socket address structure */ |
---|
51 | 53 | struct iov_iter msg_iter; /* data */ |
---|
52 | | - void *msg_control; /* ancillary data */ |
---|
| 54 | + |
---|
| 55 | + /* |
---|
| 56 | + * Ancillary data. msg_control_user is the user buffer used for the |
---|
| 57 | + * recv* side when msg_control_is_user is set, msg_control is the kernel |
---|
| 58 | + * buffer used for all other cases. |
---|
| 59 | + */ |
---|
| 60 | + union { |
---|
| 61 | + void *msg_control; |
---|
| 62 | + void __user *msg_control_user; |
---|
| 63 | + }; |
---|
| 64 | + bool msg_control_is_user : 1; |
---|
53 | 65 | __kernel_size_t msg_controllen; /* ancillary data buffer length */ |
---|
54 | 66 | unsigned int msg_flags; /* flags on received message */ |
---|
55 | 67 | struct kiocb *msg_iocb; /* ptr to iocb for async requests */ |
---|
.. | .. |
---|
93 | 105 | |
---|
94 | 106 | #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) |
---|
95 | 107 | |
---|
96 | | -#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + sizeof(struct cmsghdr))) |
---|
| 108 | +#define CMSG_DATA(cmsg) \ |
---|
| 109 | + ((void *)(cmsg) + sizeof(struct cmsghdr)) |
---|
| 110 | +#define CMSG_USER_DATA(cmsg) \ |
---|
| 111 | + ((void __user *)(cmsg) + sizeof(struct cmsghdr)) |
---|
97 | 112 | #define CMSG_SPACE(len) (sizeof(struct cmsghdr) + CMSG_ALIGN(len)) |
---|
98 | 113 | #define CMSG_LEN(len) (sizeof(struct cmsghdr) + (len)) |
---|
99 | 114 | |
---|
.. | .. |
---|
262 | 277 | #define PF_MAX AF_MAX |
---|
263 | 278 | |
---|
264 | 279 | /* Maximum queue length specifiable by listen. */ |
---|
265 | | -#define SOMAXCONN 128 |
---|
| 280 | +#define SOMAXCONN 4096 |
---|
266 | 281 | |
---|
267 | 282 | /* Flags we can use with send/ and recv. |
---|
268 | 283 | Added those for 1003.1g not all are supported yet |
---|
.. | .. |
---|
286 | 301 | #define MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */ |
---|
287 | 302 | #define MSG_MORE 0x8000 /* Sender will send more */ |
---|
288 | 303 | #define MSG_WAITFORONE 0x10000 /* recvmmsg(): block until 1+ packets avail */ |
---|
| 304 | +#define MSG_SENDPAGE_NOPOLICY 0x10000 /* sendpage() internal : do no apply policy */ |
---|
289 | 305 | #define MSG_SENDPAGE_NOTLAST 0x20000 /* sendpage() internal : not the last page */ |
---|
290 | 306 | #define MSG_BATCH 0x40000 /* sendmmsg(): more messages coming */ |
---|
291 | 307 | #define MSG_EOF MSG_FIN |
---|
292 | 308 | #define MSG_NO_SHARED_FRAGS 0x80000 /* sendpage() internal : page frags are not shared */ |
---|
| 309 | +#define MSG_SENDPAGE_DECRYPTED 0x100000 /* sendpage() internal : page may carry |
---|
| 310 | + * plain text and require encryption |
---|
| 311 | + */ |
---|
293 | 312 | |
---|
294 | 313 | #define MSG_ZEROCOPY 0x4000000 /* Use user data in kernel path */ |
---|
295 | 314 | #define MSG_FASTOPEN 0x20000000 /* Send data in TCP SYN */ |
---|
.. | .. |
---|
348 | 367 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr); |
---|
349 | 368 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
---|
350 | 369 | |
---|
351 | | -struct timespec; |
---|
| 370 | +struct timespec64; |
---|
| 371 | +struct __kernel_timespec; |
---|
| 372 | +struct old_timespec32; |
---|
| 373 | + |
---|
| 374 | +struct scm_timestamping_internal { |
---|
| 375 | + struct timespec64 ts[3]; |
---|
| 376 | +}; |
---|
| 377 | + |
---|
| 378 | +extern void put_cmsg_scm_timestamping64(struct msghdr *msg, struct scm_timestamping_internal *tss); |
---|
| 379 | +extern void put_cmsg_scm_timestamping(struct msghdr *msg, struct scm_timestamping_internal *tss); |
---|
352 | 380 | |
---|
353 | 381 | /* The __sys_...msg variants allow MSG_CMSG_COMPAT iff |
---|
354 | 382 | * forbid_cmsg_compat==false |
---|
.. | .. |
---|
357 | 385 | unsigned int flags, bool forbid_cmsg_compat); |
---|
358 | 386 | extern long __sys_sendmsg(int fd, struct user_msghdr __user *msg, |
---|
359 | 387 | unsigned int flags, bool forbid_cmsg_compat); |
---|
360 | | -extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, |
---|
361 | | - unsigned int flags, struct timespec *timeout); |
---|
| 388 | +extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, |
---|
| 389 | + unsigned int vlen, unsigned int flags, |
---|
| 390 | + struct __kernel_timespec __user *timeout, |
---|
| 391 | + struct old_timespec32 __user *timeout32); |
---|
362 | 392 | extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg, |
---|
363 | 393 | unsigned int vlen, unsigned int flags, |
---|
364 | 394 | bool forbid_cmsg_compat); |
---|
| 395 | +extern long __sys_sendmsg_sock(struct socket *sock, struct msghdr *msg, |
---|
| 396 | + unsigned int flags); |
---|
| 397 | +extern long __sys_recvmsg_sock(struct socket *sock, struct msghdr *msg, |
---|
| 398 | + struct user_msghdr __user *umsg, |
---|
| 399 | + struct sockaddr __user *uaddr, |
---|
| 400 | + unsigned int flags); |
---|
| 401 | +extern int sendmsg_copy_msghdr(struct msghdr *msg, |
---|
| 402 | + struct user_msghdr __user *umsg, unsigned flags, |
---|
| 403 | + struct iovec **iov); |
---|
| 404 | +extern int recvmsg_copy_msghdr(struct msghdr *msg, |
---|
| 405 | + struct user_msghdr __user *umsg, unsigned flags, |
---|
| 406 | + struct sockaddr __user **uaddr, |
---|
| 407 | + struct iovec **iov); |
---|
| 408 | +extern int __copy_msghdr_from_user(struct msghdr *kmsg, |
---|
| 409 | + struct user_msghdr __user *umsg, |
---|
| 410 | + struct sockaddr __user **save_addr, |
---|
| 411 | + struct iovec __user **uiov, size_t *nsegs); |
---|
365 | 412 | |
---|
366 | 413 | /* helpers which do the actual work for syscalls */ |
---|
367 | 414 | extern int __sys_recvfrom(int fd, void __user *ubuf, size_t size, |
---|
.. | .. |
---|
370 | 417 | extern int __sys_sendto(int fd, void __user *buff, size_t len, |
---|
371 | 418 | unsigned int flags, struct sockaddr __user *addr, |
---|
372 | 419 | int addr_len); |
---|
| 420 | +extern int __sys_accept4_file(struct file *file, unsigned file_flags, |
---|
| 421 | + struct sockaddr __user *upeer_sockaddr, |
---|
| 422 | + int __user *upeer_addrlen, int flags, |
---|
| 423 | + unsigned long nofile); |
---|
| 424 | +extern struct file *do_accept(struct file *file, unsigned file_flags, |
---|
| 425 | + struct sockaddr __user *upeer_sockaddr, |
---|
| 426 | + int __user *upeer_addrlen, int flags); |
---|
373 | 427 | extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, |
---|
374 | 428 | int __user *upeer_addrlen, int flags); |
---|
375 | 429 | extern int __sys_socket(int family, int type, int protocol); |
---|
376 | 430 | extern int __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen); |
---|
| 431 | +extern int __sys_connect_file(struct file *file, struct sockaddr_storage *addr, |
---|
| 432 | + int addrlen, int file_flags); |
---|
377 | 433 | extern int __sys_connect(int fd, struct sockaddr __user *uservaddr, |
---|
378 | 434 | int addrlen); |
---|
379 | 435 | extern int __sys_listen(int fd, int backlog); |
---|
.. | .. |
---|
383 | 439 | int __user *usockaddr_len); |
---|
384 | 440 | extern int __sys_socketpair(int family, int type, int protocol, |
---|
385 | 441 | int __user *usockvec); |
---|
| 442 | +extern int __sys_shutdown_sock(struct socket *sock, int how); |
---|
386 | 443 | extern int __sys_shutdown(int fd, int how); |
---|
387 | 444 | #endif /* _LINUX_SOCKET_H */ |
---|