socket.c (db6da59cf27b5661ced03754ae0550f8914eda9e) | socket.c (e1d001fa5b477c4da46a29be1fcece91db7c7c6f) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* SCTP kernel implementation 3 * (C) Copyright IBM Corp. 2001, 2004 4 * Copyright (c) 1999-2000 Cisco, Inc. 5 * Copyright (c) 1999-2001 Motorola, Inc. 6 * Copyright (c) 2001-2003 Intel Corp. 7 * Copyright (c) 2001-2002 Nokia, Inc. 8 * Copyright (c) 2001 La Monte H.P. Yarroll --- 4881 unchanged lines hidden (view full) --- 4890 4891out: 4892 release_sock(sk); 4893 *err = error; 4894 return newsk; 4895} 4896 4897/* The SCTP ioctl handler. */ | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* SCTP kernel implementation 3 * (C) Copyright IBM Corp. 2001, 2004 4 * Copyright (c) 1999-2000 Cisco, Inc. 5 * Copyright (c) 1999-2001 Motorola, Inc. 6 * Copyright (c) 2001-2003 Intel Corp. 7 * Copyright (c) 2001-2002 Nokia, Inc. 8 * Copyright (c) 2001 La Monte H.P. Yarroll --- 4881 unchanged lines hidden (view full) --- 4890 4891out: 4892 release_sock(sk); 4893 *err = error; 4894 return newsk; 4895} 4896 4897/* The SCTP ioctl handler. */ |
4898static int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg) | 4898static int sctp_ioctl(struct sock *sk, int cmd, int *karg) |
4899{ 4900 int rc = -ENOTCONN; 4901 4902 lock_sock(sk); 4903 4904 /* 4905 * SEQPACKET-style sockets in LISTENING state are valid, for 4906 * SCTP, so only discard TCP-style sockets in LISTENING state. 4907 */ 4908 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) 4909 goto out; 4910 4911 switch (cmd) { 4912 case SIOCINQ: { 4913 struct sk_buff *skb; | 4899{ 4900 int rc = -ENOTCONN; 4901 4902 lock_sock(sk); 4903 4904 /* 4905 * SEQPACKET-style sockets in LISTENING state are valid, for 4906 * SCTP, so only discard TCP-style sockets in LISTENING state. 4907 */ 4908 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) 4909 goto out; 4910 4911 switch (cmd) { 4912 case SIOCINQ: { 4913 struct sk_buff *skb; |
4914 unsigned int amount = 0; | 4914 *karg = 0; |
4915 4916 skb = skb_peek(&sk->sk_receive_queue); 4917 if (skb != NULL) { 4918 /* 4919 * We will only return the amount of this packet since 4920 * that is all that will be read. 4921 */ | 4915 4916 skb = skb_peek(&sk->sk_receive_queue); 4917 if (skb != NULL) { 4918 /* 4919 * We will only return the amount of this packet since 4920 * that is all that will be read. 4921 */ |
4922 amount = skb->len; | 4922 *karg = skb->len; |
4923 } | 4923 } |
4924 rc = put_user(amount, (int __user *)arg); | 4924 rc = 0; |
4925 break; 4926 } 4927 default: 4928 rc = -ENOIOCTLCMD; 4929 break; 4930 } 4931out: 4932 release_sock(sk); --- 3343 unchanged lines hidden (view full) --- 8276 retval = -ENOPROTOOPT; 8277 break; 8278 } 8279 8280 release_sock(sk); 8281 return retval; 8282} 8283 | 4925 break; 4926 } 4927 default: 4928 rc = -ENOIOCTLCMD; 4929 break; 4930 } 4931out: 4932 release_sock(sk); --- 3343 unchanged lines hidden (view full) --- 8276 retval = -ENOPROTOOPT; 8277 break; 8278 } 8279 8280 release_sock(sk); 8281 return retval; 8282} 8283 |
8284static bool sctp_bpf_bypass_getsockopt(int level, int optname) 8285{ 8286 if (level == SOL_SCTP) { 8287 switch (optname) { 8288 case SCTP_SOCKOPT_PEELOFF: 8289 case SCTP_SOCKOPT_PEELOFF_FLAGS: 8290 case SCTP_SOCKOPT_CONNECTX3: 8291 return true; 8292 default: 8293 return false; 8294 } 8295 } 8296 8297 return false; 8298} 8299 |
|
8284static int sctp_hash(struct sock *sk) 8285{ 8286 /* STUB */ 8287 return 0; 8288} 8289 8290static void sctp_unhash(struct sock *sk) 8291{ --- 1353 unchanged lines hidden (view full) --- 9645 .disconnect = sctp_disconnect, 9646 .accept = sctp_accept, 9647 .ioctl = sctp_ioctl, 9648 .init = sctp_init_sock, 9649 .destroy = sctp_destroy_sock, 9650 .shutdown = sctp_shutdown, 9651 .setsockopt = sctp_setsockopt, 9652 .getsockopt = sctp_getsockopt, | 8300static int sctp_hash(struct sock *sk) 8301{ 8302 /* STUB */ 8303 return 0; 8304} 8305 8306static void sctp_unhash(struct sock *sk) 8307{ --- 1353 unchanged lines hidden (view full) --- 9661 .disconnect = sctp_disconnect, 9662 .accept = sctp_accept, 9663 .ioctl = sctp_ioctl, 9664 .init = sctp_init_sock, 9665 .destroy = sctp_destroy_sock, 9666 .shutdown = sctp_shutdown, 9667 .setsockopt = sctp_setsockopt, 9668 .getsockopt = sctp_getsockopt, |
9669 .bpf_bypass_getsockopt = sctp_bpf_bypass_getsockopt, |
|
9653 .sendmsg = sctp_sendmsg, 9654 .recvmsg = sctp_recvmsg, 9655 .bind = sctp_bind, 9656 .bind_add = sctp_bind_add, 9657 .backlog_rcv = sctp_backlog_rcv, 9658 .hash = sctp_hash, 9659 .unhash = sctp_unhash, 9660 .no_autobind = true, --- 39 unchanged lines hidden (view full) --- 9700 .disconnect = sctp_disconnect, 9701 .accept = sctp_accept, 9702 .ioctl = sctp_ioctl, 9703 .init = sctp_v6_init_sock, 9704 .destroy = sctp_destroy_sock, 9705 .shutdown = sctp_shutdown, 9706 .setsockopt = sctp_setsockopt, 9707 .getsockopt = sctp_getsockopt, | 9670 .sendmsg = sctp_sendmsg, 9671 .recvmsg = sctp_recvmsg, 9672 .bind = sctp_bind, 9673 .bind_add = sctp_bind_add, 9674 .backlog_rcv = sctp_backlog_rcv, 9675 .hash = sctp_hash, 9676 .unhash = sctp_unhash, 9677 .no_autobind = true, --- 39 unchanged lines hidden (view full) --- 9717 .disconnect = sctp_disconnect, 9718 .accept = sctp_accept, 9719 .ioctl = sctp_ioctl, 9720 .init = sctp_v6_init_sock, 9721 .destroy = sctp_destroy_sock, 9722 .shutdown = sctp_shutdown, 9723 .setsockopt = sctp_setsockopt, 9724 .getsockopt = sctp_getsockopt, |
9725 .bpf_bypass_getsockopt = sctp_bpf_bypass_getsockopt, |
|
9708 .sendmsg = sctp_sendmsg, 9709 .recvmsg = sctp_recvmsg, 9710 .bind = sctp_bind, 9711 .bind_add = sctp_bind_add, 9712 .backlog_rcv = sctp_backlog_rcv, 9713 .hash = sctp_hash, 9714 .unhash = sctp_unhash, 9715 .no_autobind = true, --- 17 unchanged lines hidden --- | 9726 .sendmsg = sctp_sendmsg, 9727 .recvmsg = sctp_recvmsg, 9728 .bind = sctp_bind, 9729 .bind_add = sctp_bind_add, 9730 .backlog_rcv = sctp_backlog_rcv, 9731 .hash = sctp_hash, 9732 .unhash = sctp_unhash, 9733 .no_autobind = true, --- 17 unchanged lines hidden --- |