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 ---