Linux Audio

Check our new training course

Loading...
v5.4
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * INET		An implementation of the TCP/IP protocol suite for the LINUX
   4 *		operating system.  INET is implemented using the  BSD Socket
   5 *		interface as the means of communication with the user level.
   6 *
   7 *		Generic socket support routines. Memory allocators, socket lock/release
   8 *		handler for protocols to use and generic option handler.
   9 *
 
  10 * Authors:	Ross Biro
  11 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12 *		Florian La Roche, <flla@stud.uni-sb.de>
  13 *		Alan Cox, <A.Cox@swansea.ac.uk>
  14 *
  15 * Fixes:
  16 *		Alan Cox	: 	Numerous verify_area() problems
  17 *		Alan Cox	:	Connecting on a connecting socket
  18 *					now returns an error for tcp.
  19 *		Alan Cox	:	sock->protocol is set correctly.
  20 *					and is not sometimes left as 0.
  21 *		Alan Cox	:	connect handles icmp errors on a
  22 *					connect properly. Unfortunately there
  23 *					is a restart syscall nasty there. I
  24 *					can't match BSD without hacking the C
  25 *					library. Ideas urgently sought!
  26 *		Alan Cox	:	Disallow bind() to addresses that are
  27 *					not ours - especially broadcast ones!!
  28 *		Alan Cox	:	Socket 1024 _IS_ ok for users. (fencepost)
  29 *		Alan Cox	:	sock_wfree/sock_rfree don't destroy sockets,
  30 *					instead they leave that for the DESTROY timer.
  31 *		Alan Cox	:	Clean up error flag in accept
  32 *		Alan Cox	:	TCP ack handling is buggy, the DESTROY timer
  33 *					was buggy. Put a remove_sock() in the handler
  34 *					for memory when we hit 0. Also altered the timer
  35 *					code. The ACK stuff can wait and needs major
  36 *					TCP layer surgery.
  37 *		Alan Cox	:	Fixed TCP ack bug, removed remove sock
  38 *					and fixed timer/inet_bh race.
  39 *		Alan Cox	:	Added zapped flag for TCP
  40 *		Alan Cox	:	Move kfree_skb into skbuff.c and tidied up surplus code
  41 *		Alan Cox	:	for new sk_buff allocations wmalloc/rmalloc now call alloc_skb
  42 *		Alan Cox	:	kfree_s calls now are kfree_skbmem so we can track skb resources
  43 *		Alan Cox	:	Supports socket option broadcast now as does udp. Packet and raw need fixing.
  44 *		Alan Cox	:	Added RCVBUF,SNDBUF size setting. It suddenly occurred to me how easy it was so...
  45 *		Rick Sladkey	:	Relaxed UDP rules for matching packets.
  46 *		C.E.Hawkins	:	IFF_PROMISC/SIOCGHWADDR support
  47 *	Pauline Middelink	:	identd support
  48 *		Alan Cox	:	Fixed connect() taking signals I think.
  49 *		Alan Cox	:	SO_LINGER supported
  50 *		Alan Cox	:	Error reporting fixes
  51 *		Anonymous	:	inet_create tidied up (sk->reuse setting)
  52 *		Alan Cox	:	inet sockets don't set sk->type!
  53 *		Alan Cox	:	Split socket option code
  54 *		Alan Cox	:	Callbacks
  55 *		Alan Cox	:	Nagle flag for Charles & Johannes stuff
  56 *		Alex		:	Removed restriction on inet fioctl
  57 *		Alan Cox	:	Splitting INET from NET core
  58 *		Alan Cox	:	Fixed bogus SO_TYPE handling in getsockopt()
  59 *		Adam Caldwell	:	Missing return in SO_DONTROUTE/SO_DEBUG code
  60 *		Alan Cox	:	Split IP from generic code
  61 *		Alan Cox	:	New kfree_skbmem()
  62 *		Alan Cox	:	Make SO_DEBUG superuser only.
  63 *		Alan Cox	:	Allow anyone to clear SO_DEBUG
  64 *					(compatibility fix)
  65 *		Alan Cox	:	Added optimistic memory grabbing for AF_UNIX throughput.
  66 *		Alan Cox	:	Allocator for a socket is settable.
  67 *		Alan Cox	:	SO_ERROR includes soft errors.
  68 *		Alan Cox	:	Allow NULL arguments on some SO_ opts
  69 *		Alan Cox	: 	Generic socket allocation to make hooks
  70 *					easier (suggested by Craig Metz).
  71 *		Michael Pall	:	SO_ERROR returns positive errno again
  72 *              Steve Whitehouse:       Added default destructor to free
  73 *                                      protocol private data.
  74 *              Steve Whitehouse:       Added various other default routines
  75 *                                      common to several socket families.
  76 *              Chris Evans     :       Call suser() check last on F_SETOWN
  77 *		Jay Schulist	:	Added SO_ATTACH_FILTER and SO_DETACH_FILTER.
  78 *		Andi Kleen	:	Add sock_kmalloc()/sock_kfree_s()
  79 *		Andi Kleen	:	Fix write_space callback
  80 *		Chris Evans	:	Security fixes - signedness again
  81 *		Arnaldo C. Melo :       cleanups, use skb_queue_purge
  82 *
  83 * To Fix:
 
 
 
 
 
 
  84 */
  85
  86#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  87
  88#include <asm/unaligned.h>
  89#include <linux/capability.h>
  90#include <linux/errno.h>
  91#include <linux/errqueue.h>
  92#include <linux/types.h>
  93#include <linux/socket.h>
  94#include <linux/in.h>
  95#include <linux/kernel.h>
  96#include <linux/module.h>
  97#include <linux/proc_fs.h>
  98#include <linux/seq_file.h>
  99#include <linux/sched.h>
 100#include <linux/sched/mm.h>
 101#include <linux/timer.h>
 102#include <linux/string.h>
 103#include <linux/sockios.h>
 104#include <linux/net.h>
 105#include <linux/mm.h>
 106#include <linux/slab.h>
 107#include <linux/interrupt.h>
 108#include <linux/poll.h>
 109#include <linux/tcp.h>
 110#include <linux/init.h>
 111#include <linux/highmem.h>
 112#include <linux/user_namespace.h>
 113#include <linux/static_key.h>
 114#include <linux/memcontrol.h>
 115#include <linux/prefetch.h>
 116
 117#include <linux/uaccess.h>
 118
 119#include <linux/netdevice.h>
 120#include <net/protocol.h>
 121#include <linux/skbuff.h>
 122#include <net/net_namespace.h>
 123#include <net/request_sock.h>
 124#include <net/sock.h>
 125#include <linux/net_tstamp.h>
 126#include <net/xfrm.h>
 127#include <linux/ipsec.h>
 128#include <net/cls_cgroup.h>
 129#include <net/netprio_cgroup.h>
 130#include <linux/sock_diag.h>
 131
 132#include <linux/filter.h>
 133#include <net/sock_reuseport.h>
 134#include <net/bpf_sk_storage.h>
 135
 136#include <trace/events/sock.h>
 137
 
 138#include <net/tcp.h>
 
 
 139#include <net/busy_poll.h>
 140
 141static DEFINE_MUTEX(proto_list_mutex);
 142static LIST_HEAD(proto_list);
 143
 144static void sock_inuse_add(struct net *net, int val);
 145
 146/**
 147 * sk_ns_capable - General socket capability test
 148 * @sk: Socket to use a capability on or through
 149 * @user_ns: The user namespace of the capability to use
 150 * @cap: The capability to use
 151 *
 152 * Test to see if the opener of the socket had when the socket was
 153 * created and the current process has the capability @cap in the user
 154 * namespace @user_ns.
 155 */
 156bool sk_ns_capable(const struct sock *sk,
 157		   struct user_namespace *user_ns, int cap)
 158{
 159	return file_ns_capable(sk->sk_socket->file, user_ns, cap) &&
 160		ns_capable(user_ns, cap);
 161}
 162EXPORT_SYMBOL(sk_ns_capable);
 163
 164/**
 165 * sk_capable - Socket global capability test
 166 * @sk: Socket to use a capability on or through
 167 * @cap: The global capability to use
 168 *
 169 * Test to see if the opener of the socket had when the socket was
 170 * created and the current process has the capability @cap in all user
 171 * namespaces.
 172 */
 173bool sk_capable(const struct sock *sk, int cap)
 174{
 175	return sk_ns_capable(sk, &init_user_ns, cap);
 176}
 177EXPORT_SYMBOL(sk_capable);
 178
 179/**
 180 * sk_net_capable - Network namespace socket capability test
 181 * @sk: Socket to use a capability on or through
 182 * @cap: The capability to use
 183 *
 184 * Test to see if the opener of the socket had when the socket was created
 185 * and the current process has the capability @cap over the network namespace
 186 * the socket is a member of.
 187 */
 188bool sk_net_capable(const struct sock *sk, int cap)
 189{
 190	return sk_ns_capable(sk, sock_net(sk)->user_ns, cap);
 191}
 192EXPORT_SYMBOL(sk_net_capable);
 193
 194/*
 195 * Each address family might have different locking rules, so we have
 196 * one slock key per address family and separate keys for internal and
 197 * userspace sockets.
 198 */
 199static struct lock_class_key af_family_keys[AF_MAX];
 200static struct lock_class_key af_family_kern_keys[AF_MAX];
 201static struct lock_class_key af_family_slock_keys[AF_MAX];
 202static struct lock_class_key af_family_kern_slock_keys[AF_MAX];
 203
 204/*
 205 * Make lock validator output more readable. (we pre-construct these
 206 * strings build-time, so that runtime initialization of socket
 207 * locks is fast):
 208 */
 209
 210#define _sock_locks(x)						  \
 211  x "AF_UNSPEC",	x "AF_UNIX"     ,	x "AF_INET"     , \
 212  x "AF_AX25"  ,	x "AF_IPX"      ,	x "AF_APPLETALK", \
 213  x "AF_NETROM",	x "AF_BRIDGE"   ,	x "AF_ATMPVC"   , \
 214  x "AF_X25"   ,	x "AF_INET6"    ,	x "AF_ROSE"     , \
 215  x "AF_DECnet",	x "AF_NETBEUI"  ,	x "AF_SECURITY" , \
 216  x "AF_KEY"   ,	x "AF_NETLINK"  ,	x "AF_PACKET"   , \
 217  x "AF_ASH"   ,	x "AF_ECONET"   ,	x "AF_ATMSVC"   , \
 218  x "AF_RDS"   ,	x "AF_SNA"      ,	x "AF_IRDA"     , \
 219  x "AF_PPPOX" ,	x "AF_WANPIPE"  ,	x "AF_LLC"      , \
 220  x "27"       ,	x "28"          ,	x "AF_CAN"      , \
 221  x "AF_TIPC"  ,	x "AF_BLUETOOTH",	x "IUCV"        , \
 222  x "AF_RXRPC" ,	x "AF_ISDN"     ,	x "AF_PHONET"   , \
 223  x "AF_IEEE802154",	x "AF_CAIF"	,	x "AF_ALG"      , \
 224  x "AF_NFC"   ,	x "AF_VSOCK"    ,	x "AF_KCM"      , \
 225  x "AF_QIPCRTR",	x "AF_SMC"	,	x "AF_XDP"	, \
 226  x "AF_MAX"
 227
 228static const char *const af_family_key_strings[AF_MAX+1] = {
 229	_sock_locks("sk_lock-")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 230};
 231static const char *const af_family_slock_key_strings[AF_MAX+1] = {
 232	_sock_locks("slock-")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 233};
 234static const char *const af_family_clock_key_strings[AF_MAX+1] = {
 235	_sock_locks("clock-")
 236};
 237
 238static const char *const af_family_kern_key_strings[AF_MAX+1] = {
 239	_sock_locks("k-sk_lock-")
 240};
 241static const char *const af_family_kern_slock_key_strings[AF_MAX+1] = {
 242	_sock_locks("k-slock-")
 243};
 244static const char *const af_family_kern_clock_key_strings[AF_MAX+1] = {
 245	_sock_locks("k-clock-")
 246};
 247static const char *const af_family_rlock_key_strings[AF_MAX+1] = {
 248	_sock_locks("rlock-")
 249};
 250static const char *const af_family_wlock_key_strings[AF_MAX+1] = {
 251	_sock_locks("wlock-")
 252};
 253static const char *const af_family_elock_key_strings[AF_MAX+1] = {
 254	_sock_locks("elock-")
 255};
 256
 257/*
 258 * sk_callback_lock and sk queues locking rules are per-address-family,
 259 * so split the lock classes by using a per-AF key:
 260 */
 261static struct lock_class_key af_callback_keys[AF_MAX];
 262static struct lock_class_key af_rlock_keys[AF_MAX];
 263static struct lock_class_key af_wlock_keys[AF_MAX];
 264static struct lock_class_key af_elock_keys[AF_MAX];
 265static struct lock_class_key af_kern_callback_keys[AF_MAX];
 
 
 
 
 
 
 266
 267/* Run time adjustable parameters. */
 268__u32 sysctl_wmem_max __read_mostly = SK_WMEM_MAX;
 269EXPORT_SYMBOL(sysctl_wmem_max);
 270__u32 sysctl_rmem_max __read_mostly = SK_RMEM_MAX;
 271EXPORT_SYMBOL(sysctl_rmem_max);
 272__u32 sysctl_wmem_default __read_mostly = SK_WMEM_MAX;
 273__u32 sysctl_rmem_default __read_mostly = SK_RMEM_MAX;
 274
 275/* Maximal space eaten by iovec or ancillary data plus some space */
 276int sysctl_optmem_max __read_mostly = sizeof(unsigned long)*(2*UIO_MAXIOV+512);
 277EXPORT_SYMBOL(sysctl_optmem_max);
 278
 279int sysctl_tstamp_allow_data __read_mostly = 1;
 280
 281DEFINE_STATIC_KEY_FALSE(memalloc_socks_key);
 282EXPORT_SYMBOL_GPL(memalloc_socks_key);
 283
 284/**
 285 * sk_set_memalloc - sets %SOCK_MEMALLOC
 286 * @sk: socket to set it on
 287 *
 288 * Set %SOCK_MEMALLOC on a socket for access to emergency reserves.
 289 * It's the responsibility of the admin to adjust min_free_kbytes
 290 * to meet the requirements
 291 */
 292void sk_set_memalloc(struct sock *sk)
 293{
 294	sock_set_flag(sk, SOCK_MEMALLOC);
 295	sk->sk_allocation |= __GFP_MEMALLOC;
 296	static_branch_inc(&memalloc_socks_key);
 297}
 298EXPORT_SYMBOL_GPL(sk_set_memalloc);
 299
 300void sk_clear_memalloc(struct sock *sk)
 301{
 302	sock_reset_flag(sk, SOCK_MEMALLOC);
 303	sk->sk_allocation &= ~__GFP_MEMALLOC;
 304	static_branch_dec(&memalloc_socks_key);
 305
 306	/*
 307	 * SOCK_MEMALLOC is allowed to ignore rmem limits to ensure forward
 308	 * progress of swapping. SOCK_MEMALLOC may be cleared while
 309	 * it has rmem allocations due to the last swapfile being deactivated
 310	 * but there is a risk that the socket is unusable due to exceeding
 311	 * the rmem limits. Reclaim the reserves and obey rmem limits again.
 312	 */
 313	sk_mem_reclaim(sk);
 314}
 315EXPORT_SYMBOL_GPL(sk_clear_memalloc);
 316
 317int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
 318{
 319	int ret;
 320	unsigned int noreclaim_flag;
 321
 322	/* these should have been dropped before queueing */
 323	BUG_ON(!sock_flag(sk, SOCK_MEMALLOC));
 324
 325	noreclaim_flag = memalloc_noreclaim_save();
 326	ret = sk->sk_backlog_rcv(sk, skb);
 327	memalloc_noreclaim_restore(noreclaim_flag);
 328
 329	return ret;
 330}
 331EXPORT_SYMBOL(__sk_backlog_rcv);
 332
 333static int sock_get_timeout(long timeo, void *optval, bool old_timeval)
 334{
 335	struct __kernel_sock_timeval tv;
 336	int size;
 337
 338	if (timeo == MAX_SCHEDULE_TIMEOUT) {
 339		tv.tv_sec = 0;
 340		tv.tv_usec = 0;
 341	} else {
 342		tv.tv_sec = timeo / HZ;
 343		tv.tv_usec = ((timeo % HZ) * USEC_PER_SEC) / HZ;
 344	}
 345
 346	if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) {
 347		struct old_timeval32 tv32 = { tv.tv_sec, tv.tv_usec };
 348		*(struct old_timeval32 *)optval = tv32;
 349		return sizeof(tv32);
 350	}
 351
 352	if (old_timeval) {
 353		struct __kernel_old_timeval old_tv;
 354		old_tv.tv_sec = tv.tv_sec;
 355		old_tv.tv_usec = tv.tv_usec;
 356		*(struct __kernel_old_timeval *)optval = old_tv;
 357		size = sizeof(old_tv);
 358	} else {
 359		*(struct __kernel_sock_timeval *)optval = tv;
 360		size = sizeof(tv);
 361	}
 362
 363	return size;
 364}
 365
 366static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen, bool old_timeval)
 367{
 368	struct __kernel_sock_timeval tv;
 369
 370	if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) {
 371		struct old_timeval32 tv32;
 372
 373		if (optlen < sizeof(tv32))
 374			return -EINVAL;
 375
 376		if (copy_from_user(&tv32, optval, sizeof(tv32)))
 377			return -EFAULT;
 378		tv.tv_sec = tv32.tv_sec;
 379		tv.tv_usec = tv32.tv_usec;
 380	} else if (old_timeval) {
 381		struct __kernel_old_timeval old_tv;
 382
 383		if (optlen < sizeof(old_tv))
 384			return -EINVAL;
 385		if (copy_from_user(&old_tv, optval, sizeof(old_tv)))
 386			return -EFAULT;
 387		tv.tv_sec = old_tv.tv_sec;
 388		tv.tv_usec = old_tv.tv_usec;
 389	} else {
 390		if (optlen < sizeof(tv))
 391			return -EINVAL;
 392		if (copy_from_user(&tv, optval, sizeof(tv)))
 393			return -EFAULT;
 394	}
 395	if (tv.tv_usec < 0 || tv.tv_usec >= USEC_PER_SEC)
 396		return -EDOM;
 397
 398	if (tv.tv_sec < 0) {
 399		static int warned __read_mostly;
 400
 401		*timeo_p = 0;
 402		if (warned < 10 && net_ratelimit()) {
 403			warned++;
 404			pr_info("%s: `%s' (pid %d) tries to set negative timeout\n",
 405				__func__, current->comm, task_pid_nr(current));
 406		}
 407		return 0;
 408	}
 409	*timeo_p = MAX_SCHEDULE_TIMEOUT;
 410	if (tv.tv_sec == 0 && tv.tv_usec == 0)
 411		return 0;
 412	if (tv.tv_sec < (MAX_SCHEDULE_TIMEOUT / HZ - 1))
 413		*timeo_p = tv.tv_sec * HZ + DIV_ROUND_UP((unsigned long)tv.tv_usec, USEC_PER_SEC / HZ);
 414	return 0;
 415}
 416
 417static void sock_warn_obsolete_bsdism(const char *name)
 418{
 419	static int warned;
 420	static char warncomm[TASK_COMM_LEN];
 421	if (strcmp(warncomm, current->comm) && warned < 5) {
 422		strcpy(warncomm,  current->comm);
 423		pr_warn("process `%s' is using obsolete %s SO_BSDCOMPAT\n",
 424			warncomm, name);
 425		warned++;
 426	}
 427}
 428
 429static bool sock_needs_netstamp(const struct sock *sk)
 430{
 431	switch (sk->sk_family) {
 432	case AF_UNSPEC:
 433	case AF_UNIX:
 434		return false;
 435	default:
 436		return true;
 437	}
 438}
 439
 440static void sock_disable_timestamp(struct sock *sk, unsigned long flags)
 441{
 442	if (sk->sk_flags & flags) {
 443		sk->sk_flags &= ~flags;
 444		if (sock_needs_netstamp(sk) &&
 445		    !(sk->sk_flags & SK_FLAGS_TIMESTAMP))
 446			net_disable_timestamp();
 447	}
 448}
 449
 450
 451int __sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 452{
 453	unsigned long flags;
 454	struct sk_buff_head *list = &sk->sk_receive_queue;
 455
 456	if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) {
 457		atomic_inc(&sk->sk_drops);
 458		trace_sock_rcvqueue_full(sk, skb);
 459		return -ENOMEM;
 460	}
 461
 462	if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
 463		atomic_inc(&sk->sk_drops);
 464		return -ENOBUFS;
 465	}
 466
 467	skb->dev = NULL;
 468	skb_set_owner_r(skb, sk);
 469
 470	/* we escape from rcu protected region, make sure we dont leak
 471	 * a norefcounted dst
 472	 */
 473	skb_dst_force(skb);
 474
 475	spin_lock_irqsave(&list->lock, flags);
 476	sock_skb_set_dropcount(sk, skb);
 477	__skb_queue_tail(list, skb);
 478	spin_unlock_irqrestore(&list->lock, flags);
 479
 480	if (!sock_flag(sk, SOCK_DEAD))
 481		sk->sk_data_ready(sk);
 482	return 0;
 483}
 484EXPORT_SYMBOL(__sock_queue_rcv_skb);
 485
 486int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 487{
 488	int err;
 489
 490	err = sk_filter(sk, skb);
 491	if (err)
 492		return err;
 493
 494	return __sock_queue_rcv_skb(sk, skb);
 495}
 496EXPORT_SYMBOL(sock_queue_rcv_skb);
 497
 498int __sk_receive_skb(struct sock *sk, struct sk_buff *skb,
 499		     const int nested, unsigned int trim_cap, bool refcounted)
 500{
 501	int rc = NET_RX_SUCCESS;
 502
 503	if (sk_filter_trim_cap(sk, skb, trim_cap))
 504		goto discard_and_relse;
 505
 506	skb->dev = NULL;
 507
 508	if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
 509		atomic_inc(&sk->sk_drops);
 510		goto discard_and_relse;
 511	}
 512	if (nested)
 513		bh_lock_sock_nested(sk);
 514	else
 515		bh_lock_sock(sk);
 516	if (!sock_owned_by_user(sk)) {
 517		/*
 518		 * trylock + unlock semantics:
 519		 */
 520		mutex_acquire(&sk->sk_lock.dep_map, 0, 1, _RET_IP_);
 521
 522		rc = sk_backlog_rcv(sk, skb);
 523
 524		mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
 525	} else if (sk_add_backlog(sk, skb, READ_ONCE(sk->sk_rcvbuf))) {
 526		bh_unlock_sock(sk);
 527		atomic_inc(&sk->sk_drops);
 528		goto discard_and_relse;
 529	}
 530
 531	bh_unlock_sock(sk);
 532out:
 533	if (refcounted)
 534		sock_put(sk);
 535	return rc;
 536discard_and_relse:
 537	kfree_skb(skb);
 538	goto out;
 539}
 540EXPORT_SYMBOL(__sk_receive_skb);
 541
 542struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
 543{
 544	struct dst_entry *dst = __sk_dst_get(sk);
 545
 546	if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
 547		sk_tx_queue_clear(sk);
 548		sk->sk_dst_pending_confirm = 0;
 549		RCU_INIT_POINTER(sk->sk_dst_cache, NULL);
 550		dst_release(dst);
 551		return NULL;
 552	}
 553
 554	return dst;
 555}
 556EXPORT_SYMBOL(__sk_dst_check);
 557
 558struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie)
 559{
 560	struct dst_entry *dst = sk_dst_get(sk);
 561
 562	if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
 563		sk_dst_reset(sk);
 564		dst_release(dst);
 565		return NULL;
 566	}
 567
 568	return dst;
 569}
 570EXPORT_SYMBOL(sk_dst_check);
 571
 572static int sock_setbindtodevice_locked(struct sock *sk, int ifindex)
 
 573{
 574	int ret = -ENOPROTOOPT;
 575#ifdef CONFIG_NETDEVICES
 576	struct net *net = sock_net(sk);
 
 
 577
 578	/* Sorry... */
 579	ret = -EPERM;
 580	if (!ns_capable(net->user_ns, CAP_NET_RAW))
 581		goto out;
 582
 583	ret = -EINVAL;
 584	if (ifindex < 0)
 585		goto out;
 586
 587	sk->sk_bound_dev_if = ifindex;
 588	if (sk->sk_prot->rehash)
 589		sk->sk_prot->rehash(sk);
 590	sk_dst_reset(sk);
 591
 592	ret = 0;
 593
 594out:
 595#endif
 596
 597	return ret;
 598}
 599
 600static int sock_setbindtodevice(struct sock *sk, char __user *optval,
 601				int optlen)
 602{
 603	int ret = -ENOPROTOOPT;
 604#ifdef CONFIG_NETDEVICES
 605	struct net *net = sock_net(sk);
 606	char devname[IFNAMSIZ];
 607	int index;
 608
 609	ret = -EINVAL;
 610	if (optlen < 0)
 611		goto out;
 612
 613	/* Bind this socket to a particular device like "eth0",
 614	 * as specified in the passed interface name. If the
 615	 * name is "" or the option length is zero the socket
 616	 * is not bound.
 617	 */
 618	if (optlen > IFNAMSIZ - 1)
 619		optlen = IFNAMSIZ - 1;
 620	memset(devname, 0, sizeof(devname));
 621
 622	ret = -EFAULT;
 623	if (copy_from_user(devname, optval, optlen))
 624		goto out;
 625
 626	index = 0;
 627	if (devname[0] != '\0') {
 628		struct net_device *dev;
 629
 630		rcu_read_lock();
 631		dev = dev_get_by_name_rcu(net, devname);
 632		if (dev)
 633			index = dev->ifindex;
 634		rcu_read_unlock();
 635		ret = -ENODEV;
 636		if (!dev)
 637			goto out;
 638	}
 639
 640	lock_sock(sk);
 641	ret = sock_setbindtodevice_locked(sk, index);
 
 642	release_sock(sk);
 643
 
 
 644out:
 645#endif
 646
 647	return ret;
 648}
 649
 650static int sock_getbindtodevice(struct sock *sk, char __user *optval,
 651				int __user *optlen, int len)
 652{
 653	int ret = -ENOPROTOOPT;
 654#ifdef CONFIG_NETDEVICES
 655	struct net *net = sock_net(sk);
 656	char devname[IFNAMSIZ];
 657
 658	if (sk->sk_bound_dev_if == 0) {
 659		len = 0;
 660		goto zero;
 661	}
 662
 663	ret = -EINVAL;
 664	if (len < IFNAMSIZ)
 665		goto out;
 666
 667	ret = netdev_get_name(net, devname, sk->sk_bound_dev_if);
 668	if (ret)
 669		goto out;
 670
 671	len = strlen(devname) + 1;
 672
 673	ret = -EFAULT;
 674	if (copy_to_user(optval, devname, len))
 675		goto out;
 676
 677zero:
 678	ret = -EFAULT;
 679	if (put_user(len, optlen))
 680		goto out;
 681
 682	ret = 0;
 683
 684out:
 685#endif
 686
 687	return ret;
 688}
 689
 690static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool)
 691{
 692	if (valbool)
 693		sock_set_flag(sk, bit);
 694	else
 695		sock_reset_flag(sk, bit);
 696}
 697
 698bool sk_mc_loop(struct sock *sk)
 699{
 700	if (dev_recursion_level())
 701		return false;
 702	if (!sk)
 703		return true;
 704	switch (sk->sk_family) {
 705	case AF_INET:
 706		return inet_sk(sk)->mc_loop;
 707#if IS_ENABLED(CONFIG_IPV6)
 708	case AF_INET6:
 709		return inet6_sk(sk)->mc_loop;
 710#endif
 711	}
 712	WARN_ON(1);
 713	return true;
 714}
 715EXPORT_SYMBOL(sk_mc_loop);
 716
 717/*
 718 *	This is meant for all protocols to use and covers goings on
 719 *	at the socket level. Everything here is generic.
 720 */
 721
 722int sock_setsockopt(struct socket *sock, int level, int optname,
 723		    char __user *optval, unsigned int optlen)
 724{
 725	struct sock_txtime sk_txtime;
 726	struct sock *sk = sock->sk;
 727	int val;
 728	int valbool;
 729	struct linger ling;
 730	int ret = 0;
 731
 732	/*
 733	 *	Options without arguments
 734	 */
 735
 736	if (optname == SO_BINDTODEVICE)
 737		return sock_setbindtodevice(sk, optval, optlen);
 738
 739	if (optlen < sizeof(int))
 740		return -EINVAL;
 741
 742	if (get_user(val, (int __user *)optval))
 743		return -EFAULT;
 744
 745	valbool = val ? 1 : 0;
 746
 747	lock_sock(sk);
 748
 749	switch (optname) {
 750	case SO_DEBUG:
 751		if (val && !capable(CAP_NET_ADMIN))
 752			ret = -EACCES;
 753		else
 754			sock_valbool_flag(sk, SOCK_DBG, valbool);
 755		break;
 756	case SO_REUSEADDR:
 757		sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
 758		break;
 759	case SO_REUSEPORT:
 760		sk->sk_reuseport = valbool;
 761		break;
 762	case SO_TYPE:
 763	case SO_PROTOCOL:
 764	case SO_DOMAIN:
 765	case SO_ERROR:
 766		ret = -ENOPROTOOPT;
 767		break;
 768	case SO_DONTROUTE:
 769		sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
 770		sk_dst_reset(sk);
 771		break;
 772	case SO_BROADCAST:
 773		sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
 774		break;
 775	case SO_SNDBUF:
 776		/* Don't error on this BSD doesn't and if you think
 777		 * about it this is right. Otherwise apps have to
 778		 * play 'guess the biggest size' games. RCVBUF/SNDBUF
 779		 * are treated in BSD as hints
 780		 */
 781		val = min_t(u32, val, sysctl_wmem_max);
 782set_sndbuf:
 783		/* Ensure val * 2 fits into an int, to prevent max_t()
 784		 * from treating it as a negative value.
 785		 */
 786		val = min_t(int, val, INT_MAX / 2);
 787		sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
 788		WRITE_ONCE(sk->sk_sndbuf,
 789			   max_t(int, val * 2, SOCK_MIN_SNDBUF));
 790		/* Wake up sending tasks if we upped the value. */
 791		sk->sk_write_space(sk);
 792		break;
 793
 794	case SO_SNDBUFFORCE:
 795		if (!capable(CAP_NET_ADMIN)) {
 796			ret = -EPERM;
 797			break;
 798		}
 799
 800		/* No negative values (to prevent underflow, as val will be
 801		 * multiplied by 2).
 802		 */
 803		if (val < 0)
 804			val = 0;
 805		goto set_sndbuf;
 806
 807	case SO_RCVBUF:
 808		/* Don't error on this BSD doesn't and if you think
 809		 * about it this is right. Otherwise apps have to
 810		 * play 'guess the biggest size' games. RCVBUF/SNDBUF
 811		 * are treated in BSD as hints
 812		 */
 813		val = min_t(u32, val, sysctl_rmem_max);
 814set_rcvbuf:
 815		/* Ensure val * 2 fits into an int, to prevent max_t()
 816		 * from treating it as a negative value.
 817		 */
 818		val = min_t(int, val, INT_MAX / 2);
 819		sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
 820		/*
 821		 * We double it on the way in to account for
 822		 * "struct sk_buff" etc. overhead.   Applications
 823		 * assume that the SO_RCVBUF setting they make will
 824		 * allow that much actual data to be received on that
 825		 * socket.
 826		 *
 827		 * Applications are unaware that "struct sk_buff" and
 828		 * other overheads allocate from the receive buffer
 829		 * during socket buffer allocation.
 830		 *
 831		 * And after considering the possible alternatives,
 832		 * returning the value we actually used in getsockopt
 833		 * is the most desirable behavior.
 834		 */
 835		WRITE_ONCE(sk->sk_rcvbuf,
 836			   max_t(int, val * 2, SOCK_MIN_RCVBUF));
 837		break;
 838
 839	case SO_RCVBUFFORCE:
 840		if (!capable(CAP_NET_ADMIN)) {
 841			ret = -EPERM;
 842			break;
 843		}
 844
 845		/* No negative values (to prevent underflow, as val will be
 846		 * multiplied by 2).
 847		 */
 848		if (val < 0)
 849			val = 0;
 850		goto set_rcvbuf;
 851
 852	case SO_KEEPALIVE:
 853		if (sk->sk_prot->keepalive)
 854			sk->sk_prot->keepalive(sk, valbool);
 
 
 
 855		sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
 856		break;
 857
 858	case SO_OOBINLINE:
 859		sock_valbool_flag(sk, SOCK_URGINLINE, valbool);
 860		break;
 861
 862	case SO_NO_CHECK:
 863		sk->sk_no_check_tx = valbool;
 864		break;
 865
 866	case SO_PRIORITY:
 867		if ((val >= 0 && val <= 6) ||
 868		    ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
 869			sk->sk_priority = val;
 870		else
 871			ret = -EPERM;
 872		break;
 873
 874	case SO_LINGER:
 875		if (optlen < sizeof(ling)) {
 876			ret = -EINVAL;	/* 1003.1g */
 877			break;
 878		}
 879		if (copy_from_user(&ling, optval, sizeof(ling))) {
 880			ret = -EFAULT;
 881			break;
 882		}
 883		if (!ling.l_onoff)
 884			sock_reset_flag(sk, SOCK_LINGER);
 885		else {
 886#if (BITS_PER_LONG == 32)
 887			if ((unsigned int)ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
 888				sk->sk_lingertime = MAX_SCHEDULE_TIMEOUT;
 889			else
 890#endif
 891				sk->sk_lingertime = (unsigned int)ling.l_linger * HZ;
 892			sock_set_flag(sk, SOCK_LINGER);
 893		}
 894		break;
 895
 896	case SO_BSDCOMPAT:
 897		sock_warn_obsolete_bsdism("setsockopt");
 898		break;
 899
 900	case SO_PASSCRED:
 901		if (valbool)
 902			set_bit(SOCK_PASSCRED, &sock->flags);
 903		else
 904			clear_bit(SOCK_PASSCRED, &sock->flags);
 905		break;
 906
 907	case SO_TIMESTAMP_OLD:
 908	case SO_TIMESTAMP_NEW:
 909	case SO_TIMESTAMPNS_OLD:
 910	case SO_TIMESTAMPNS_NEW:
 911		if (valbool)  {
 912			if (optname == SO_TIMESTAMP_NEW || optname == SO_TIMESTAMPNS_NEW)
 913				sock_set_flag(sk, SOCK_TSTAMP_NEW);
 914			else
 915				sock_reset_flag(sk, SOCK_TSTAMP_NEW);
 916
 917			if (optname == SO_TIMESTAMP_OLD || optname == SO_TIMESTAMP_NEW)
 918				sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
 919			else
 920				sock_set_flag(sk, SOCK_RCVTSTAMPNS);
 921			sock_set_flag(sk, SOCK_RCVTSTAMP);
 922			sock_enable_timestamp(sk, SOCK_TIMESTAMP);
 923		} else {
 924			sock_reset_flag(sk, SOCK_RCVTSTAMP);
 925			sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
 926			sock_reset_flag(sk, SOCK_TSTAMP_NEW);
 927		}
 928		break;
 929
 930	case SO_TIMESTAMPING_NEW:
 931		sock_set_flag(sk, SOCK_TSTAMP_NEW);
 932		/* fall through */
 933	case SO_TIMESTAMPING_OLD:
 934		if (val & ~SOF_TIMESTAMPING_MASK) {
 935			ret = -EINVAL;
 936			break;
 937		}
 938
 939		if (val & SOF_TIMESTAMPING_OPT_ID &&
 940		    !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) {
 941			if (sk->sk_protocol == IPPROTO_TCP &&
 942			    sk->sk_type == SOCK_STREAM) {
 943				if ((1 << sk->sk_state) &
 944				    (TCPF_CLOSE | TCPF_LISTEN)) {
 945					ret = -EINVAL;
 946					break;
 947				}
 948				sk->sk_tskey = tcp_sk(sk)->snd_una;
 949			} else {
 950				sk->sk_tskey = 0;
 951			}
 952		}
 953
 954		if (val & SOF_TIMESTAMPING_OPT_STATS &&
 955		    !(val & SOF_TIMESTAMPING_OPT_TSONLY)) {
 956			ret = -EINVAL;
 957			break;
 958		}
 959
 960		sk->sk_tsflags = val;
 961		if (val & SOF_TIMESTAMPING_RX_SOFTWARE)
 962			sock_enable_timestamp(sk,
 963					      SOCK_TIMESTAMPING_RX_SOFTWARE);
 964		else {
 965			if (optname == SO_TIMESTAMPING_NEW)
 966				sock_reset_flag(sk, SOCK_TSTAMP_NEW);
 967
 968			sock_disable_timestamp(sk,
 969					       (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE));
 970		}
 971		break;
 972
 973	case SO_RCVLOWAT:
 974		if (val < 0)
 975			val = INT_MAX;
 976		if (sock->ops->set_rcvlowat)
 977			ret = sock->ops->set_rcvlowat(sk, val);
 978		else
 979			WRITE_ONCE(sk->sk_rcvlowat, val ? : 1);
 980		break;
 981
 982	case SO_RCVTIMEO_OLD:
 983	case SO_RCVTIMEO_NEW:
 984		ret = sock_set_timeout(&sk->sk_rcvtimeo, optval, optlen, optname == SO_RCVTIMEO_OLD);
 985		break;
 986
 987	case SO_SNDTIMEO_OLD:
 988	case SO_SNDTIMEO_NEW:
 989		ret = sock_set_timeout(&sk->sk_sndtimeo, optval, optlen, optname == SO_SNDTIMEO_OLD);
 990		break;
 991
 992	case SO_ATTACH_FILTER:
 993		ret = -EINVAL;
 994		if (optlen == sizeof(struct sock_fprog)) {
 995			struct sock_fprog fprog;
 996
 997			ret = -EFAULT;
 998			if (copy_from_user(&fprog, optval, sizeof(fprog)))
 999				break;
1000
1001			ret = sk_attach_filter(&fprog, sk);
1002		}
1003		break;
1004
1005	case SO_ATTACH_BPF:
1006		ret = -EINVAL;
1007		if (optlen == sizeof(u32)) {
1008			u32 ufd;
1009
1010			ret = -EFAULT;
1011			if (copy_from_user(&ufd, optval, sizeof(ufd)))
1012				break;
1013
1014			ret = sk_attach_bpf(ufd, sk);
1015		}
1016		break;
1017
1018	case SO_ATTACH_REUSEPORT_CBPF:
1019		ret = -EINVAL;
1020		if (optlen == sizeof(struct sock_fprog)) {
1021			struct sock_fprog fprog;
1022
1023			ret = -EFAULT;
1024			if (copy_from_user(&fprog, optval, sizeof(fprog)))
1025				break;
1026
1027			ret = sk_reuseport_attach_filter(&fprog, sk);
1028		}
1029		break;
1030
1031	case SO_ATTACH_REUSEPORT_EBPF:
1032		ret = -EINVAL;
1033		if (optlen == sizeof(u32)) {
1034			u32 ufd;
1035
1036			ret = -EFAULT;
1037			if (copy_from_user(&ufd, optval, sizeof(ufd)))
1038				break;
1039
1040			ret = sk_reuseport_attach_bpf(ufd, sk);
1041		}
1042		break;
1043
1044	case SO_DETACH_REUSEPORT_BPF:
1045		ret = reuseport_detach_prog(sk);
1046		break;
1047
1048	case SO_DETACH_FILTER:
1049		ret = sk_detach_filter(sk);
1050		break;
1051
1052	case SO_LOCK_FILTER:
1053		if (sock_flag(sk, SOCK_FILTER_LOCKED) && !valbool)
1054			ret = -EPERM;
1055		else
1056			sock_valbool_flag(sk, SOCK_FILTER_LOCKED, valbool);
1057		break;
1058
1059	case SO_PASSSEC:
1060		if (valbool)
1061			set_bit(SOCK_PASSSEC, &sock->flags);
1062		else
1063			clear_bit(SOCK_PASSSEC, &sock->flags);
1064		break;
1065	case SO_MARK:
1066		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
1067			ret = -EPERM;
1068		} else if (val != sk->sk_mark) {
1069			sk->sk_mark = val;
1070			sk_dst_reset(sk);
1071		}
1072		break;
1073
1074	case SO_RXQ_OVFL:
1075		sock_valbool_flag(sk, SOCK_RXQ_OVFL, valbool);
1076		break;
1077
1078	case SO_WIFI_STATUS:
1079		sock_valbool_flag(sk, SOCK_WIFI_STATUS, valbool);
1080		break;
1081
1082	case SO_PEEK_OFF:
1083		if (sock->ops->set_peek_off)
1084			ret = sock->ops->set_peek_off(sk, val);
1085		else
1086			ret = -EOPNOTSUPP;
1087		break;
1088
1089	case SO_NOFCS:
1090		sock_valbool_flag(sk, SOCK_NOFCS, valbool);
1091		break;
1092
1093	case SO_SELECT_ERR_QUEUE:
1094		sock_valbool_flag(sk, SOCK_SELECT_ERR_QUEUE, valbool);
1095		break;
1096
1097#ifdef CONFIG_NET_RX_BUSY_POLL
1098	case SO_BUSY_POLL:
1099		/* allow unprivileged users to decrease the value */
1100		if ((val > sk->sk_ll_usec) && !capable(CAP_NET_ADMIN))
1101			ret = -EPERM;
1102		else {
1103			if (val < 0)
1104				ret = -EINVAL;
1105			else
1106				sk->sk_ll_usec = val;
1107		}
1108		break;
1109#endif
1110
1111	case SO_MAX_PACING_RATE:
1112		{
1113		unsigned long ulval = (val == ~0U) ? ~0UL : val;
1114
1115		if (sizeof(ulval) != sizeof(val) &&
1116		    optlen >= sizeof(ulval) &&
1117		    get_user(ulval, (unsigned long __user *)optval)) {
1118			ret = -EFAULT;
1119			break;
1120		}
1121		if (ulval != ~0UL)
1122			cmpxchg(&sk->sk_pacing_status,
1123				SK_PACING_NONE,
1124				SK_PACING_NEEDED);
1125		sk->sk_max_pacing_rate = ulval;
1126		sk->sk_pacing_rate = min(sk->sk_pacing_rate, ulval);
1127		break;
1128		}
1129	case SO_INCOMING_CPU:
1130		WRITE_ONCE(sk->sk_incoming_cpu, val);
1131		break;
1132
1133	case SO_CNX_ADVICE:
1134		if (val == 1)
1135			dst_negative_advice(sk);
1136		break;
1137
1138	case SO_ZEROCOPY:
1139		if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6) {
1140			if (!((sk->sk_type == SOCK_STREAM &&
1141			       sk->sk_protocol == IPPROTO_TCP) ||
1142			      (sk->sk_type == SOCK_DGRAM &&
1143			       sk->sk_protocol == IPPROTO_UDP)))
1144				ret = -ENOTSUPP;
1145		} else if (sk->sk_family != PF_RDS) {
1146			ret = -ENOTSUPP;
1147		}
1148		if (!ret) {
1149			if (val < 0 || val > 1)
1150				ret = -EINVAL;
1151			else
1152				sock_valbool_flag(sk, SOCK_ZEROCOPY, valbool);
1153		}
1154		break;
1155
1156	case SO_TXTIME:
1157		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
1158			ret = -EPERM;
1159		} else if (optlen != sizeof(struct sock_txtime)) {
1160			ret = -EINVAL;
1161		} else if (copy_from_user(&sk_txtime, optval,
1162			   sizeof(struct sock_txtime))) {
1163			ret = -EFAULT;
1164		} else if (sk_txtime.flags & ~SOF_TXTIME_FLAGS_MASK) {
1165			ret = -EINVAL;
1166		} else {
1167			sock_valbool_flag(sk, SOCK_TXTIME, true);
1168			sk->sk_clockid = sk_txtime.clockid;
1169			sk->sk_txtime_deadline_mode =
1170				!!(sk_txtime.flags & SOF_TXTIME_DEADLINE_MODE);
1171			sk->sk_txtime_report_errors =
1172				!!(sk_txtime.flags & SOF_TXTIME_REPORT_ERRORS);
1173		}
1174		break;
1175
1176	case SO_BINDTOIFINDEX:
1177		ret = sock_setbindtodevice_locked(sk, val);
1178		break;
1179
1180	default:
1181		ret = -ENOPROTOOPT;
1182		break;
1183	}
1184	release_sock(sk);
1185	return ret;
1186}
1187EXPORT_SYMBOL(sock_setsockopt);
1188
1189
1190static void cred_to_ucred(struct pid *pid, const struct cred *cred,
1191			  struct ucred *ucred)
1192{
1193	ucred->pid = pid_vnr(pid);
1194	ucred->uid = ucred->gid = -1;
1195	if (cred) {
1196		struct user_namespace *current_ns = current_user_ns();
1197
1198		ucred->uid = from_kuid_munged(current_ns, cred->euid);
1199		ucred->gid = from_kgid_munged(current_ns, cred->egid);
1200	}
1201}
1202
1203static int groups_to_user(gid_t __user *dst, const struct group_info *src)
1204{
1205	struct user_namespace *user_ns = current_user_ns();
1206	int i;
1207
1208	for (i = 0; i < src->ngroups; i++)
1209		if (put_user(from_kgid_munged(user_ns, src->gid[i]), dst + i))
1210			return -EFAULT;
1211
1212	return 0;
1213}
1214
1215int sock_getsockopt(struct socket *sock, int level, int optname,
1216		    char __user *optval, int __user *optlen)
1217{
1218	struct sock *sk = sock->sk;
1219
1220	union {
1221		int val;
1222		u64 val64;
1223		unsigned long ulval;
1224		struct linger ling;
1225		struct old_timeval32 tm32;
1226		struct __kernel_old_timeval tm;
1227		struct  __kernel_sock_timeval stm;
1228		struct sock_txtime txtime;
1229	} v;
1230
1231	int lv = sizeof(int);
1232	int len;
1233
1234	if (get_user(len, optlen))
1235		return -EFAULT;
1236	if (len < 0)
1237		return -EINVAL;
1238
1239	memset(&v, 0, sizeof(v));
1240
1241	switch (optname) {
1242	case SO_DEBUG:
1243		v.val = sock_flag(sk, SOCK_DBG);
1244		break;
1245
1246	case SO_DONTROUTE:
1247		v.val = sock_flag(sk, SOCK_LOCALROUTE);
1248		break;
1249
1250	case SO_BROADCAST:
1251		v.val = sock_flag(sk, SOCK_BROADCAST);
1252		break;
1253
1254	case SO_SNDBUF:
1255		v.val = sk->sk_sndbuf;
1256		break;
1257
1258	case SO_RCVBUF:
1259		v.val = sk->sk_rcvbuf;
1260		break;
1261
1262	case SO_REUSEADDR:
1263		v.val = sk->sk_reuse;
1264		break;
1265
1266	case SO_REUSEPORT:
1267		v.val = sk->sk_reuseport;
1268		break;
1269
1270	case SO_KEEPALIVE:
1271		v.val = sock_flag(sk, SOCK_KEEPOPEN);
1272		break;
1273
1274	case SO_TYPE:
1275		v.val = sk->sk_type;
1276		break;
1277
1278	case SO_PROTOCOL:
1279		v.val = sk->sk_protocol;
1280		break;
1281
1282	case SO_DOMAIN:
1283		v.val = sk->sk_family;
1284		break;
1285
1286	case SO_ERROR:
1287		v.val = -sock_error(sk);
1288		if (v.val == 0)
1289			v.val = xchg(&sk->sk_err_soft, 0);
1290		break;
1291
1292	case SO_OOBINLINE:
1293		v.val = sock_flag(sk, SOCK_URGINLINE);
1294		break;
1295
1296	case SO_NO_CHECK:
1297		v.val = sk->sk_no_check_tx;
1298		break;
1299
1300	case SO_PRIORITY:
1301		v.val = sk->sk_priority;
1302		break;
1303
1304	case SO_LINGER:
1305		lv		= sizeof(v.ling);
1306		v.ling.l_onoff	= sock_flag(sk, SOCK_LINGER);
1307		v.ling.l_linger	= sk->sk_lingertime / HZ;
1308		break;
1309
1310	case SO_BSDCOMPAT:
1311		sock_warn_obsolete_bsdism("getsockopt");
1312		break;
1313
1314	case SO_TIMESTAMP_OLD:
1315		v.val = sock_flag(sk, SOCK_RCVTSTAMP) &&
1316				!sock_flag(sk, SOCK_TSTAMP_NEW) &&
1317				!sock_flag(sk, SOCK_RCVTSTAMPNS);
1318		break;
1319
1320	case SO_TIMESTAMPNS_OLD:
1321		v.val = sock_flag(sk, SOCK_RCVTSTAMPNS) && !sock_flag(sk, SOCK_TSTAMP_NEW);
1322		break;
1323
1324	case SO_TIMESTAMP_NEW:
1325		v.val = sock_flag(sk, SOCK_RCVTSTAMP) && sock_flag(sk, SOCK_TSTAMP_NEW);
1326		break;
1327
1328	case SO_TIMESTAMPNS_NEW:
1329		v.val = sock_flag(sk, SOCK_RCVTSTAMPNS) && sock_flag(sk, SOCK_TSTAMP_NEW);
1330		break;
1331
1332	case SO_TIMESTAMPING_OLD:
1333		v.val = sk->sk_tsflags;
1334		break;
1335
1336	case SO_RCVTIMEO_OLD:
1337	case SO_RCVTIMEO_NEW:
1338		lv = sock_get_timeout(sk->sk_rcvtimeo, &v, SO_RCVTIMEO_OLD == optname);
 
 
 
 
 
 
1339		break;
1340
1341	case SO_SNDTIMEO_OLD:
1342	case SO_SNDTIMEO_NEW:
1343		lv = sock_get_timeout(sk->sk_sndtimeo, &v, SO_SNDTIMEO_OLD == optname);
 
 
 
 
 
 
1344		break;
1345
1346	case SO_RCVLOWAT:
1347		v.val = sk->sk_rcvlowat;
1348		break;
1349
1350	case SO_SNDLOWAT:
1351		v.val = 1;
1352		break;
1353
1354	case SO_PASSCRED:
1355		v.val = !!test_bit(SOCK_PASSCRED, &sock->flags);
1356		break;
1357
1358	case SO_PEERCRED:
1359	{
1360		struct ucred peercred;
1361		if (len > sizeof(peercred))
1362			len = sizeof(peercred);
1363		cred_to_ucred(sk->sk_peer_pid, sk->sk_peer_cred, &peercred);
1364		if (copy_to_user(optval, &peercred, len))
1365			return -EFAULT;
1366		goto lenout;
1367	}
1368
1369	case SO_PEERGROUPS:
1370	{
1371		int ret, n;
1372
1373		if (!sk->sk_peer_cred)
1374			return -ENODATA;
1375
1376		n = sk->sk_peer_cred->group_info->ngroups;
1377		if (len < n * sizeof(gid_t)) {
1378			len = n * sizeof(gid_t);
1379			return put_user(len, optlen) ? -EFAULT : -ERANGE;
1380		}
1381		len = n * sizeof(gid_t);
1382
1383		ret = groups_to_user((gid_t __user *)optval,
1384				     sk->sk_peer_cred->group_info);
1385		if (ret)
1386			return ret;
1387		goto lenout;
1388	}
1389
1390	case SO_PEERNAME:
1391	{
1392		char address[128];
1393
1394		lv = sock->ops->getname(sock, (struct sockaddr *)address, 2);
1395		if (lv < 0)
1396			return -ENOTCONN;
1397		if (lv < len)
1398			return -EINVAL;
1399		if (copy_to_user(optval, address, len))
1400			return -EFAULT;
1401		goto lenout;
1402	}
1403
1404	/* Dubious BSD thing... Probably nobody even uses it, but
1405	 * the UNIX standard wants it for whatever reason... -DaveM
1406	 */
1407	case SO_ACCEPTCONN:
1408		v.val = sk->sk_state == TCP_LISTEN;
1409		break;
1410
1411	case SO_PASSSEC:
1412		v.val = !!test_bit(SOCK_PASSSEC, &sock->flags);
1413		break;
1414
1415	case SO_PEERSEC:
1416		return security_socket_getpeersec_stream(sock, optval, optlen, len);
1417
1418	case SO_MARK:
1419		v.val = sk->sk_mark;
1420		break;
1421
1422	case SO_RXQ_OVFL:
1423		v.val = sock_flag(sk, SOCK_RXQ_OVFL);
1424		break;
1425
1426	case SO_WIFI_STATUS:
1427		v.val = sock_flag(sk, SOCK_WIFI_STATUS);
1428		break;
1429
1430	case SO_PEEK_OFF:
1431		if (!sock->ops->set_peek_off)
1432			return -EOPNOTSUPP;
1433
1434		v.val = sk->sk_peek_off;
1435		break;
1436	case SO_NOFCS:
1437		v.val = sock_flag(sk, SOCK_NOFCS);
1438		break;
1439
1440	case SO_BINDTODEVICE:
1441		return sock_getbindtodevice(sk, optval, optlen, len);
1442
1443	case SO_GET_FILTER:
1444		len = sk_get_filter(sk, (struct sock_filter __user *)optval, len);
1445		if (len < 0)
1446			return len;
1447
1448		goto lenout;
1449
1450	case SO_LOCK_FILTER:
1451		v.val = sock_flag(sk, SOCK_FILTER_LOCKED);
1452		break;
1453
1454	case SO_BPF_EXTENSIONS:
1455		v.val = bpf_tell_extensions();
1456		break;
1457
1458	case SO_SELECT_ERR_QUEUE:
1459		v.val = sock_flag(sk, SOCK_SELECT_ERR_QUEUE);
1460		break;
1461
1462#ifdef CONFIG_NET_RX_BUSY_POLL
1463	case SO_BUSY_POLL:
1464		v.val = sk->sk_ll_usec;
1465		break;
1466#endif
1467
1468	case SO_MAX_PACING_RATE:
1469		if (sizeof(v.ulval) != sizeof(v.val) && len >= sizeof(v.ulval)) {
1470			lv = sizeof(v.ulval);
1471			v.ulval = sk->sk_max_pacing_rate;
1472		} else {
1473			/* 32bit version */
1474			v.val = min_t(unsigned long, sk->sk_max_pacing_rate, ~0U);
1475		}
1476		break;
1477
1478	case SO_INCOMING_CPU:
1479		v.val = READ_ONCE(sk->sk_incoming_cpu);
1480		break;
1481
1482	case SO_MEMINFO:
1483	{
1484		u32 meminfo[SK_MEMINFO_VARS];
1485
1486		sk_get_meminfo(sk, meminfo);
1487
1488		len = min_t(unsigned int, len, sizeof(meminfo));
1489		if (copy_to_user(optval, &meminfo, len))
1490			return -EFAULT;
1491
1492		goto lenout;
1493	}
1494
1495#ifdef CONFIG_NET_RX_BUSY_POLL
1496	case SO_INCOMING_NAPI_ID:
1497		v.val = READ_ONCE(sk->sk_napi_id);
1498
1499		/* aggregate non-NAPI IDs down to 0 */
1500		if (v.val < MIN_NAPI_ID)
1501			v.val = 0;
1502
1503		break;
1504#endif
1505
1506	case SO_COOKIE:
1507		lv = sizeof(u64);
1508		if (len < lv)
1509			return -EINVAL;
1510		v.val64 = sock_gen_cookie(sk);
1511		break;
1512
1513	case SO_ZEROCOPY:
1514		v.val = sock_flag(sk, SOCK_ZEROCOPY);
1515		break;
1516
1517	case SO_TXTIME:
1518		lv = sizeof(v.txtime);
1519		v.txtime.clockid = sk->sk_clockid;
1520		v.txtime.flags |= sk->sk_txtime_deadline_mode ?
1521				  SOF_TXTIME_DEADLINE_MODE : 0;
1522		v.txtime.flags |= sk->sk_txtime_report_errors ?
1523				  SOF_TXTIME_REPORT_ERRORS : 0;
1524		break;
1525
1526	case SO_BINDTOIFINDEX:
1527		v.val = sk->sk_bound_dev_if;
1528		break;
1529
1530	default:
1531		/* We implement the SO_SNDLOWAT etc to not be settable
1532		 * (1003.1g 7).
1533		 */
1534		return -ENOPROTOOPT;
1535	}
1536
1537	if (len > lv)
1538		len = lv;
1539	if (copy_to_user(optval, &v, len))
1540		return -EFAULT;
1541lenout:
1542	if (put_user(len, optlen))
1543		return -EFAULT;
1544	return 0;
1545}
1546
1547/*
1548 * Initialize an sk_lock.
1549 *
1550 * (We also register the sk_lock with the lock validator.)
1551 */
1552static inline void sock_lock_init(struct sock *sk)
1553{
1554	if (sk->sk_kern_sock)
1555		sock_lock_init_class_and_name(
1556			sk,
1557			af_family_kern_slock_key_strings[sk->sk_family],
1558			af_family_kern_slock_keys + sk->sk_family,
1559			af_family_kern_key_strings[sk->sk_family],
1560			af_family_kern_keys + sk->sk_family);
1561	else
1562		sock_lock_init_class_and_name(
1563			sk,
1564			af_family_slock_key_strings[sk->sk_family],
1565			af_family_slock_keys + sk->sk_family,
1566			af_family_key_strings[sk->sk_family],
1567			af_family_keys + sk->sk_family);
1568}
1569
1570/*
1571 * Copy all fields from osk to nsk but nsk->sk_refcnt must not change yet,
1572 * even temporarly, because of RCU lookups. sk_node should also be left as is.
1573 * We must not copy fields between sk_dontcopy_begin and sk_dontcopy_end
1574 */
1575static void sock_copy(struct sock *nsk, const struct sock *osk)
1576{
1577#ifdef CONFIG_SECURITY_NETWORK
1578	void *sptr = nsk->sk_security;
1579#endif
1580	memcpy(nsk, osk, offsetof(struct sock, sk_dontcopy_begin));
1581
1582	memcpy(&nsk->sk_dontcopy_end, &osk->sk_dontcopy_end,
1583	       osk->sk_prot->obj_size - offsetof(struct sock, sk_dontcopy_end));
1584
1585#ifdef CONFIG_SECURITY_NETWORK
1586	nsk->sk_security = sptr;
1587	security_sk_clone(osk, nsk);
1588#endif
1589}
1590
1591static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority,
1592		int family)
1593{
1594	struct sock *sk;
1595	struct kmem_cache *slab;
1596
1597	slab = prot->slab;
1598	if (slab != NULL) {
1599		sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
1600		if (!sk)
1601			return sk;
1602		if (want_init_on_alloc(priority))
1603			sk_prot_clear_nulls(sk, prot->obj_size);
1604	} else
1605		sk = kmalloc(prot->obj_size, priority);
1606
1607	if (sk != NULL) {
 
 
1608		if (security_sk_alloc(sk, family, priority))
1609			goto out_free;
1610
1611		if (!try_module_get(prot->owner))
1612			goto out_free_sec;
1613		sk_tx_queue_clear(sk);
1614	}
1615
1616	return sk;
1617
1618out_free_sec:
1619	security_sk_free(sk);
1620out_free:
1621	if (slab != NULL)
1622		kmem_cache_free(slab, sk);
1623	else
1624		kfree(sk);
1625	return NULL;
1626}
1627
1628static void sk_prot_free(struct proto *prot, struct sock *sk)
1629{
1630	struct kmem_cache *slab;
1631	struct module *owner;
1632
1633	owner = prot->owner;
1634	slab = prot->slab;
1635
1636	cgroup_sk_free(&sk->sk_cgrp_data);
1637	mem_cgroup_sk_free(sk);
1638	security_sk_free(sk);
1639	if (slab != NULL)
1640		kmem_cache_free(slab, sk);
1641	else
1642		kfree(sk);
1643	module_put(owner);
1644}
1645
1646/**
1647 *	sk_alloc - All socket objects are allocated here
1648 *	@net: the applicable net namespace
1649 *	@family: protocol family
1650 *	@priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
1651 *	@prot: struct proto associated with this new sock instance
1652 *	@kern: is this to be a kernel socket?
1653 */
1654struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
1655		      struct proto *prot, int kern)
1656{
1657	struct sock *sk;
1658
1659	sk = sk_prot_alloc(prot, priority | __GFP_ZERO, family);
1660	if (sk) {
1661		sk->sk_family = family;
1662		/*
1663		 * See comment in struct sock definition to understand
1664		 * why we need sk_prot_creator -acme
1665		 */
1666		sk->sk_prot = sk->sk_prot_creator = prot;
1667		sk->sk_kern_sock = kern;
1668		sock_lock_init(sk);
1669		sk->sk_net_refcnt = kern ? 0 : 1;
1670		if (likely(sk->sk_net_refcnt)) {
1671			get_net(net);
1672			sock_inuse_add(net, 1);
1673		}
1674
1675		sock_net_set(sk, net);
1676		refcount_set(&sk->sk_wmem_alloc, 1);
1677
1678		mem_cgroup_sk_alloc(sk);
1679		cgroup_sk_alloc(&sk->sk_cgrp_data);
1680		sock_update_classid(&sk->sk_cgrp_data);
1681		sock_update_netprioidx(&sk->sk_cgrp_data);
1682	}
1683
1684	return sk;
1685}
1686EXPORT_SYMBOL(sk_alloc);
1687
1688/* Sockets having SOCK_RCU_FREE will call this function after one RCU
1689 * grace period. This is the case for UDP sockets and TCP listeners.
1690 */
1691static void __sk_destruct(struct rcu_head *head)
1692{
1693	struct sock *sk = container_of(head, struct sock, sk_rcu);
1694	struct sk_filter *filter;
1695
1696	if (sk->sk_destruct)
1697		sk->sk_destruct(sk);
1698
1699	filter = rcu_dereference_check(sk->sk_filter,
1700				       refcount_read(&sk->sk_wmem_alloc) == 0);
1701	if (filter) {
1702		sk_filter_uncharge(sk, filter);
1703		RCU_INIT_POINTER(sk->sk_filter, NULL);
1704	}
 
 
1705
1706	sock_disable_timestamp(sk, SK_FLAGS_TIMESTAMP);
1707
1708#ifdef CONFIG_BPF_SYSCALL
1709	bpf_sk_storage_free(sk);
1710#endif
1711
1712	if (atomic_read(&sk->sk_omem_alloc))
1713		pr_debug("%s: optmem leakage (%d bytes) detected\n",
1714			 __func__, atomic_read(&sk->sk_omem_alloc));
1715
1716	if (sk->sk_frag.page) {
1717		put_page(sk->sk_frag.page);
1718		sk->sk_frag.page = NULL;
1719	}
1720
1721	if (sk->sk_peer_cred)
1722		put_cred(sk->sk_peer_cred);
1723	put_pid(sk->sk_peer_pid);
1724	if (likely(sk->sk_net_refcnt))
1725		put_net(sock_net(sk));
1726	sk_prot_free(sk->sk_prot_creator, sk);
1727}
1728
1729void sk_destruct(struct sock *sk)
1730{
1731	bool use_call_rcu = sock_flag(sk, SOCK_RCU_FREE);
1732
1733	if (rcu_access_pointer(sk->sk_reuseport_cb)) {
1734		reuseport_detach_sock(sk);
1735		use_call_rcu = true;
1736	}
1737
1738	if (use_call_rcu)
1739		call_rcu(&sk->sk_rcu, __sk_destruct);
1740	else
1741		__sk_destruct(&sk->sk_rcu);
1742}
1743
1744static void __sk_free(struct sock *sk)
1745{
1746	if (likely(sk->sk_net_refcnt))
1747		sock_inuse_add(sock_net(sk), -1);
1748
1749	if (unlikely(sk->sk_net_refcnt && sock_diag_has_destroy_listeners(sk)))
1750		sock_diag_broadcast_destroy(sk);
1751	else
1752		sk_destruct(sk);
1753}
1754
1755void sk_free(struct sock *sk)
1756{
1757	/*
1758	 * We subtract one from sk_wmem_alloc and can know if
1759	 * some packets are still in some tx queue.
1760	 * If not null, sock_wfree() will call __sk_free(sk) later
1761	 */
1762	if (refcount_dec_and_test(&sk->sk_wmem_alloc))
1763		__sk_free(sk);
1764}
1765EXPORT_SYMBOL(sk_free);
1766
1767static void sk_init_common(struct sock *sk)
1768{
1769	skb_queue_head_init(&sk->sk_receive_queue);
1770	skb_queue_head_init(&sk->sk_write_queue);
1771	skb_queue_head_init(&sk->sk_error_queue);
1772
1773	rwlock_init(&sk->sk_callback_lock);
1774	lockdep_set_class_and_name(&sk->sk_receive_queue.lock,
1775			af_rlock_keys + sk->sk_family,
1776			af_family_rlock_key_strings[sk->sk_family]);
1777	lockdep_set_class_and_name(&sk->sk_write_queue.lock,
1778			af_wlock_keys + sk->sk_family,
1779			af_family_wlock_key_strings[sk->sk_family]);
1780	lockdep_set_class_and_name(&sk->sk_error_queue.lock,
1781			af_elock_keys + sk->sk_family,
1782			af_family_elock_key_strings[sk->sk_family]);
1783	lockdep_set_class_and_name(&sk->sk_callback_lock,
1784			af_callback_keys + sk->sk_family,
1785			af_family_clock_key_strings[sk->sk_family]);
1786}
1787
1788/**
1789 *	sk_clone_lock - clone a socket, and lock its clone
1790 *	@sk: the socket to clone
1791 *	@priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
1792 *
1793 *	Caller must unlock socket even in error path (bh_unlock_sock(newsk))
1794 */
1795struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
1796{
1797	struct sock *newsk;
1798	bool is_charged = true;
1799
1800	newsk = sk_prot_alloc(sk->sk_prot, priority, sk->sk_family);
1801	if (newsk != NULL) {
1802		struct sk_filter *filter;
1803
1804		sock_copy(newsk, sk);
1805
1806		newsk->sk_prot_creator = sk->sk_prot;
1807
1808		/* SANITY */
1809		if (likely(newsk->sk_net_refcnt))
1810			get_net(sock_net(newsk));
1811		sk_node_init(&newsk->sk_node);
1812		sock_lock_init(newsk);
1813		bh_lock_sock(newsk);
1814		newsk->sk_backlog.head	= newsk->sk_backlog.tail = NULL;
1815		newsk->sk_backlog.len = 0;
1816
1817		atomic_set(&newsk->sk_rmem_alloc, 0);
1818		/*
1819		 * sk_wmem_alloc set to one (see sk_free() and sock_wfree())
1820		 */
1821		refcount_set(&newsk->sk_wmem_alloc, 1);
1822		atomic_set(&newsk->sk_omem_alloc, 0);
1823		sk_init_common(newsk);
 
 
 
 
 
 
1824
1825		newsk->sk_dst_cache	= NULL;
1826		newsk->sk_dst_pending_confirm = 0;
1827		newsk->sk_wmem_queued	= 0;
1828		newsk->sk_forward_alloc = 0;
1829		atomic_set(&newsk->sk_drops, 0);
1830		newsk->sk_send_head	= NULL;
1831		newsk->sk_userlocks	= sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
1832		atomic_set(&newsk->sk_zckey, 0);
1833
1834		sock_reset_flag(newsk, SOCK_DONE);
1835		mem_cgroup_sk_alloc(newsk);
1836		cgroup_sk_alloc(&newsk->sk_cgrp_data);
1837
1838		rcu_read_lock();
1839		filter = rcu_dereference(sk->sk_filter);
1840		if (filter != NULL)
1841			/* though it's an empty new sock, the charging may fail
1842			 * if sysctl_optmem_max was changed between creation of
1843			 * original socket and cloning
1844			 */
1845			is_charged = sk_filter_charge(newsk, filter);
1846		RCU_INIT_POINTER(newsk->sk_filter, filter);
1847		rcu_read_unlock();
1848
1849		if (unlikely(!is_charged || xfrm_sk_clone_policy(newsk, sk))) {
1850			/* We need to make sure that we don't uncharge the new
1851			 * socket if we couldn't charge it in the first place
1852			 * as otherwise we uncharge the parent's filter.
1853			 */
1854			if (!is_charged)
1855				RCU_INIT_POINTER(newsk->sk_filter, NULL);
1856			sk_free_unlock_clone(newsk);
 
 
 
 
1857			newsk = NULL;
1858			goto out;
1859		}
1860		RCU_INIT_POINTER(newsk->sk_reuseport_cb, NULL);
1861
1862		if (bpf_sk_storage_clone(sk, newsk)) {
1863			sk_free_unlock_clone(newsk);
1864			newsk = NULL;
1865			goto out;
1866		}
1867
1868		newsk->sk_err	   = 0;
1869		newsk->sk_err_soft = 0;
1870		newsk->sk_priority = 0;
1871		newsk->sk_incoming_cpu = raw_smp_processor_id();
1872		if (likely(newsk->sk_net_refcnt))
1873			sock_inuse_add(sock_net(newsk), 1);
 
 
1874
1875		/*
1876		 * Before updating sk_refcnt, we must commit prior changes to memory
1877		 * (Documentation/RCU/rculist_nulls.txt for details)
1878		 */
1879		smp_wmb();
1880		refcount_set(&newsk->sk_refcnt, 2);
1881
1882		/*
1883		 * Increment the counter in the same struct proto as the master
1884		 * sock (sk_refcnt_debug_inc uses newsk->sk_prot->socks, that
1885		 * is the same as sk->sk_prot->socks, as this field was copied
1886		 * with memcpy).
1887		 *
1888		 * This _changes_ the previous behaviour, where
1889		 * tcp_create_openreq_child always was incrementing the
1890		 * equivalent to tcp_prot->socks (inet_sock_nr), so this have
1891		 * to be taken into account in all callers. -acme
1892		 */
1893		sk_refcnt_debug_inc(newsk);
1894		sk_set_socket(newsk, NULL);
1895		RCU_INIT_POINTER(newsk->sk_wq, NULL);
1896
1897		if (newsk->sk_prot->sockets_allocated)
1898			sk_sockets_allocated_inc(newsk);
1899
1900		if (sock_needs_netstamp(sk) &&
1901		    newsk->sk_flags & SK_FLAGS_TIMESTAMP)
1902			net_enable_timestamp();
1903	}
1904out:
1905	return newsk;
1906}
1907EXPORT_SYMBOL_GPL(sk_clone_lock);
1908
1909void sk_free_unlock_clone(struct sock *sk)
1910{
1911	/* It is still raw copy of parent, so invalidate
1912	 * destructor and make plain sk_free() */
1913	sk->sk_destruct = NULL;
1914	bh_unlock_sock(sk);
1915	sk_free(sk);
1916}
1917EXPORT_SYMBOL_GPL(sk_free_unlock_clone);
1918
1919void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
1920{
1921	u32 max_segs = 1;
1922
1923	sk_dst_set(sk, dst);
1924	sk->sk_route_caps = dst->dev->features | sk->sk_route_forced_caps;
1925	if (sk->sk_route_caps & NETIF_F_GSO)
1926		sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE;
1927	sk->sk_route_caps &= ~sk->sk_route_nocaps;
1928	if (sk_can_gso(sk)) {
1929		if (dst->header_len && !xfrm_dst_offload_ok(dst)) {
1930			sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
1931		} else {
1932			sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
1933			sk->sk_gso_max_size = dst->dev->gso_max_size;
1934			max_segs = max_t(u32, dst->dev->gso_max_segs, 1);
1935		}
1936	}
1937	sk->sk_gso_max_segs = max_segs;
1938}
1939EXPORT_SYMBOL_GPL(sk_setup_caps);
1940
1941/*
1942 *	Simple resource managers for sockets.
1943 */
1944
1945
1946/*
1947 * Write buffer destructor automatically called from kfree_skb.
1948 */
1949void sock_wfree(struct sk_buff *skb)
1950{
1951	struct sock *sk = skb->sk;
1952	unsigned int len = skb->truesize;
1953
1954	if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) {
1955		/*
1956		 * Keep a reference on sk_wmem_alloc, this will be released
1957		 * after sk_write_space() call
1958		 */
1959		WARN_ON(refcount_sub_and_test(len - 1, &sk->sk_wmem_alloc));
1960		sk->sk_write_space(sk);
1961		len = 1;
1962	}
1963	/*
1964	 * if sk_wmem_alloc reaches 0, we must finish what sk_free()
1965	 * could not do because of in-flight packets
1966	 */
1967	if (refcount_sub_and_test(len, &sk->sk_wmem_alloc))
1968		__sk_free(sk);
1969}
1970EXPORT_SYMBOL(sock_wfree);
1971
1972/* This variant of sock_wfree() is used by TCP,
1973 * since it sets SOCK_USE_WRITE_QUEUE.
1974 */
1975void __sock_wfree(struct sk_buff *skb)
1976{
1977	struct sock *sk = skb->sk;
1978
1979	if (refcount_sub_and_test(skb->truesize, &sk->sk_wmem_alloc))
1980		__sk_free(sk);
1981}
1982
1983void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
1984{
1985	skb_orphan(skb);
1986	skb->sk = sk;
1987#ifdef CONFIG_INET
1988	if (unlikely(!sk_fullsock(sk))) {
1989		skb->destructor = sock_edemux;
1990		sock_hold(sk);
1991		return;
1992	}
1993#endif
1994	skb->destructor = sock_wfree;
1995	skb_set_hash_from_sk(skb, sk);
1996	/*
1997	 * We used to take a refcount on sk, but following operation
1998	 * is enough to guarantee sk_free() wont free this sock until
1999	 * all in-flight packets are completed
2000	 */
2001	refcount_add(skb->truesize, &sk->sk_wmem_alloc);
2002}
2003EXPORT_SYMBOL(skb_set_owner_w);
2004
2005static bool can_skb_orphan_partial(const struct sk_buff *skb)
2006{
2007#ifdef CONFIG_TLS_DEVICE
2008	/* Drivers depend on in-order delivery for crypto offload,
2009	 * partial orphan breaks out-of-order-OK logic.
2010	 */
2011	if (skb->decrypted)
2012		return false;
2013#endif
2014	return (skb->destructor == sock_wfree ||
2015		(IS_ENABLED(CONFIG_INET) && skb->destructor == tcp_wfree));
2016}
2017
2018/* This helper is used by netem, as it can hold packets in its
2019 * delay queue. We want to allow the owner socket to send more
2020 * packets, as if they were already TX completed by a typical driver.
2021 * But we also want to keep skb->sk set because some packet schedulers
2022 * rely on it (sch_fq for example).
 
2023 */
2024void skb_orphan_partial(struct sk_buff *skb)
2025{
2026	if (skb_is_tcp_pure_ack(skb))
 
 
 
2027		return;
2028
2029	if (can_skb_orphan_partial(skb)) {
2030		struct sock *sk = skb->sk;
2031
2032		if (refcount_inc_not_zero(&sk->sk_refcnt)) {
2033			WARN_ON(refcount_sub_and_test(skb->truesize, &sk->sk_wmem_alloc));
2034			skb->destructor = sock_efree;
2035		}
 
 
 
 
2036	} else {
2037		skb_orphan(skb);
2038	}
2039}
2040EXPORT_SYMBOL(skb_orphan_partial);
2041
2042/*
2043 * Read buffer destructor automatically called from kfree_skb.
2044 */
2045void sock_rfree(struct sk_buff *skb)
2046{
2047	struct sock *sk = skb->sk;
2048	unsigned int len = skb->truesize;
2049
2050	atomic_sub(len, &sk->sk_rmem_alloc);
2051	sk_mem_uncharge(sk, len);
2052}
2053EXPORT_SYMBOL(sock_rfree);
2054
2055/*
2056 * Buffer destructor for skbs that are not used directly in read or write
2057 * path, e.g. for error handler skbs. Automatically called from kfree_skb.
2058 */
2059void sock_efree(struct sk_buff *skb)
2060{
2061	sock_put(skb->sk);
2062}
2063EXPORT_SYMBOL(sock_efree);
2064
2065kuid_t sock_i_uid(struct sock *sk)
2066{
2067	kuid_t uid;
2068
2069	read_lock_bh(&sk->sk_callback_lock);
2070	uid = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_uid : GLOBAL_ROOT_UID;
2071	read_unlock_bh(&sk->sk_callback_lock);
2072	return uid;
2073}
2074EXPORT_SYMBOL(sock_i_uid);
2075
2076unsigned long sock_i_ino(struct sock *sk)
2077{
2078	unsigned long ino;
2079
2080	read_lock_bh(&sk->sk_callback_lock);
2081	ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0;
2082	read_unlock_bh(&sk->sk_callback_lock);
2083	return ino;
2084}
2085EXPORT_SYMBOL(sock_i_ino);
2086
2087/*
2088 * Allocate a skb from the socket's send buffer.
2089 */
2090struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force,
2091			     gfp_t priority)
2092{
2093	if (force ||
2094	    refcount_read(&sk->sk_wmem_alloc) < READ_ONCE(sk->sk_sndbuf)) {
2095		struct sk_buff *skb = alloc_skb(size, priority);
2096
2097		if (skb) {
2098			skb_set_owner_w(skb, sk);
2099			return skb;
2100		}
2101	}
2102	return NULL;
2103}
2104EXPORT_SYMBOL(sock_wmalloc);
2105
2106static void sock_ofree(struct sk_buff *skb)
2107{
2108	struct sock *sk = skb->sk;
2109
2110	atomic_sub(skb->truesize, &sk->sk_omem_alloc);
2111}
2112
2113struct sk_buff *sock_omalloc(struct sock *sk, unsigned long size,
2114			     gfp_t priority)
2115{
2116	struct sk_buff *skb;
2117
2118	/* small safe race: SKB_TRUESIZE may differ from final skb->truesize */
2119	if (atomic_read(&sk->sk_omem_alloc) + SKB_TRUESIZE(size) >
2120	    sysctl_optmem_max)
2121		return NULL;
2122
2123	skb = alloc_skb(size, priority);
2124	if (!skb)
2125		return NULL;
2126
2127	atomic_add(skb->truesize, &sk->sk_omem_alloc);
2128	skb->sk = sk;
2129	skb->destructor = sock_ofree;
2130	return skb;
2131}
2132
2133/*
2134 * Allocate a memory block from the socket's option memory buffer.
2135 */
2136void *sock_kmalloc(struct sock *sk, int size, gfp_t priority)
2137{
2138	if ((unsigned int)size <= sysctl_optmem_max &&
2139	    atomic_read(&sk->sk_omem_alloc) + size < sysctl_optmem_max) {
2140		void *mem;
2141		/* First do the add, to avoid the race if kmalloc
2142		 * might sleep.
2143		 */
2144		atomic_add(size, &sk->sk_omem_alloc);
2145		mem = kmalloc(size, priority);
2146		if (mem)
2147			return mem;
2148		atomic_sub(size, &sk->sk_omem_alloc);
2149	}
2150	return NULL;
2151}
2152EXPORT_SYMBOL(sock_kmalloc);
2153
2154/* Free an option memory block. Note, we actually want the inline
2155 * here as this allows gcc to detect the nullify and fold away the
2156 * condition entirely.
2157 */
2158static inline void __sock_kfree_s(struct sock *sk, void *mem, int size,
2159				  const bool nullify)
2160{
2161	if (WARN_ON_ONCE(!mem))
2162		return;
2163	if (nullify)
2164		kzfree(mem);
2165	else
2166		kfree(mem);
2167	atomic_sub(size, &sk->sk_omem_alloc);
2168}
2169
2170void sock_kfree_s(struct sock *sk, void *mem, int size)
2171{
2172	__sock_kfree_s(sk, mem, size, false);
2173}
2174EXPORT_SYMBOL(sock_kfree_s);
2175
2176void sock_kzfree_s(struct sock *sk, void *mem, int size)
2177{
2178	__sock_kfree_s(sk, mem, size, true);
2179}
2180EXPORT_SYMBOL(sock_kzfree_s);
2181
2182/* It is almost wait_for_tcp_memory minus release_sock/lock_sock.
2183   I think, these locks should be removed for datagram sockets.
2184 */
2185static long sock_wait_for_wmem(struct sock *sk, long timeo)
2186{
2187	DEFINE_WAIT(wait);
2188
2189	sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2190	for (;;) {
2191		if (!timeo)
2192			break;
2193		if (signal_pending(current))
2194			break;
2195		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2196		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
2197		if (refcount_read(&sk->sk_wmem_alloc) < READ_ONCE(sk->sk_sndbuf))
2198			break;
2199		if (sk->sk_shutdown & SEND_SHUTDOWN)
2200			break;
2201		if (sk->sk_err)
2202			break;
2203		timeo = schedule_timeout(timeo);
2204	}
2205	finish_wait(sk_sleep(sk), &wait);
2206	return timeo;
2207}
2208
2209
2210/*
2211 *	Generic send/receive buffer handlers
2212 */
2213
2214struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
2215				     unsigned long data_len, int noblock,
2216				     int *errcode, int max_page_order)
2217{
2218	struct sk_buff *skb;
2219	long timeo;
2220	int err;
2221
2222	timeo = sock_sndtimeo(sk, noblock);
2223	for (;;) {
2224		err = sock_error(sk);
2225		if (err != 0)
2226			goto failure;
2227
2228		err = -EPIPE;
2229		if (sk->sk_shutdown & SEND_SHUTDOWN)
2230			goto failure;
2231
2232		if (sk_wmem_alloc_get(sk) < READ_ONCE(sk->sk_sndbuf))
2233			break;
2234
2235		sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2236		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2237		err = -EAGAIN;
2238		if (!timeo)
2239			goto failure;
2240		if (signal_pending(current))
2241			goto interrupted;
2242		timeo = sock_wait_for_wmem(sk, timeo);
2243	}
2244	skb = alloc_skb_with_frags(header_len, data_len, max_page_order,
2245				   errcode, sk->sk_allocation);
2246	if (skb)
2247		skb_set_owner_w(skb, sk);
2248	return skb;
2249
2250interrupted:
2251	err = sock_intr_errno(timeo);
2252failure:
2253	*errcode = err;
2254	return NULL;
2255}
2256EXPORT_SYMBOL(sock_alloc_send_pskb);
2257
2258struct sk_buff *sock_alloc_send_skb(struct sock *sk, unsigned long size,
2259				    int noblock, int *errcode)
2260{
2261	return sock_alloc_send_pskb(sk, size, 0, noblock, errcode, 0);
2262}
2263EXPORT_SYMBOL(sock_alloc_send_skb);
2264
2265int __sock_cmsg_send(struct sock *sk, struct msghdr *msg, struct cmsghdr *cmsg,
2266		     struct sockcm_cookie *sockc)
2267{
2268	u32 tsflags;
2269
2270	switch (cmsg->cmsg_type) {
2271	case SO_MARK:
2272		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
2273			return -EPERM;
2274		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32)))
2275			return -EINVAL;
2276		sockc->mark = *(u32 *)CMSG_DATA(cmsg);
2277		break;
2278	case SO_TIMESTAMPING_OLD:
2279		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32)))
2280			return -EINVAL;
2281
2282		tsflags = *(u32 *)CMSG_DATA(cmsg);
2283		if (tsflags & ~SOF_TIMESTAMPING_TX_RECORD_MASK)
2284			return -EINVAL;
2285
2286		sockc->tsflags &= ~SOF_TIMESTAMPING_TX_RECORD_MASK;
2287		sockc->tsflags |= tsflags;
2288		break;
2289	case SCM_TXTIME:
2290		if (!sock_flag(sk, SOCK_TXTIME))
2291			return -EINVAL;
2292		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u64)))
2293			return -EINVAL;
2294		sockc->transmit_time = get_unaligned((u64 *)CMSG_DATA(cmsg));
2295		break;
2296	/* SCM_RIGHTS and SCM_CREDENTIALS are semantically in SOL_UNIX. */
2297	case SCM_RIGHTS:
2298	case SCM_CREDENTIALS:
2299		break;
2300	default:
2301		return -EINVAL;
2302	}
2303	return 0;
2304}
2305EXPORT_SYMBOL(__sock_cmsg_send);
2306
2307int sock_cmsg_send(struct sock *sk, struct msghdr *msg,
2308		   struct sockcm_cookie *sockc)
2309{
2310	struct cmsghdr *cmsg;
2311	int ret;
2312
2313	for_each_cmsghdr(cmsg, msg) {
2314		if (!CMSG_OK(msg, cmsg))
2315			return -EINVAL;
2316		if (cmsg->cmsg_level != SOL_SOCKET)
2317			continue;
2318		ret = __sock_cmsg_send(sk, msg, cmsg, sockc);
2319		if (ret)
2320			return ret;
2321	}
2322	return 0;
2323}
2324EXPORT_SYMBOL(sock_cmsg_send);
2325
2326static void sk_enter_memory_pressure(struct sock *sk)
2327{
2328	if (!sk->sk_prot->enter_memory_pressure)
2329		return;
2330
2331	sk->sk_prot->enter_memory_pressure(sk);
2332}
2333
2334static void sk_leave_memory_pressure(struct sock *sk)
2335{
2336	if (sk->sk_prot->leave_memory_pressure) {
2337		sk->sk_prot->leave_memory_pressure(sk);
2338	} else {
2339		unsigned long *memory_pressure = sk->sk_prot->memory_pressure;
2340
2341		if (memory_pressure && READ_ONCE(*memory_pressure))
2342			WRITE_ONCE(*memory_pressure, 0);
2343	}
2344}
2345
2346/* On 32bit arches, an skb frag is limited to 2^15 */
2347#define SKB_FRAG_PAGE_ORDER	get_order(32768)
2348DEFINE_STATIC_KEY_FALSE(net_high_order_alloc_disable_key);
2349
2350/**
2351 * skb_page_frag_refill - check that a page_frag contains enough room
2352 * @sz: minimum size of the fragment we want to get
2353 * @pfrag: pointer to page_frag
2354 * @gfp: priority for memory allocation
2355 *
2356 * Note: While this allocator tries to use high order pages, there is
2357 * no guarantee that allocations succeed. Therefore, @sz MUST be
2358 * less or equal than PAGE_SIZE.
2359 */
2360bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)
2361{
2362	if (pfrag->page) {
2363		if (page_ref_count(pfrag->page) == 1) {
2364			pfrag->offset = 0;
2365			return true;
2366		}
2367		if (pfrag->offset + sz <= pfrag->size)
2368			return true;
2369		put_page(pfrag->page);
2370	}
2371
2372	pfrag->offset = 0;
2373	if (SKB_FRAG_PAGE_ORDER &&
2374	    !static_branch_unlikely(&net_high_order_alloc_disable_key)) {
2375		/* Avoid direct reclaim but allow kswapd to wake */
2376		pfrag->page = alloc_pages((gfp & ~__GFP_DIRECT_RECLAIM) |
2377					  __GFP_COMP | __GFP_NOWARN |
2378					  __GFP_NORETRY,
2379					  SKB_FRAG_PAGE_ORDER);
2380		if (likely(pfrag->page)) {
2381			pfrag->size = PAGE_SIZE << SKB_FRAG_PAGE_ORDER;
2382			return true;
2383		}
2384	}
2385	pfrag->page = alloc_page(gfp);
2386	if (likely(pfrag->page)) {
2387		pfrag->size = PAGE_SIZE;
2388		return true;
2389	}
2390	return false;
2391}
2392EXPORT_SYMBOL(skb_page_frag_refill);
2393
2394bool sk_page_frag_refill(struct sock *sk, struct page_frag *pfrag)
2395{
2396	if (likely(skb_page_frag_refill(32U, pfrag, sk->sk_allocation)))
2397		return true;
2398
2399	sk_enter_memory_pressure(sk);
2400	sk_stream_moderate_sndbuf(sk);
2401	return false;
2402}
2403EXPORT_SYMBOL(sk_page_frag_refill);
2404
2405static void __lock_sock(struct sock *sk)
2406	__releases(&sk->sk_lock.slock)
2407	__acquires(&sk->sk_lock.slock)
2408{
2409	DEFINE_WAIT(wait);
2410
2411	for (;;) {
2412		prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait,
2413					TASK_UNINTERRUPTIBLE);
2414		spin_unlock_bh(&sk->sk_lock.slock);
2415		schedule();
2416		spin_lock_bh(&sk->sk_lock.slock);
2417		if (!sock_owned_by_user(sk))
2418			break;
2419	}
2420	finish_wait(&sk->sk_lock.wq, &wait);
2421}
2422
2423void __release_sock(struct sock *sk)
2424	__releases(&sk->sk_lock.slock)
2425	__acquires(&sk->sk_lock.slock)
2426{
2427	struct sk_buff *skb, *next;
2428
2429	while ((skb = sk->sk_backlog.head) != NULL) {
2430		sk->sk_backlog.head = sk->sk_backlog.tail = NULL;
2431
2432		spin_unlock_bh(&sk->sk_lock.slock);
2433
2434		do {
2435			next = skb->next;
2436			prefetch(next);
2437			WARN_ON_ONCE(skb_dst_is_noref(skb));
2438			skb_mark_not_on_list(skb);
2439			sk_backlog_rcv(sk, skb);
2440
2441			cond_resched();
2442
2443			skb = next;
2444		} while (skb != NULL);
2445
2446		spin_lock_bh(&sk->sk_lock.slock);
2447	}
2448
2449	/*
2450	 * Doing the zeroing here guarantee we can not loop forever
2451	 * while a wild producer attempts to flood us.
2452	 */
2453	sk->sk_backlog.len = 0;
2454}
2455
2456void __sk_flush_backlog(struct sock *sk)
2457{
2458	spin_lock_bh(&sk->sk_lock.slock);
2459	__release_sock(sk);
2460	spin_unlock_bh(&sk->sk_lock.slock);
2461}
2462
2463/**
2464 * sk_wait_data - wait for data to arrive at sk_receive_queue
2465 * @sk:    sock to wait on
2466 * @timeo: for how long
2467 * @skb:   last skb seen on sk_receive_queue
2468 *
2469 * Now socket state including sk->sk_err is changed only under lock,
2470 * hence we may omit checks after joining wait queue.
2471 * We check receive queue before schedule() only as optimization;
2472 * it is very likely that release_sock() added new data.
2473 */
2474int sk_wait_data(struct sock *sk, long *timeo, const struct sk_buff *skb)
2475{
2476	DEFINE_WAIT_FUNC(wait, woken_wake_function);
2477	int rc;
2478
2479	add_wait_queue(sk_sleep(sk), &wait);
2480	sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2481	rc = sk_wait_event(sk, timeo, skb_peek_tail(&sk->sk_receive_queue) != skb, &wait);
2482	sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2483	remove_wait_queue(sk_sleep(sk), &wait);
2484	return rc;
2485}
2486EXPORT_SYMBOL(sk_wait_data);
2487
2488/**
2489 *	__sk_mem_raise_allocated - increase memory_allocated
2490 *	@sk: socket
2491 *	@size: memory size to allocate
2492 *	@amt: pages to allocate
2493 *	@kind: allocation type
2494 *
2495 *	Similar to __sk_mem_schedule(), but does not update sk_forward_alloc
2496 */
2497int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)
2498{
2499	struct proto *prot = sk->sk_prot;
2500	long allocated = sk_memory_allocated_add(sk, amt);
2501	bool charged = true;
2502
2503	if (mem_cgroup_sockets_enabled && sk->sk_memcg &&
2504	    !(charged = mem_cgroup_charge_skmem(sk->sk_memcg, amt)))
2505		goto suppress_allocation;
2506
2507	/* Under limit. */
2508	if (allocated <= sk_prot_mem_limits(sk, 0)) {
2509		sk_leave_memory_pressure(sk);
2510		return 1;
2511	}
2512
2513	/* Under pressure. */
2514	if (allocated > sk_prot_mem_limits(sk, 1))
2515		sk_enter_memory_pressure(sk);
2516
2517	/* Over hard limit. */
2518	if (allocated > sk_prot_mem_limits(sk, 2))
2519		goto suppress_allocation;
2520
2521	/* guarantee minimum buffer size under pressure */
2522	if (kind == SK_MEM_RECV) {
2523		if (atomic_read(&sk->sk_rmem_alloc) < sk_get_rmem0(sk, prot))
2524			return 1;
2525
2526	} else { /* SK_MEM_SEND */
2527		int wmem0 = sk_get_wmem0(sk, prot);
2528
2529		if (sk->sk_type == SOCK_STREAM) {
2530			if (sk->sk_wmem_queued < wmem0)
2531				return 1;
2532		} else if (refcount_read(&sk->sk_wmem_alloc) < wmem0) {
 
2533				return 1;
2534		}
2535	}
2536
2537	if (sk_has_memory_pressure(sk)) {
2538		u64 alloc;
2539
2540		if (!sk_under_memory_pressure(sk))
2541			return 1;
2542		alloc = sk_sockets_allocated_read_positive(sk);
2543		if (sk_prot_mem_limits(sk, 2) > alloc *
2544		    sk_mem_pages(sk->sk_wmem_queued +
2545				 atomic_read(&sk->sk_rmem_alloc) +
2546				 sk->sk_forward_alloc))
2547			return 1;
2548	}
2549
2550suppress_allocation:
2551
2552	if (kind == SK_MEM_SEND && sk->sk_type == SOCK_STREAM) {
2553		sk_stream_moderate_sndbuf(sk);
2554
2555		/* Fail only if socket is _under_ its sndbuf.
2556		 * In this case we cannot block, so that we have to fail.
2557		 */
2558		if (sk->sk_wmem_queued + size >= sk->sk_sndbuf)
2559			return 1;
2560	}
2561
2562	if (kind == SK_MEM_SEND || (kind == SK_MEM_RECV && charged))
2563		trace_sock_exceed_buf_limit(sk, prot, allocated, kind);
2564
2565	sk_memory_allocated_sub(sk, amt);
2566
2567	if (mem_cgroup_sockets_enabled && sk->sk_memcg)
2568		mem_cgroup_uncharge_skmem(sk->sk_memcg, amt);
2569
2570	return 0;
2571}
2572EXPORT_SYMBOL(__sk_mem_raise_allocated);
2573
2574/**
2575 *	__sk_mem_schedule - increase sk_forward_alloc and memory_allocated
2576 *	@sk: socket
2577 *	@size: memory size to allocate
2578 *	@kind: allocation type
2579 *
2580 *	If kind is SK_MEM_SEND, it means wmem allocation. Otherwise it means
2581 *	rmem allocation. This function assumes that protocols which have
2582 *	memory_pressure use sk_wmem_queued as write buffer accounting.
2583 */
2584int __sk_mem_schedule(struct sock *sk, int size, int kind)
2585{
2586	int ret, amt = sk_mem_pages(size);
2587
2588	sk->sk_forward_alloc += amt << SK_MEM_QUANTUM_SHIFT;
2589	ret = __sk_mem_raise_allocated(sk, size, amt, kind);
2590	if (!ret)
2591		sk->sk_forward_alloc -= amt << SK_MEM_QUANTUM_SHIFT;
2592	return ret;
2593}
2594EXPORT_SYMBOL(__sk_mem_schedule);
2595
2596/**
2597 *	__sk_mem_reduce_allocated - reclaim memory_allocated
2598 *	@sk: socket
2599 *	@amount: number of quanta
2600 *
2601 *	Similar to __sk_mem_reclaim(), but does not update sk_forward_alloc
2602 */
2603void __sk_mem_reduce_allocated(struct sock *sk, int amount)
2604{
2605	sk_memory_allocated_sub(sk, amount);
2606
2607	if (mem_cgroup_sockets_enabled && sk->sk_memcg)
2608		mem_cgroup_uncharge_skmem(sk->sk_memcg, amount);
2609
2610	if (sk_under_memory_pressure(sk) &&
2611	    (sk_memory_allocated(sk) < sk_prot_mem_limits(sk, 0)))
2612		sk_leave_memory_pressure(sk);
2613}
2614EXPORT_SYMBOL(__sk_mem_reduce_allocated);
2615
2616/**
2617 *	__sk_mem_reclaim - reclaim sk_forward_alloc and memory_allocated
2618 *	@sk: socket
2619 *	@amount: number of bytes (rounded down to a SK_MEM_QUANTUM multiple)
2620 */
2621void __sk_mem_reclaim(struct sock *sk, int amount)
2622{
2623	amount >>= SK_MEM_QUANTUM_SHIFT;
2624	sk->sk_forward_alloc -= amount << SK_MEM_QUANTUM_SHIFT;
2625	__sk_mem_reduce_allocated(sk, amount);
2626}
2627EXPORT_SYMBOL(__sk_mem_reclaim);
2628
2629int sk_set_peek_off(struct sock *sk, int val)
2630{
 
 
 
2631	sk->sk_peek_off = val;
2632	return 0;
2633}
2634EXPORT_SYMBOL_GPL(sk_set_peek_off);
2635
2636/*
2637 * Set of default routines for initialising struct proto_ops when
2638 * the protocol does not support a particular function. In certain
2639 * cases where it makes no sense for a protocol to have a "do nothing"
2640 * function, some default processing is provided.
2641 */
2642
2643int sock_no_bind(struct socket *sock, struct sockaddr *saddr, int len)
2644{
2645	return -EOPNOTSUPP;
2646}
2647EXPORT_SYMBOL(sock_no_bind);
2648
2649int sock_no_connect(struct socket *sock, struct sockaddr *saddr,
2650		    int len, int flags)
2651{
2652	return -EOPNOTSUPP;
2653}
2654EXPORT_SYMBOL(sock_no_connect);
2655
2656int sock_no_socketpair(struct socket *sock1, struct socket *sock2)
2657{
2658	return -EOPNOTSUPP;
2659}
2660EXPORT_SYMBOL(sock_no_socketpair);
2661
2662int sock_no_accept(struct socket *sock, struct socket *newsock, int flags,
2663		   bool kern)
2664{
2665	return -EOPNOTSUPP;
2666}
2667EXPORT_SYMBOL(sock_no_accept);
2668
2669int sock_no_getname(struct socket *sock, struct sockaddr *saddr,
2670		    int peer)
2671{
2672	return -EOPNOTSUPP;
2673}
2674EXPORT_SYMBOL(sock_no_getname);
2675
 
 
 
 
 
 
2676int sock_no_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
2677{
2678	return -EOPNOTSUPP;
2679}
2680EXPORT_SYMBOL(sock_no_ioctl);
2681
2682int sock_no_listen(struct socket *sock, int backlog)
2683{
2684	return -EOPNOTSUPP;
2685}
2686EXPORT_SYMBOL(sock_no_listen);
2687
2688int sock_no_shutdown(struct socket *sock, int how)
2689{
2690	return -EOPNOTSUPP;
2691}
2692EXPORT_SYMBOL(sock_no_shutdown);
2693
2694int sock_no_setsockopt(struct socket *sock, int level, int optname,
2695		    char __user *optval, unsigned int optlen)
2696{
2697	return -EOPNOTSUPP;
2698}
2699EXPORT_SYMBOL(sock_no_setsockopt);
2700
2701int sock_no_getsockopt(struct socket *sock, int level, int optname,
2702		    char __user *optval, int __user *optlen)
2703{
2704	return -EOPNOTSUPP;
2705}
2706EXPORT_SYMBOL(sock_no_getsockopt);
2707
2708int sock_no_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
2709{
2710	return -EOPNOTSUPP;
2711}
2712EXPORT_SYMBOL(sock_no_sendmsg);
2713
2714int sock_no_sendmsg_locked(struct sock *sk, struct msghdr *m, size_t len)
2715{
2716	return -EOPNOTSUPP;
2717}
2718EXPORT_SYMBOL(sock_no_sendmsg_locked);
2719
2720int sock_no_recvmsg(struct socket *sock, struct msghdr *m, size_t len,
2721		    int flags)
2722{
2723	return -EOPNOTSUPP;
2724}
2725EXPORT_SYMBOL(sock_no_recvmsg);
2726
2727int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
2728{
2729	/* Mirror missing mmap method error code */
2730	return -ENODEV;
2731}
2732EXPORT_SYMBOL(sock_no_mmap);
2733
2734ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags)
2735{
2736	ssize_t res;
2737	struct msghdr msg = {.msg_flags = flags};
2738	struct kvec iov;
2739	char *kaddr = kmap(page);
2740	iov.iov_base = kaddr + offset;
2741	iov.iov_len = size;
2742	res = kernel_sendmsg(sock, &msg, &iov, 1, size);
2743	kunmap(page);
2744	return res;
2745}
2746EXPORT_SYMBOL(sock_no_sendpage);
2747
2748ssize_t sock_no_sendpage_locked(struct sock *sk, struct page *page,
2749				int offset, size_t size, int flags)
2750{
2751	ssize_t res;
2752	struct msghdr msg = {.msg_flags = flags};
2753	struct kvec iov;
2754	char *kaddr = kmap(page);
2755
2756	iov.iov_base = kaddr + offset;
2757	iov.iov_len = size;
2758	res = kernel_sendmsg_locked(sk, &msg, &iov, 1, size);
2759	kunmap(page);
2760	return res;
2761}
2762EXPORT_SYMBOL(sock_no_sendpage_locked);
2763
2764/*
2765 *	Default Socket Callbacks
2766 */
2767
2768static void sock_def_wakeup(struct sock *sk)
2769{
2770	struct socket_wq *wq;
2771
2772	rcu_read_lock();
2773	wq = rcu_dereference(sk->sk_wq);
2774	if (skwq_has_sleeper(wq))
2775		wake_up_interruptible_all(&wq->wait);
2776	rcu_read_unlock();
2777}
2778
2779static void sock_def_error_report(struct sock *sk)
2780{
2781	struct socket_wq *wq;
2782
2783	rcu_read_lock();
2784	wq = rcu_dereference(sk->sk_wq);
2785	if (skwq_has_sleeper(wq))
2786		wake_up_interruptible_poll(&wq->wait, EPOLLERR);
2787	sk_wake_async(sk, SOCK_WAKE_IO, POLL_ERR);
2788	rcu_read_unlock();
2789}
2790
2791static void sock_def_readable(struct sock *sk)
2792{
2793	struct socket_wq *wq;
2794
2795	rcu_read_lock();
2796	wq = rcu_dereference(sk->sk_wq);
2797	if (skwq_has_sleeper(wq))
2798		wake_up_interruptible_sync_poll(&wq->wait, EPOLLIN | EPOLLPRI |
2799						EPOLLRDNORM | EPOLLRDBAND);
2800	sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN);
2801	rcu_read_unlock();
2802}
2803
2804static void sock_def_write_space(struct sock *sk)
2805{
2806	struct socket_wq *wq;
2807
2808	rcu_read_lock();
2809
2810	/* Do not wake up a writer until he can make "significant"
2811	 * progress.  --DaveM
2812	 */
2813	if ((refcount_read(&sk->sk_wmem_alloc) << 1) <= READ_ONCE(sk->sk_sndbuf)) {
2814		wq = rcu_dereference(sk->sk_wq);
2815		if (skwq_has_sleeper(wq))
2816			wake_up_interruptible_sync_poll(&wq->wait, EPOLLOUT |
2817						EPOLLWRNORM | EPOLLWRBAND);
2818
2819		/* Should agree with poll, otherwise some programs break */
2820		if (sock_writeable(sk))
2821			sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
2822	}
2823
2824	rcu_read_unlock();
2825}
2826
2827static void sock_def_destruct(struct sock *sk)
2828{
2829}
2830
2831void sk_send_sigurg(struct sock *sk)
2832{
2833	if (sk->sk_socket && sk->sk_socket->file)
2834		if (send_sigurg(&sk->sk_socket->file->f_owner))
2835			sk_wake_async(sk, SOCK_WAKE_URG, POLL_PRI);
2836}
2837EXPORT_SYMBOL(sk_send_sigurg);
2838
2839void sk_reset_timer(struct sock *sk, struct timer_list* timer,
2840		    unsigned long expires)
2841{
2842	if (!mod_timer(timer, expires))
2843		sock_hold(sk);
2844}
2845EXPORT_SYMBOL(sk_reset_timer);
2846
2847void sk_stop_timer(struct sock *sk, struct timer_list* timer)
2848{
2849	if (del_timer(timer))
2850		__sock_put(sk);
2851}
2852EXPORT_SYMBOL(sk_stop_timer);
2853
2854void sock_init_data(struct socket *sock, struct sock *sk)
2855{
2856	sk_init_common(sk);
 
 
 
2857	sk->sk_send_head	=	NULL;
2858
2859	timer_setup(&sk->sk_timer, NULL, 0);
2860
2861	sk->sk_allocation	=	GFP_KERNEL;
2862	sk->sk_rcvbuf		=	sysctl_rmem_default;
2863	sk->sk_sndbuf		=	sysctl_wmem_default;
2864	sk->sk_state		=	TCP_CLOSE;
2865	sk_set_socket(sk, sock);
2866
2867	sock_set_flag(sk, SOCK_ZAPPED);
2868
2869	if (sock) {
2870		sk->sk_type	=	sock->type;
2871		RCU_INIT_POINTER(sk->sk_wq, &sock->wq);
2872		sock->sk	=	sk;
2873		sk->sk_uid	=	SOCK_INODE(sock)->i_uid;
2874	} else {
2875		RCU_INIT_POINTER(sk->sk_wq, NULL);
2876		sk->sk_uid	=	make_kuid(sock_net(sk)->user_ns, 0);
2877	}
2878
2879	rwlock_init(&sk->sk_callback_lock);
2880	if (sk->sk_kern_sock)
2881		lockdep_set_class_and_name(
2882			&sk->sk_callback_lock,
2883			af_kern_callback_keys + sk->sk_family,
2884			af_family_kern_clock_key_strings[sk->sk_family]);
2885	else
2886		lockdep_set_class_and_name(
2887			&sk->sk_callback_lock,
2888			af_callback_keys + sk->sk_family,
2889			af_family_clock_key_strings[sk->sk_family]);
2890
2891	sk->sk_state_change	=	sock_def_wakeup;
2892	sk->sk_data_ready	=	sock_def_readable;
2893	sk->sk_write_space	=	sock_def_write_space;
2894	sk->sk_error_report	=	sock_def_error_report;
2895	sk->sk_destruct		=	sock_def_destruct;
2896
2897	sk->sk_frag.page	=	NULL;
2898	sk->sk_frag.offset	=	0;
2899	sk->sk_peek_off		=	-1;
2900
2901	sk->sk_peer_pid 	=	NULL;
2902	sk->sk_peer_cred	=	NULL;
2903	sk->sk_write_pending	=	0;
2904	sk->sk_rcvlowat		=	1;
2905	sk->sk_rcvtimeo		=	MAX_SCHEDULE_TIMEOUT;
2906	sk->sk_sndtimeo		=	MAX_SCHEDULE_TIMEOUT;
2907
2908	sk->sk_stamp = SK_DEFAULT_STAMP;
2909#if BITS_PER_LONG==32
2910	seqlock_init(&sk->sk_stamp_seq);
2911#endif
2912	atomic_set(&sk->sk_zckey, 0);
2913
2914#ifdef CONFIG_NET_RX_BUSY_POLL
2915	sk->sk_napi_id		=	0;
2916	sk->sk_ll_usec		=	sysctl_net_busy_read;
2917#endif
2918
2919	sk->sk_max_pacing_rate = ~0UL;
2920	sk->sk_pacing_rate = ~0UL;
2921	sk->sk_pacing_shift = 10;
2922	sk->sk_incoming_cpu = -1;
2923
2924	sk_rx_queue_clear(sk);
2925	/*
2926	 * Before updating sk_refcnt, we must commit prior changes to memory
2927	 * (Documentation/RCU/rculist_nulls.txt for details)
2928	 */
2929	smp_wmb();
2930	refcount_set(&sk->sk_refcnt, 1);
2931	atomic_set(&sk->sk_drops, 0);
2932}
2933EXPORT_SYMBOL(sock_init_data);
2934
2935void lock_sock_nested(struct sock *sk, int subclass)
2936{
2937	might_sleep();
2938	spin_lock_bh(&sk->sk_lock.slock);
2939	if (sk->sk_lock.owned)
2940		__lock_sock(sk);
2941	sk->sk_lock.owned = 1;
2942	spin_unlock(&sk->sk_lock.slock);
2943	/*
2944	 * The sk_lock has mutex_lock() semantics here:
2945	 */
2946	mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
2947	local_bh_enable();
2948}
2949EXPORT_SYMBOL(lock_sock_nested);
2950
2951void release_sock(struct sock *sk)
2952{
2953	spin_lock_bh(&sk->sk_lock.slock);
2954	if (sk->sk_backlog.tail)
2955		__release_sock(sk);
2956
2957	/* Warning : release_cb() might need to release sk ownership,
2958	 * ie call sock_release_ownership(sk) before us.
2959	 */
2960	if (sk->sk_prot->release_cb)
2961		sk->sk_prot->release_cb(sk);
2962
2963	sock_release_ownership(sk);
2964	if (waitqueue_active(&sk->sk_lock.wq))
2965		wake_up(&sk->sk_lock.wq);
2966	spin_unlock_bh(&sk->sk_lock.slock);
2967}
2968EXPORT_SYMBOL(release_sock);
2969
2970/**
2971 * lock_sock_fast - fast version of lock_sock
2972 * @sk: socket
2973 *
2974 * This version should be used for very small section, where process wont block
2975 * return false if fast path is taken:
2976 *
2977 *   sk_lock.slock locked, owned = 0, BH disabled
2978 *
2979 * return true if slow path is taken:
2980 *
2981 *   sk_lock.slock unlocked, owned = 1, BH enabled
2982 */
2983bool lock_sock_fast(struct sock *sk)
2984{
2985	might_sleep();
2986	spin_lock_bh(&sk->sk_lock.slock);
2987
2988	if (!sk->sk_lock.owned)
2989		/*
2990		 * Note : We must disable BH
2991		 */
2992		return false;
2993
2994	__lock_sock(sk);
2995	sk->sk_lock.owned = 1;
2996	spin_unlock(&sk->sk_lock.slock);
2997	/*
2998	 * The sk_lock has mutex_lock() semantics here:
2999	 */
3000	mutex_acquire(&sk->sk_lock.dep_map, 0, 0, _RET_IP_);
3001	local_bh_enable();
3002	return true;
3003}
3004EXPORT_SYMBOL(lock_sock_fast);
3005
3006int sock_gettstamp(struct socket *sock, void __user *userstamp,
3007		   bool timeval, bool time32)
3008{
3009	struct sock *sk = sock->sk;
3010	struct timespec64 ts;
 
 
 
 
 
 
 
 
 
 
 
3011
3012	sock_enable_timestamp(sk, SOCK_TIMESTAMP);
3013	ts = ktime_to_timespec64(sock_read_timestamp(sk));
 
 
 
 
3014	if (ts.tv_sec == -1)
3015		return -ENOENT;
3016	if (ts.tv_sec == 0) {
3017		ktime_t kt = ktime_get_real();
3018		sock_write_timestamp(sk, kt);;
3019		ts = ktime_to_timespec64(kt);
3020	}
3021
3022	if (timeval)
3023		ts.tv_nsec /= 1000;
3024
3025#ifdef CONFIG_COMPAT_32BIT_TIME
3026	if (time32)
3027		return put_old_timespec32(&ts, userstamp);
3028#endif
3029#ifdef CONFIG_SPARC64
3030	/* beware of padding in sparc64 timeval */
3031	if (timeval && !in_compat_syscall()) {
3032		struct __kernel_old_timeval __user tv = {
3033			.tv_sec = ts.tv_sec,
3034			.tv_usec = ts.tv_nsec,
3035		};
3036		if (copy_to_user(userstamp, &tv, sizeof(tv)))
3037			return -EFAULT;
3038		return 0;
3039	}
3040#endif
3041	return put_timespec64(&ts, userstamp);
3042}
3043EXPORT_SYMBOL(sock_gettstamp);
3044
3045void sock_enable_timestamp(struct sock *sk, int flag)
3046{
3047	if (!sock_flag(sk, flag)) {
3048		unsigned long previous_flags = sk->sk_flags;
3049
3050		sock_set_flag(sk, flag);
3051		/*
3052		 * we just set one of the two flags which require net
3053		 * time stamping, but time stamping might have been on
3054		 * already because of the other one
3055		 */
3056		if (sock_needs_netstamp(sk) &&
3057		    !(previous_flags & SK_FLAGS_TIMESTAMP))
3058			net_enable_timestamp();
3059	}
3060}
3061
3062int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
3063		       int level, int type)
3064{
3065	struct sock_exterr_skb *serr;
3066	struct sk_buff *skb;
3067	int copied, err;
3068
3069	err = -EAGAIN;
3070	skb = sock_dequeue_err_skb(sk);
3071	if (skb == NULL)
3072		goto out;
3073
3074	copied = skb->len;
3075	if (copied > len) {
3076		msg->msg_flags |= MSG_TRUNC;
3077		copied = len;
3078	}
3079	err = skb_copy_datagram_msg(skb, 0, msg, copied);
3080	if (err)
3081		goto out_free_skb;
3082
3083	sock_recv_timestamp(msg, sk, skb);
3084
3085	serr = SKB_EXT_ERR(skb);
3086	put_cmsg(msg, level, type, sizeof(serr->ee), &serr->ee);
3087
3088	msg->msg_flags |= MSG_ERRQUEUE;
3089	err = copied;
3090
3091out_free_skb:
3092	kfree_skb(skb);
3093out:
3094	return err;
3095}
3096EXPORT_SYMBOL(sock_recv_errqueue);
3097
3098/*
3099 *	Get a socket option on an socket.
3100 *
3101 *	FIX: POSIX 1003.1g is very ambiguous here. It states that
3102 *	asynchronous errors should be reported by getsockopt. We assume
3103 *	this means if you specify SO_ERROR (otherwise whats the point of it).
3104 */
3105int sock_common_getsockopt(struct socket *sock, int level, int optname,
3106			   char __user *optval, int __user *optlen)
3107{
3108	struct sock *sk = sock->sk;
3109
3110	return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
3111}
3112EXPORT_SYMBOL(sock_common_getsockopt);
3113
3114#ifdef CONFIG_COMPAT
3115int compat_sock_common_getsockopt(struct socket *sock, int level, int optname,
3116				  char __user *optval, int __user *optlen)
3117{
3118	struct sock *sk = sock->sk;
3119
3120	if (sk->sk_prot->compat_getsockopt != NULL)
3121		return sk->sk_prot->compat_getsockopt(sk, level, optname,
3122						      optval, optlen);
3123	return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
3124}
3125EXPORT_SYMBOL(compat_sock_common_getsockopt);
3126#endif
3127
3128int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
3129			int flags)
3130{
3131	struct sock *sk = sock->sk;
3132	int addr_len = 0;
3133	int err;
3134
3135	err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
3136				   flags & ~MSG_DONTWAIT, &addr_len);
3137	if (err >= 0)
3138		msg->msg_namelen = addr_len;
3139	return err;
3140}
3141EXPORT_SYMBOL(sock_common_recvmsg);
3142
3143/*
3144 *	Set socket options on an inet socket.
3145 */
3146int sock_common_setsockopt(struct socket *sock, int level, int optname,
3147			   char __user *optval, unsigned int optlen)
3148{
3149	struct sock *sk = sock->sk;
3150
3151	return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
3152}
3153EXPORT_SYMBOL(sock_common_setsockopt);
3154
3155#ifdef CONFIG_COMPAT
3156int compat_sock_common_setsockopt(struct socket *sock, int level, int optname,
3157				  char __user *optval, unsigned int optlen)
3158{
3159	struct sock *sk = sock->sk;
3160
3161	if (sk->sk_prot->compat_setsockopt != NULL)
3162		return sk->sk_prot->compat_setsockopt(sk, level, optname,
3163						      optval, optlen);
3164	return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
3165}
3166EXPORT_SYMBOL(compat_sock_common_setsockopt);
3167#endif
3168
3169void sk_common_release(struct sock *sk)
3170{
3171	if (sk->sk_prot->destroy)
3172		sk->sk_prot->destroy(sk);
3173
3174	/*
3175	 * Observation: when sock_common_release is called, processes have
3176	 * no access to socket. But net still has.
3177	 * Step one, detach it from networking:
3178	 *
3179	 * A. Remove from hash tables.
3180	 */
3181
3182	sk->sk_prot->unhash(sk);
3183
3184	/*
3185	 * In this point socket cannot receive new packets, but it is possible
3186	 * that some packets are in flight because some CPU runs receiver and
3187	 * did hash table lookup before we unhashed socket. They will achieve
3188	 * receive queue and will be purged by socket destructor.
3189	 *
3190	 * Also we still have packets pending on receive queue and probably,
3191	 * our own packets waiting in device queues. sock_destroy will drain
3192	 * receive queue, but transmitted packets will delay socket destruction
3193	 * until the last reference will be released.
3194	 */
3195
3196	sock_orphan(sk);
3197
3198	xfrm_sk_free_policy(sk);
3199
3200	sk_refcnt_debug_release(sk);
3201
3202	sock_put(sk);
3203}
3204EXPORT_SYMBOL(sk_common_release);
3205
3206void sk_get_meminfo(const struct sock *sk, u32 *mem)
3207{
3208	memset(mem, 0, sizeof(*mem) * SK_MEMINFO_VARS);
3209
3210	mem[SK_MEMINFO_RMEM_ALLOC] = sk_rmem_alloc_get(sk);
3211	mem[SK_MEMINFO_RCVBUF] = READ_ONCE(sk->sk_rcvbuf);
3212	mem[SK_MEMINFO_WMEM_ALLOC] = sk_wmem_alloc_get(sk);
3213	mem[SK_MEMINFO_SNDBUF] = READ_ONCE(sk->sk_sndbuf);
3214	mem[SK_MEMINFO_FWD_ALLOC] = sk->sk_forward_alloc;
3215	mem[SK_MEMINFO_WMEM_QUEUED] = READ_ONCE(sk->sk_wmem_queued);
3216	mem[SK_MEMINFO_OPTMEM] = atomic_read(&sk->sk_omem_alloc);
3217	mem[SK_MEMINFO_BACKLOG] = READ_ONCE(sk->sk_backlog.len);
3218	mem[SK_MEMINFO_DROPS] = atomic_read(&sk->sk_drops);
3219}
3220
3221#ifdef CONFIG_PROC_FS
3222#define PROTO_INUSE_NR	64	/* should be enough for the first time */
3223struct prot_inuse {
3224	int val[PROTO_INUSE_NR];
3225};
3226
3227static DECLARE_BITMAP(proto_inuse_idx, PROTO_INUSE_NR);
3228
 
3229void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
3230{
3231	__this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
3232}
3233EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
3234
3235int sock_prot_inuse_get(struct net *net, struct proto *prot)
3236{
3237	int cpu, idx = prot->inuse_idx;
3238	int res = 0;
3239
3240	for_each_possible_cpu(cpu)
3241		res += per_cpu_ptr(net->core.prot_inuse, cpu)->val[idx];
3242
3243	return res >= 0 ? res : 0;
3244}
3245EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
3246
3247static void sock_inuse_add(struct net *net, int val)
3248{
3249	this_cpu_add(*net->core.sock_inuse, val);
3250}
3251
3252int sock_inuse_get(struct net *net)
3253{
3254	int cpu, res = 0;
3255
3256	for_each_possible_cpu(cpu)
3257		res += *per_cpu_ptr(net->core.sock_inuse, cpu);
3258
3259	return res;
3260}
3261
3262EXPORT_SYMBOL_GPL(sock_inuse_get);
3263
3264static int __net_init sock_inuse_init_net(struct net *net)
3265{
3266	net->core.prot_inuse = alloc_percpu(struct prot_inuse);
3267	if (net->core.prot_inuse == NULL)
3268		return -ENOMEM;
3269
3270	net->core.sock_inuse = alloc_percpu(int);
3271	if (net->core.sock_inuse == NULL)
3272		goto out;
3273
3274	return 0;
3275
3276out:
3277	free_percpu(net->core.prot_inuse);
3278	return -ENOMEM;
3279}
3280
3281static void __net_exit sock_inuse_exit_net(struct net *net)
3282{
3283	free_percpu(net->core.prot_inuse);
3284	free_percpu(net->core.sock_inuse);
3285}
3286
3287static struct pernet_operations net_inuse_ops = {
3288	.init = sock_inuse_init_net,
3289	.exit = sock_inuse_exit_net,
3290};
3291
3292static __init int net_inuse_init(void)
3293{
3294	if (register_pernet_subsys(&net_inuse_ops))
3295		panic("Cannot initialize net inuse counters");
3296
3297	return 0;
3298}
3299
3300core_initcall(net_inuse_init);
 
 
3301
3302static int assign_proto_idx(struct proto *prot)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3303{
3304	prot->inuse_idx = find_first_zero_bit(proto_inuse_idx, PROTO_INUSE_NR);
3305
3306	if (unlikely(prot->inuse_idx == PROTO_INUSE_NR - 1)) {
3307		pr_err("PROTO_INUSE_NR exhausted\n");
3308		return -ENOSPC;
3309	}
3310
3311	set_bit(prot->inuse_idx, proto_inuse_idx);
3312	return 0;
3313}
3314
3315static void release_proto_idx(struct proto *prot)
3316{
3317	if (prot->inuse_idx != PROTO_INUSE_NR - 1)
3318		clear_bit(prot->inuse_idx, proto_inuse_idx);
3319}
3320#else
3321static inline int assign_proto_idx(struct proto *prot)
3322{
3323	return 0;
3324}
3325
3326static inline void release_proto_idx(struct proto *prot)
3327{
3328}
3329
3330static void sock_inuse_add(struct net *net, int val)
3331{
3332}
3333#endif
3334
3335static void req_prot_cleanup(struct request_sock_ops *rsk_prot)
3336{
3337	if (!rsk_prot)
3338		return;
3339	kfree(rsk_prot->slab_name);
3340	rsk_prot->slab_name = NULL;
3341	kmem_cache_destroy(rsk_prot->slab);
3342	rsk_prot->slab = NULL;
3343}
3344
3345static int req_prot_init(const struct proto *prot)
3346{
3347	struct request_sock_ops *rsk_prot = prot->rsk_prot;
3348
3349	if (!rsk_prot)
3350		return 0;
3351
3352	rsk_prot->slab_name = kasprintf(GFP_KERNEL, "request_sock_%s",
3353					prot->name);
3354	if (!rsk_prot->slab_name)
3355		return -ENOMEM;
3356
3357	rsk_prot->slab = kmem_cache_create(rsk_prot->slab_name,
3358					   rsk_prot->obj_size, 0,
3359					   SLAB_ACCOUNT | prot->slab_flags,
3360					   NULL);
3361
3362	if (!rsk_prot->slab) {
3363		pr_crit("%s: Can't create request sock SLAB cache!\n",
3364			prot->name);
3365		return -ENOMEM;
3366	}
3367	return 0;
3368}
3369
3370int proto_register(struct proto *prot, int alloc_slab)
3371{
3372	int ret = -ENOBUFS;
3373
3374	if (alloc_slab) {
3375		prot->slab = kmem_cache_create_usercopy(prot->name,
3376					prot->obj_size, 0,
3377					SLAB_HWCACHE_ALIGN | SLAB_ACCOUNT |
3378					prot->slab_flags,
3379					prot->useroffset, prot->usersize,
3380					NULL);
3381
3382		if (prot->slab == NULL) {
3383			pr_crit("%s: Can't create sock SLAB cache!\n",
3384				prot->name);
3385			goto out;
3386		}
3387
3388		if (req_prot_init(prot))
3389			goto out_free_request_sock_slab;
3390
3391		if (prot->twsk_prot != NULL) {
3392			prot->twsk_prot->twsk_slab_name = kasprintf(GFP_KERNEL, "tw_sock_%s", prot->name);
3393
3394			if (prot->twsk_prot->twsk_slab_name == NULL)
3395				goto out_free_request_sock_slab;
3396
3397			prot->twsk_prot->twsk_slab =
3398				kmem_cache_create(prot->twsk_prot->twsk_slab_name,
3399						  prot->twsk_prot->twsk_obj_size,
3400						  0,
3401						  SLAB_ACCOUNT |
3402						  prot->slab_flags,
3403						  NULL);
3404			if (prot->twsk_prot->twsk_slab == NULL)
3405				goto out_free_timewait_sock_slab_name;
3406		}
3407	}
3408
3409	mutex_lock(&proto_list_mutex);
3410	ret = assign_proto_idx(prot);
3411	if (ret) {
3412		mutex_unlock(&proto_list_mutex);
3413		goto out_free_timewait_sock_slab_name;
3414	}
3415	list_add(&prot->node, &proto_list);
 
3416	mutex_unlock(&proto_list_mutex);
3417	return ret;
3418
3419out_free_timewait_sock_slab_name:
3420	if (alloc_slab && prot->twsk_prot)
3421		kfree(prot->twsk_prot->twsk_slab_name);
3422out_free_request_sock_slab:
3423	if (alloc_slab) {
3424		req_prot_cleanup(prot->rsk_prot);
3425
3426		kmem_cache_destroy(prot->slab);
3427		prot->slab = NULL;
3428	}
3429out:
3430	return ret;
3431}
3432EXPORT_SYMBOL(proto_register);
3433
3434void proto_unregister(struct proto *prot)
3435{
3436	mutex_lock(&proto_list_mutex);
3437	release_proto_idx(prot);
3438	list_del(&prot->node);
3439	mutex_unlock(&proto_list_mutex);
3440
3441	kmem_cache_destroy(prot->slab);
3442	prot->slab = NULL;
3443
3444	req_prot_cleanup(prot->rsk_prot);
3445
3446	if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) {
3447		kmem_cache_destroy(prot->twsk_prot->twsk_slab);
3448		kfree(prot->twsk_prot->twsk_slab_name);
3449		prot->twsk_prot->twsk_slab = NULL;
3450	}
3451}
3452EXPORT_SYMBOL(proto_unregister);
3453
3454int sock_load_diag_module(int family, int protocol)
3455{
3456	if (!protocol) {
3457		if (!sock_is_registered(family))
3458			return -ENOENT;
3459
3460		return request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
3461				      NETLINK_SOCK_DIAG, family);
3462	}
3463
3464#ifdef CONFIG_INET
3465	if (family == AF_INET &&
3466	    protocol != IPPROTO_RAW &&
3467	    !rcu_access_pointer(inet_protos[protocol]))
3468		return -ENOENT;
3469#endif
3470
3471	return request_module("net-pf-%d-proto-%d-type-%d-%d", PF_NETLINK,
3472			      NETLINK_SOCK_DIAG, family, protocol);
3473}
3474EXPORT_SYMBOL(sock_load_diag_module);
3475
3476#ifdef CONFIG_PROC_FS
3477static void *proto_seq_start(struct seq_file *seq, loff_t *pos)
3478	__acquires(proto_list_mutex)
3479{
3480	mutex_lock(&proto_list_mutex);
3481	return seq_list_start_head(&proto_list, *pos);
3482}
3483
3484static void *proto_seq_next(struct seq_file *seq, void *v, loff_t *pos)
3485{
3486	return seq_list_next(v, &proto_list, pos);
3487}
3488
3489static void proto_seq_stop(struct seq_file *seq, void *v)
3490	__releases(proto_list_mutex)
3491{
3492	mutex_unlock(&proto_list_mutex);
3493}
3494
3495static char proto_method_implemented(const void *method)
3496{
3497	return method == NULL ? 'n' : 'y';
3498}
3499static long sock_prot_memory_allocated(struct proto *proto)
3500{
3501	return proto->memory_allocated != NULL ? proto_memory_allocated(proto) : -1L;
3502}
3503
3504static const char *sock_prot_memory_pressure(struct proto *proto)
3505{
3506	return proto->memory_pressure != NULL ?
3507	proto_memory_pressure(proto) ? "yes" : "no" : "NI";
3508}
3509
3510static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
3511{
3512
3513	seq_printf(seq, "%-9s %4u %6d  %6ld   %-3s %6u   %-3s  %-10s "
3514			"%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
3515		   proto->name,
3516		   proto->obj_size,
3517		   sock_prot_inuse_get(seq_file_net(seq), proto),
3518		   sock_prot_memory_allocated(proto),
3519		   sock_prot_memory_pressure(proto),
3520		   proto->max_header,
3521		   proto->slab == NULL ? "no" : "yes",
3522		   module_name(proto->owner),
3523		   proto_method_implemented(proto->close),
3524		   proto_method_implemented(proto->connect),
3525		   proto_method_implemented(proto->disconnect),
3526		   proto_method_implemented(proto->accept),
3527		   proto_method_implemented(proto->ioctl),
3528		   proto_method_implemented(proto->init),
3529		   proto_method_implemented(proto->destroy),
3530		   proto_method_implemented(proto->shutdown),
3531		   proto_method_implemented(proto->setsockopt),
3532		   proto_method_implemented(proto->getsockopt),
3533		   proto_method_implemented(proto->sendmsg),
3534		   proto_method_implemented(proto->recvmsg),
3535		   proto_method_implemented(proto->sendpage),
3536		   proto_method_implemented(proto->bind),
3537		   proto_method_implemented(proto->backlog_rcv),
3538		   proto_method_implemented(proto->hash),
3539		   proto_method_implemented(proto->unhash),
3540		   proto_method_implemented(proto->get_port),
3541		   proto_method_implemented(proto->enter_memory_pressure));
3542}
3543
3544static int proto_seq_show(struct seq_file *seq, void *v)
3545{
3546	if (v == &proto_list)
3547		seq_printf(seq, "%-9s %-4s %-8s %-6s %-5s %-7s %-4s %-10s %s",
3548			   "protocol",
3549			   "size",
3550			   "sockets",
3551			   "memory",
3552			   "press",
3553			   "maxhdr",
3554			   "slab",
3555			   "module",
3556			   "cl co di ac io in de sh ss gs se re sp bi br ha uh gp em\n");
3557	else
3558		proto_seq_printf(seq, list_entry(v, struct proto, node));
3559	return 0;
3560}
3561
3562static const struct seq_operations proto_seq_ops = {
3563	.start  = proto_seq_start,
3564	.next   = proto_seq_next,
3565	.stop   = proto_seq_stop,
3566	.show   = proto_seq_show,
3567};
3568
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3569static __net_init int proto_init_net(struct net *net)
3570{
3571	if (!proc_create_net("protocols", 0444, net->proc_net, &proto_seq_ops,
3572			sizeof(struct seq_net_private)))
3573		return -ENOMEM;
3574
3575	return 0;
3576}
3577
3578static __net_exit void proto_exit_net(struct net *net)
3579{
3580	remove_proc_entry("protocols", net->proc_net);
3581}
3582
3583
3584static __net_initdata struct pernet_operations proto_net_ops = {
3585	.init = proto_init_net,
3586	.exit = proto_exit_net,
3587};
3588
3589static int __init proto_init(void)
3590{
3591	return register_pernet_subsys(&proto_net_ops);
3592}
3593
3594subsys_initcall(proto_init);
3595
3596#endif /* PROC_FS */
3597
3598#ifdef CONFIG_NET_RX_BUSY_POLL
3599bool sk_busy_loop_end(void *p, unsigned long start_time)
3600{
3601	struct sock *sk = p;
3602
3603	return !skb_queue_empty_lockless(&sk->sk_receive_queue) ||
3604	       sk_busy_loop_timeout(sk, start_time);
3605}
3606EXPORT_SYMBOL(sk_busy_loop_end);
3607#endif /* CONFIG_NET_RX_BUSY_POLL */
v4.10.11
 
   1/*
   2 * INET		An implementation of the TCP/IP protocol suite for the LINUX
   3 *		operating system.  INET is implemented using the  BSD Socket
   4 *		interface as the means of communication with the user level.
   5 *
   6 *		Generic socket support routines. Memory allocators, socket lock/release
   7 *		handler for protocols to use and generic option handler.
   8 *
   9 *
  10 * Authors:	Ross Biro
  11 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12 *		Florian La Roche, <flla@stud.uni-sb.de>
  13 *		Alan Cox, <A.Cox@swansea.ac.uk>
  14 *
  15 * Fixes:
  16 *		Alan Cox	: 	Numerous verify_area() problems
  17 *		Alan Cox	:	Connecting on a connecting socket
  18 *					now returns an error for tcp.
  19 *		Alan Cox	:	sock->protocol is set correctly.
  20 *					and is not sometimes left as 0.
  21 *		Alan Cox	:	connect handles icmp errors on a
  22 *					connect properly. Unfortunately there
  23 *					is a restart syscall nasty there. I
  24 *					can't match BSD without hacking the C
  25 *					library. Ideas urgently sought!
  26 *		Alan Cox	:	Disallow bind() to addresses that are
  27 *					not ours - especially broadcast ones!!
  28 *		Alan Cox	:	Socket 1024 _IS_ ok for users. (fencepost)
  29 *		Alan Cox	:	sock_wfree/sock_rfree don't destroy sockets,
  30 *					instead they leave that for the DESTROY timer.
  31 *		Alan Cox	:	Clean up error flag in accept
  32 *		Alan Cox	:	TCP ack handling is buggy, the DESTROY timer
  33 *					was buggy. Put a remove_sock() in the handler
  34 *					for memory when we hit 0. Also altered the timer
  35 *					code. The ACK stuff can wait and needs major
  36 *					TCP layer surgery.
  37 *		Alan Cox	:	Fixed TCP ack bug, removed remove sock
  38 *					and fixed timer/inet_bh race.
  39 *		Alan Cox	:	Added zapped flag for TCP
  40 *		Alan Cox	:	Move kfree_skb into skbuff.c and tidied up surplus code
  41 *		Alan Cox	:	for new sk_buff allocations wmalloc/rmalloc now call alloc_skb
  42 *		Alan Cox	:	kfree_s calls now are kfree_skbmem so we can track skb resources
  43 *		Alan Cox	:	Supports socket option broadcast now as does udp. Packet and raw need fixing.
  44 *		Alan Cox	:	Added RCVBUF,SNDBUF size setting. It suddenly occurred to me how easy it was so...
  45 *		Rick Sladkey	:	Relaxed UDP rules for matching packets.
  46 *		C.E.Hawkins	:	IFF_PROMISC/SIOCGHWADDR support
  47 *	Pauline Middelink	:	identd support
  48 *		Alan Cox	:	Fixed connect() taking signals I think.
  49 *		Alan Cox	:	SO_LINGER supported
  50 *		Alan Cox	:	Error reporting fixes
  51 *		Anonymous	:	inet_create tidied up (sk->reuse setting)
  52 *		Alan Cox	:	inet sockets don't set sk->type!
  53 *		Alan Cox	:	Split socket option code
  54 *		Alan Cox	:	Callbacks
  55 *		Alan Cox	:	Nagle flag for Charles & Johannes stuff
  56 *		Alex		:	Removed restriction on inet fioctl
  57 *		Alan Cox	:	Splitting INET from NET core
  58 *		Alan Cox	:	Fixed bogus SO_TYPE handling in getsockopt()
  59 *		Adam Caldwell	:	Missing return in SO_DONTROUTE/SO_DEBUG code
  60 *		Alan Cox	:	Split IP from generic code
  61 *		Alan Cox	:	New kfree_skbmem()
  62 *		Alan Cox	:	Make SO_DEBUG superuser only.
  63 *		Alan Cox	:	Allow anyone to clear SO_DEBUG
  64 *					(compatibility fix)
  65 *		Alan Cox	:	Added optimistic memory grabbing for AF_UNIX throughput.
  66 *		Alan Cox	:	Allocator for a socket is settable.
  67 *		Alan Cox	:	SO_ERROR includes soft errors.
  68 *		Alan Cox	:	Allow NULL arguments on some SO_ opts
  69 *		Alan Cox	: 	Generic socket allocation to make hooks
  70 *					easier (suggested by Craig Metz).
  71 *		Michael Pall	:	SO_ERROR returns positive errno again
  72 *              Steve Whitehouse:       Added default destructor to free
  73 *                                      protocol private data.
  74 *              Steve Whitehouse:       Added various other default routines
  75 *                                      common to several socket families.
  76 *              Chris Evans     :       Call suser() check last on F_SETOWN
  77 *		Jay Schulist	:	Added SO_ATTACH_FILTER and SO_DETACH_FILTER.
  78 *		Andi Kleen	:	Add sock_kmalloc()/sock_kfree_s()
  79 *		Andi Kleen	:	Fix write_space callback
  80 *		Chris Evans	:	Security fixes - signedness again
  81 *		Arnaldo C. Melo :       cleanups, use skb_queue_purge
  82 *
  83 * To Fix:
  84 *
  85 *
  86 *		This program is free software; you can redistribute it and/or
  87 *		modify it under the terms of the GNU General Public License
  88 *		as published by the Free Software Foundation; either version
  89 *		2 of the License, or (at your option) any later version.
  90 */
  91
  92#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  93
 
  94#include <linux/capability.h>
  95#include <linux/errno.h>
  96#include <linux/errqueue.h>
  97#include <linux/types.h>
  98#include <linux/socket.h>
  99#include <linux/in.h>
 100#include <linux/kernel.h>
 101#include <linux/module.h>
 102#include <linux/proc_fs.h>
 103#include <linux/seq_file.h>
 104#include <linux/sched.h>
 
 105#include <linux/timer.h>
 106#include <linux/string.h>
 107#include <linux/sockios.h>
 108#include <linux/net.h>
 109#include <linux/mm.h>
 110#include <linux/slab.h>
 111#include <linux/interrupt.h>
 112#include <linux/poll.h>
 113#include <linux/tcp.h>
 114#include <linux/init.h>
 115#include <linux/highmem.h>
 116#include <linux/user_namespace.h>
 117#include <linux/static_key.h>
 118#include <linux/memcontrol.h>
 119#include <linux/prefetch.h>
 120
 121#include <linux/uaccess.h>
 122
 123#include <linux/netdevice.h>
 124#include <net/protocol.h>
 125#include <linux/skbuff.h>
 126#include <net/net_namespace.h>
 127#include <net/request_sock.h>
 128#include <net/sock.h>
 129#include <linux/net_tstamp.h>
 130#include <net/xfrm.h>
 131#include <linux/ipsec.h>
 132#include <net/cls_cgroup.h>
 133#include <net/netprio_cgroup.h>
 134#include <linux/sock_diag.h>
 135
 136#include <linux/filter.h>
 137#include <net/sock_reuseport.h>
 
 138
 139#include <trace/events/sock.h>
 140
 141#ifdef CONFIG_INET
 142#include <net/tcp.h>
 143#endif
 144
 145#include <net/busy_poll.h>
 146
 147static DEFINE_MUTEX(proto_list_mutex);
 148static LIST_HEAD(proto_list);
 149
 
 
 150/**
 151 * sk_ns_capable - General socket capability test
 152 * @sk: Socket to use a capability on or through
 153 * @user_ns: The user namespace of the capability to use
 154 * @cap: The capability to use
 155 *
 156 * Test to see if the opener of the socket had when the socket was
 157 * created and the current process has the capability @cap in the user
 158 * namespace @user_ns.
 159 */
 160bool sk_ns_capable(const struct sock *sk,
 161		   struct user_namespace *user_ns, int cap)
 162{
 163	return file_ns_capable(sk->sk_socket->file, user_ns, cap) &&
 164		ns_capable(user_ns, cap);
 165}
 166EXPORT_SYMBOL(sk_ns_capable);
 167
 168/**
 169 * sk_capable - Socket global capability test
 170 * @sk: Socket to use a capability on or through
 171 * @cap: The global capability to use
 172 *
 173 * Test to see if the opener of the socket had when the socket was
 174 * created and the current process has the capability @cap in all user
 175 * namespaces.
 176 */
 177bool sk_capable(const struct sock *sk, int cap)
 178{
 179	return sk_ns_capable(sk, &init_user_ns, cap);
 180}
 181EXPORT_SYMBOL(sk_capable);
 182
 183/**
 184 * sk_net_capable - Network namespace socket capability test
 185 * @sk: Socket to use a capability on or through
 186 * @cap: The capability to use
 187 *
 188 * Test to see if the opener of the socket had when the socket was created
 189 * and the current process has the capability @cap over the network namespace
 190 * the socket is a member of.
 191 */
 192bool sk_net_capable(const struct sock *sk, int cap)
 193{
 194	return sk_ns_capable(sk, sock_net(sk)->user_ns, cap);
 195}
 196EXPORT_SYMBOL(sk_net_capable);
 197
 198/*
 199 * Each address family might have different locking rules, so we have
 200 * one slock key per address family:
 
 201 */
 202static struct lock_class_key af_family_keys[AF_MAX];
 
 203static struct lock_class_key af_family_slock_keys[AF_MAX];
 
 204
 205/*
 206 * Make lock validator output more readable. (we pre-construct these
 207 * strings build-time, so that runtime initialization of socket
 208 * locks is fast):
 209 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 210static const char *const af_family_key_strings[AF_MAX+1] = {
 211  "sk_lock-AF_UNSPEC", "sk_lock-AF_UNIX"     , "sk_lock-AF_INET"     ,
 212  "sk_lock-AF_AX25"  , "sk_lock-AF_IPX"      , "sk_lock-AF_APPLETALK",
 213  "sk_lock-AF_NETROM", "sk_lock-AF_BRIDGE"   , "sk_lock-AF_ATMPVC"   ,
 214  "sk_lock-AF_X25"   , "sk_lock-AF_INET6"    , "sk_lock-AF_ROSE"     ,
 215  "sk_lock-AF_DECnet", "sk_lock-AF_NETBEUI"  , "sk_lock-AF_SECURITY" ,
 216  "sk_lock-AF_KEY"   , "sk_lock-AF_NETLINK"  , "sk_lock-AF_PACKET"   ,
 217  "sk_lock-AF_ASH"   , "sk_lock-AF_ECONET"   , "sk_lock-AF_ATMSVC"   ,
 218  "sk_lock-AF_RDS"   , "sk_lock-AF_SNA"      , "sk_lock-AF_IRDA"     ,
 219  "sk_lock-AF_PPPOX" , "sk_lock-AF_WANPIPE"  , "sk_lock-AF_LLC"      ,
 220  "sk_lock-27"       , "sk_lock-28"          , "sk_lock-AF_CAN"      ,
 221  "sk_lock-AF_TIPC"  , "sk_lock-AF_BLUETOOTH", "sk_lock-IUCV"        ,
 222  "sk_lock-AF_RXRPC" , "sk_lock-AF_ISDN"     , "sk_lock-AF_PHONET"   ,
 223  "sk_lock-AF_IEEE802154", "sk_lock-AF_CAIF" , "sk_lock-AF_ALG"      ,
 224  "sk_lock-AF_NFC"   , "sk_lock-AF_VSOCK"    , "sk_lock-AF_KCM"      ,
 225  "sk_lock-AF_QIPCRTR", "sk_lock-AF_MAX"
 226};
 227static const char *const af_family_slock_key_strings[AF_MAX+1] = {
 228  "slock-AF_UNSPEC", "slock-AF_UNIX"     , "slock-AF_INET"     ,
 229  "slock-AF_AX25"  , "slock-AF_IPX"      , "slock-AF_APPLETALK",
 230  "slock-AF_NETROM", "slock-AF_BRIDGE"   , "slock-AF_ATMPVC"   ,
 231  "slock-AF_X25"   , "slock-AF_INET6"    , "slock-AF_ROSE"     ,
 232  "slock-AF_DECnet", "slock-AF_NETBEUI"  , "slock-AF_SECURITY" ,
 233  "slock-AF_KEY"   , "slock-AF_NETLINK"  , "slock-AF_PACKET"   ,
 234  "slock-AF_ASH"   , "slock-AF_ECONET"   , "slock-AF_ATMSVC"   ,
 235  "slock-AF_RDS"   , "slock-AF_SNA"      , "slock-AF_IRDA"     ,
 236  "slock-AF_PPPOX" , "slock-AF_WANPIPE"  , "slock-AF_LLC"      ,
 237  "slock-27"       , "slock-28"          , "slock-AF_CAN"      ,
 238  "slock-AF_TIPC"  , "slock-AF_BLUETOOTH", "slock-AF_IUCV"     ,
 239  "slock-AF_RXRPC" , "slock-AF_ISDN"     , "slock-AF_PHONET"   ,
 240  "slock-AF_IEEE802154", "slock-AF_CAIF" , "slock-AF_ALG"      ,
 241  "slock-AF_NFC"   , "slock-AF_VSOCK"    ,"slock-AF_KCM"       ,
 242  "slock-AF_QIPCRTR", "slock-AF_MAX"
 243};
 244static const char *const af_family_clock_key_strings[AF_MAX+1] = {
 245  "clock-AF_UNSPEC", "clock-AF_UNIX"     , "clock-AF_INET"     ,
 246  "clock-AF_AX25"  , "clock-AF_IPX"      , "clock-AF_APPLETALK",
 247  "clock-AF_NETROM", "clock-AF_BRIDGE"   , "clock-AF_ATMPVC"   ,
 248  "clock-AF_X25"   , "clock-AF_INET6"    , "clock-AF_ROSE"     ,
 249  "clock-AF_DECnet", "clock-AF_NETBEUI"  , "clock-AF_SECURITY" ,
 250  "clock-AF_KEY"   , "clock-AF_NETLINK"  , "clock-AF_PACKET"   ,
 251  "clock-AF_ASH"   , "clock-AF_ECONET"   , "clock-AF_ATMSVC"   ,
 252  "clock-AF_RDS"   , "clock-AF_SNA"      , "clock-AF_IRDA"     ,
 253  "clock-AF_PPPOX" , "clock-AF_WANPIPE"  , "clock-AF_LLC"      ,
 254  "clock-27"       , "clock-28"          , "clock-AF_CAN"      ,
 255  "clock-AF_TIPC"  , "clock-AF_BLUETOOTH", "clock-AF_IUCV"     ,
 256  "clock-AF_RXRPC" , "clock-AF_ISDN"     , "clock-AF_PHONET"   ,
 257  "clock-AF_IEEE802154", "clock-AF_CAIF" , "clock-AF_ALG"      ,
 258  "clock-AF_NFC"   , "clock-AF_VSOCK"    , "clock-AF_KCM"      ,
 259  "clock-AF_QIPCRTR", "clock-AF_MAX"
 
 
 
 
 
 260};
 261
 262/*
 263 * sk_callback_lock locking rules are per-address-family,
 264 * so split the lock classes by using a per-AF key:
 265 */
 266static struct lock_class_key af_callback_keys[AF_MAX];
 267
 268/* Take into consideration the size of the struct sk_buff overhead in the
 269 * determination of these values, since that is non-constant across
 270 * platforms.  This makes socket queueing behavior and performance
 271 * not depend upon such differences.
 272 */
 273#define _SK_MEM_PACKETS		256
 274#define _SK_MEM_OVERHEAD	SKB_TRUESIZE(256)
 275#define SK_WMEM_MAX		(_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
 276#define SK_RMEM_MAX		(_SK_MEM_OVERHEAD * _SK_MEM_PACKETS)
 277
 278/* Run time adjustable parameters. */
 279__u32 sysctl_wmem_max __read_mostly = SK_WMEM_MAX;
 280EXPORT_SYMBOL(sysctl_wmem_max);
 281__u32 sysctl_rmem_max __read_mostly = SK_RMEM_MAX;
 282EXPORT_SYMBOL(sysctl_rmem_max);
 283__u32 sysctl_wmem_default __read_mostly = SK_WMEM_MAX;
 284__u32 sysctl_rmem_default __read_mostly = SK_RMEM_MAX;
 285
 286/* Maximal space eaten by iovec or ancillary data plus some space */
 287int sysctl_optmem_max __read_mostly = sizeof(unsigned long)*(2*UIO_MAXIOV+512);
 288EXPORT_SYMBOL(sysctl_optmem_max);
 289
 290int sysctl_tstamp_allow_data __read_mostly = 1;
 291
 292struct static_key memalloc_socks = STATIC_KEY_INIT_FALSE;
 293EXPORT_SYMBOL_GPL(memalloc_socks);
 294
 295/**
 296 * sk_set_memalloc - sets %SOCK_MEMALLOC
 297 * @sk: socket to set it on
 298 *
 299 * Set %SOCK_MEMALLOC on a socket for access to emergency reserves.
 300 * It's the responsibility of the admin to adjust min_free_kbytes
 301 * to meet the requirements
 302 */
 303void sk_set_memalloc(struct sock *sk)
 304{
 305	sock_set_flag(sk, SOCK_MEMALLOC);
 306	sk->sk_allocation |= __GFP_MEMALLOC;
 307	static_key_slow_inc(&memalloc_socks);
 308}
 309EXPORT_SYMBOL_GPL(sk_set_memalloc);
 310
 311void sk_clear_memalloc(struct sock *sk)
 312{
 313	sock_reset_flag(sk, SOCK_MEMALLOC);
 314	sk->sk_allocation &= ~__GFP_MEMALLOC;
 315	static_key_slow_dec(&memalloc_socks);
 316
 317	/*
 318	 * SOCK_MEMALLOC is allowed to ignore rmem limits to ensure forward
 319	 * progress of swapping. SOCK_MEMALLOC may be cleared while
 320	 * it has rmem allocations due to the last swapfile being deactivated
 321	 * but there is a risk that the socket is unusable due to exceeding
 322	 * the rmem limits. Reclaim the reserves and obey rmem limits again.
 323	 */
 324	sk_mem_reclaim(sk);
 325}
 326EXPORT_SYMBOL_GPL(sk_clear_memalloc);
 327
 328int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
 329{
 330	int ret;
 331	unsigned long pflags = current->flags;
 332
 333	/* these should have been dropped before queueing */
 334	BUG_ON(!sock_flag(sk, SOCK_MEMALLOC));
 335
 336	current->flags |= PF_MEMALLOC;
 337	ret = sk->sk_backlog_rcv(sk, skb);
 338	tsk_restore_flags(current, pflags, PF_MEMALLOC);
 339
 340	return ret;
 341}
 342EXPORT_SYMBOL(__sk_backlog_rcv);
 343
 344static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen)
 345{
 346	struct timeval tv;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 347
 348	if (optlen < sizeof(tv))
 349		return -EINVAL;
 350	if (copy_from_user(&tv, optval, sizeof(tv)))
 351		return -EFAULT;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 352	if (tv.tv_usec < 0 || tv.tv_usec >= USEC_PER_SEC)
 353		return -EDOM;
 354
 355	if (tv.tv_sec < 0) {
 356		static int warned __read_mostly;
 357
 358		*timeo_p = 0;
 359		if (warned < 10 && net_ratelimit()) {
 360			warned++;
 361			pr_info("%s: `%s' (pid %d) tries to set negative timeout\n",
 362				__func__, current->comm, task_pid_nr(current));
 363		}
 364		return 0;
 365	}
 366	*timeo_p = MAX_SCHEDULE_TIMEOUT;
 367	if (tv.tv_sec == 0 && tv.tv_usec == 0)
 368		return 0;
 369	if (tv.tv_sec < (MAX_SCHEDULE_TIMEOUT/HZ - 1))
 370		*timeo_p = tv.tv_sec*HZ + (tv.tv_usec+(1000000/HZ-1))/(1000000/HZ);
 371	return 0;
 372}
 373
 374static void sock_warn_obsolete_bsdism(const char *name)
 375{
 376	static int warned;
 377	static char warncomm[TASK_COMM_LEN];
 378	if (strcmp(warncomm, current->comm) && warned < 5) {
 379		strcpy(warncomm,  current->comm);
 380		pr_warn("process `%s' is using obsolete %s SO_BSDCOMPAT\n",
 381			warncomm, name);
 382		warned++;
 383	}
 384}
 385
 386static bool sock_needs_netstamp(const struct sock *sk)
 387{
 388	switch (sk->sk_family) {
 389	case AF_UNSPEC:
 390	case AF_UNIX:
 391		return false;
 392	default:
 393		return true;
 394	}
 395}
 396
 397static void sock_disable_timestamp(struct sock *sk, unsigned long flags)
 398{
 399	if (sk->sk_flags & flags) {
 400		sk->sk_flags &= ~flags;
 401		if (sock_needs_netstamp(sk) &&
 402		    !(sk->sk_flags & SK_FLAGS_TIMESTAMP))
 403			net_disable_timestamp();
 404	}
 405}
 406
 407
 408int __sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 409{
 410	unsigned long flags;
 411	struct sk_buff_head *list = &sk->sk_receive_queue;
 412
 413	if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) {
 414		atomic_inc(&sk->sk_drops);
 415		trace_sock_rcvqueue_full(sk, skb);
 416		return -ENOMEM;
 417	}
 418
 419	if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
 420		atomic_inc(&sk->sk_drops);
 421		return -ENOBUFS;
 422	}
 423
 424	skb->dev = NULL;
 425	skb_set_owner_r(skb, sk);
 426
 427	/* we escape from rcu protected region, make sure we dont leak
 428	 * a norefcounted dst
 429	 */
 430	skb_dst_force(skb);
 431
 432	spin_lock_irqsave(&list->lock, flags);
 433	sock_skb_set_dropcount(sk, skb);
 434	__skb_queue_tail(list, skb);
 435	spin_unlock_irqrestore(&list->lock, flags);
 436
 437	if (!sock_flag(sk, SOCK_DEAD))
 438		sk->sk_data_ready(sk);
 439	return 0;
 440}
 441EXPORT_SYMBOL(__sock_queue_rcv_skb);
 442
 443int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 444{
 445	int err;
 446
 447	err = sk_filter(sk, skb);
 448	if (err)
 449		return err;
 450
 451	return __sock_queue_rcv_skb(sk, skb);
 452}
 453EXPORT_SYMBOL(sock_queue_rcv_skb);
 454
 455int __sk_receive_skb(struct sock *sk, struct sk_buff *skb,
 456		     const int nested, unsigned int trim_cap, bool refcounted)
 457{
 458	int rc = NET_RX_SUCCESS;
 459
 460	if (sk_filter_trim_cap(sk, skb, trim_cap))
 461		goto discard_and_relse;
 462
 463	skb->dev = NULL;
 464
 465	if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
 466		atomic_inc(&sk->sk_drops);
 467		goto discard_and_relse;
 468	}
 469	if (nested)
 470		bh_lock_sock_nested(sk);
 471	else
 472		bh_lock_sock(sk);
 473	if (!sock_owned_by_user(sk)) {
 474		/*
 475		 * trylock + unlock semantics:
 476		 */
 477		mutex_acquire(&sk->sk_lock.dep_map, 0, 1, _RET_IP_);
 478
 479		rc = sk_backlog_rcv(sk, skb);
 480
 481		mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
 482	} else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
 483		bh_unlock_sock(sk);
 484		atomic_inc(&sk->sk_drops);
 485		goto discard_and_relse;
 486	}
 487
 488	bh_unlock_sock(sk);
 489out:
 490	if (refcounted)
 491		sock_put(sk);
 492	return rc;
 493discard_and_relse:
 494	kfree_skb(skb);
 495	goto out;
 496}
 497EXPORT_SYMBOL(__sk_receive_skb);
 498
 499struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
 500{
 501	struct dst_entry *dst = __sk_dst_get(sk);
 502
 503	if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
 504		sk_tx_queue_clear(sk);
 
 505		RCU_INIT_POINTER(sk->sk_dst_cache, NULL);
 506		dst_release(dst);
 507		return NULL;
 508	}
 509
 510	return dst;
 511}
 512EXPORT_SYMBOL(__sk_dst_check);
 513
 514struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie)
 515{
 516	struct dst_entry *dst = sk_dst_get(sk);
 517
 518	if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
 519		sk_dst_reset(sk);
 520		dst_release(dst);
 521		return NULL;
 522	}
 523
 524	return dst;
 525}
 526EXPORT_SYMBOL(sk_dst_check);
 527
 528static int sock_setbindtodevice(struct sock *sk, char __user *optval,
 529				int optlen)
 530{
 531	int ret = -ENOPROTOOPT;
 532#ifdef CONFIG_NETDEVICES
 533	struct net *net = sock_net(sk);
 534	char devname[IFNAMSIZ];
 535	int index;
 536
 537	/* Sorry... */
 538	ret = -EPERM;
 539	if (!ns_capable(net->user_ns, CAP_NET_RAW))
 540		goto out;
 541
 542	ret = -EINVAL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 543	if (optlen < 0)
 544		goto out;
 545
 546	/* Bind this socket to a particular device like "eth0",
 547	 * as specified in the passed interface name. If the
 548	 * name is "" or the option length is zero the socket
 549	 * is not bound.
 550	 */
 551	if (optlen > IFNAMSIZ - 1)
 552		optlen = IFNAMSIZ - 1;
 553	memset(devname, 0, sizeof(devname));
 554
 555	ret = -EFAULT;
 556	if (copy_from_user(devname, optval, optlen))
 557		goto out;
 558
 559	index = 0;
 560	if (devname[0] != '\0') {
 561		struct net_device *dev;
 562
 563		rcu_read_lock();
 564		dev = dev_get_by_name_rcu(net, devname);
 565		if (dev)
 566			index = dev->ifindex;
 567		rcu_read_unlock();
 568		ret = -ENODEV;
 569		if (!dev)
 570			goto out;
 571	}
 572
 573	lock_sock(sk);
 574	sk->sk_bound_dev_if = index;
 575	sk_dst_reset(sk);
 576	release_sock(sk);
 577
 578	ret = 0;
 579
 580out:
 581#endif
 582
 583	return ret;
 584}
 585
 586static int sock_getbindtodevice(struct sock *sk, char __user *optval,
 587				int __user *optlen, int len)
 588{
 589	int ret = -ENOPROTOOPT;
 590#ifdef CONFIG_NETDEVICES
 591	struct net *net = sock_net(sk);
 592	char devname[IFNAMSIZ];
 593
 594	if (sk->sk_bound_dev_if == 0) {
 595		len = 0;
 596		goto zero;
 597	}
 598
 599	ret = -EINVAL;
 600	if (len < IFNAMSIZ)
 601		goto out;
 602
 603	ret = netdev_get_name(net, devname, sk->sk_bound_dev_if);
 604	if (ret)
 605		goto out;
 606
 607	len = strlen(devname) + 1;
 608
 609	ret = -EFAULT;
 610	if (copy_to_user(optval, devname, len))
 611		goto out;
 612
 613zero:
 614	ret = -EFAULT;
 615	if (put_user(len, optlen))
 616		goto out;
 617
 618	ret = 0;
 619
 620out:
 621#endif
 622
 623	return ret;
 624}
 625
 626static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool)
 627{
 628	if (valbool)
 629		sock_set_flag(sk, bit);
 630	else
 631		sock_reset_flag(sk, bit);
 632}
 633
 634bool sk_mc_loop(struct sock *sk)
 635{
 636	if (dev_recursion_level())
 637		return false;
 638	if (!sk)
 639		return true;
 640	switch (sk->sk_family) {
 641	case AF_INET:
 642		return inet_sk(sk)->mc_loop;
 643#if IS_ENABLED(CONFIG_IPV6)
 644	case AF_INET6:
 645		return inet6_sk(sk)->mc_loop;
 646#endif
 647	}
 648	WARN_ON(1);
 649	return true;
 650}
 651EXPORT_SYMBOL(sk_mc_loop);
 652
 653/*
 654 *	This is meant for all protocols to use and covers goings on
 655 *	at the socket level. Everything here is generic.
 656 */
 657
 658int sock_setsockopt(struct socket *sock, int level, int optname,
 659		    char __user *optval, unsigned int optlen)
 660{
 
 661	struct sock *sk = sock->sk;
 662	int val;
 663	int valbool;
 664	struct linger ling;
 665	int ret = 0;
 666
 667	/*
 668	 *	Options without arguments
 669	 */
 670
 671	if (optname == SO_BINDTODEVICE)
 672		return sock_setbindtodevice(sk, optval, optlen);
 673
 674	if (optlen < sizeof(int))
 675		return -EINVAL;
 676
 677	if (get_user(val, (int __user *)optval))
 678		return -EFAULT;
 679
 680	valbool = val ? 1 : 0;
 681
 682	lock_sock(sk);
 683
 684	switch (optname) {
 685	case SO_DEBUG:
 686		if (val && !capable(CAP_NET_ADMIN))
 687			ret = -EACCES;
 688		else
 689			sock_valbool_flag(sk, SOCK_DBG, valbool);
 690		break;
 691	case SO_REUSEADDR:
 692		sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
 693		break;
 694	case SO_REUSEPORT:
 695		sk->sk_reuseport = valbool;
 696		break;
 697	case SO_TYPE:
 698	case SO_PROTOCOL:
 699	case SO_DOMAIN:
 700	case SO_ERROR:
 701		ret = -ENOPROTOOPT;
 702		break;
 703	case SO_DONTROUTE:
 704		sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
 
 705		break;
 706	case SO_BROADCAST:
 707		sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
 708		break;
 709	case SO_SNDBUF:
 710		/* Don't error on this BSD doesn't and if you think
 711		 * about it this is right. Otherwise apps have to
 712		 * play 'guess the biggest size' games. RCVBUF/SNDBUF
 713		 * are treated in BSD as hints
 714		 */
 715		val = min_t(u32, val, sysctl_wmem_max);
 716set_sndbuf:
 
 
 
 
 717		sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
 718		sk->sk_sndbuf = max_t(int, val * 2, SOCK_MIN_SNDBUF);
 
 719		/* Wake up sending tasks if we upped the value. */
 720		sk->sk_write_space(sk);
 721		break;
 722
 723	case SO_SNDBUFFORCE:
 724		if (!capable(CAP_NET_ADMIN)) {
 725			ret = -EPERM;
 726			break;
 727		}
 
 
 
 
 
 
 728		goto set_sndbuf;
 729
 730	case SO_RCVBUF:
 731		/* Don't error on this BSD doesn't and if you think
 732		 * about it this is right. Otherwise apps have to
 733		 * play 'guess the biggest size' games. RCVBUF/SNDBUF
 734		 * are treated in BSD as hints
 735		 */
 736		val = min_t(u32, val, sysctl_rmem_max);
 737set_rcvbuf:
 
 
 
 
 738		sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
 739		/*
 740		 * We double it on the way in to account for
 741		 * "struct sk_buff" etc. overhead.   Applications
 742		 * assume that the SO_RCVBUF setting they make will
 743		 * allow that much actual data to be received on that
 744		 * socket.
 745		 *
 746		 * Applications are unaware that "struct sk_buff" and
 747		 * other overheads allocate from the receive buffer
 748		 * during socket buffer allocation.
 749		 *
 750		 * And after considering the possible alternatives,
 751		 * returning the value we actually used in getsockopt
 752		 * is the most desirable behavior.
 753		 */
 754		sk->sk_rcvbuf = max_t(int, val * 2, SOCK_MIN_RCVBUF);
 
 755		break;
 756
 757	case SO_RCVBUFFORCE:
 758		if (!capable(CAP_NET_ADMIN)) {
 759			ret = -EPERM;
 760			break;
 761		}
 
 
 
 
 
 
 762		goto set_rcvbuf;
 763
 764	case SO_KEEPALIVE:
 765#ifdef CONFIG_INET
 766		if (sk->sk_protocol == IPPROTO_TCP &&
 767		    sk->sk_type == SOCK_STREAM)
 768			tcp_set_keepalive(sk, valbool);
 769#endif
 770		sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
 771		break;
 772
 773	case SO_OOBINLINE:
 774		sock_valbool_flag(sk, SOCK_URGINLINE, valbool);
 775		break;
 776
 777	case SO_NO_CHECK:
 778		sk->sk_no_check_tx = valbool;
 779		break;
 780
 781	case SO_PRIORITY:
 782		if ((val >= 0 && val <= 6) ||
 783		    ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
 784			sk->sk_priority = val;
 785		else
 786			ret = -EPERM;
 787		break;
 788
 789	case SO_LINGER:
 790		if (optlen < sizeof(ling)) {
 791			ret = -EINVAL;	/* 1003.1g */
 792			break;
 793		}
 794		if (copy_from_user(&ling, optval, sizeof(ling))) {
 795			ret = -EFAULT;
 796			break;
 797		}
 798		if (!ling.l_onoff)
 799			sock_reset_flag(sk, SOCK_LINGER);
 800		else {
 801#if (BITS_PER_LONG == 32)
 802			if ((unsigned int)ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
 803				sk->sk_lingertime = MAX_SCHEDULE_TIMEOUT;
 804			else
 805#endif
 806				sk->sk_lingertime = (unsigned int)ling.l_linger * HZ;
 807			sock_set_flag(sk, SOCK_LINGER);
 808		}
 809		break;
 810
 811	case SO_BSDCOMPAT:
 812		sock_warn_obsolete_bsdism("setsockopt");
 813		break;
 814
 815	case SO_PASSCRED:
 816		if (valbool)
 817			set_bit(SOCK_PASSCRED, &sock->flags);
 818		else
 819			clear_bit(SOCK_PASSCRED, &sock->flags);
 820		break;
 821
 822	case SO_TIMESTAMP:
 823	case SO_TIMESTAMPNS:
 
 
 824		if (valbool)  {
 825			if (optname == SO_TIMESTAMP)
 
 
 
 
 
 826				sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
 827			else
 828				sock_set_flag(sk, SOCK_RCVTSTAMPNS);
 829			sock_set_flag(sk, SOCK_RCVTSTAMP);
 830			sock_enable_timestamp(sk, SOCK_TIMESTAMP);
 831		} else {
 832			sock_reset_flag(sk, SOCK_RCVTSTAMP);
 833			sock_reset_flag(sk, SOCK_RCVTSTAMPNS);
 
 834		}
 835		break;
 836
 837	case SO_TIMESTAMPING:
 
 
 
 838		if (val & ~SOF_TIMESTAMPING_MASK) {
 839			ret = -EINVAL;
 840			break;
 841		}
 842
 843		if (val & SOF_TIMESTAMPING_OPT_ID &&
 844		    !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) {
 845			if (sk->sk_protocol == IPPROTO_TCP &&
 846			    sk->sk_type == SOCK_STREAM) {
 847				if ((1 << sk->sk_state) &
 848				    (TCPF_CLOSE | TCPF_LISTEN)) {
 849					ret = -EINVAL;
 850					break;
 851				}
 852				sk->sk_tskey = tcp_sk(sk)->snd_una;
 853			} else {
 854				sk->sk_tskey = 0;
 855			}
 856		}
 857
 858		if (val & SOF_TIMESTAMPING_OPT_STATS &&
 859		    !(val & SOF_TIMESTAMPING_OPT_TSONLY)) {
 860			ret = -EINVAL;
 861			break;
 862		}
 863
 864		sk->sk_tsflags = val;
 865		if (val & SOF_TIMESTAMPING_RX_SOFTWARE)
 866			sock_enable_timestamp(sk,
 867					      SOCK_TIMESTAMPING_RX_SOFTWARE);
 868		else
 
 
 
 869			sock_disable_timestamp(sk,
 870					       (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE));
 
 871		break;
 872
 873	case SO_RCVLOWAT:
 874		if (val < 0)
 875			val = INT_MAX;
 876		sk->sk_rcvlowat = val ? : 1;
 
 
 
 877		break;
 878
 879	case SO_RCVTIMEO:
 880		ret = sock_set_timeout(&sk->sk_rcvtimeo, optval, optlen);
 
 881		break;
 882
 883	case SO_SNDTIMEO:
 884		ret = sock_set_timeout(&sk->sk_sndtimeo, optval, optlen);
 
 885		break;
 886
 887	case SO_ATTACH_FILTER:
 888		ret = -EINVAL;
 889		if (optlen == sizeof(struct sock_fprog)) {
 890			struct sock_fprog fprog;
 891
 892			ret = -EFAULT;
 893			if (copy_from_user(&fprog, optval, sizeof(fprog)))
 894				break;
 895
 896			ret = sk_attach_filter(&fprog, sk);
 897		}
 898		break;
 899
 900	case SO_ATTACH_BPF:
 901		ret = -EINVAL;
 902		if (optlen == sizeof(u32)) {
 903			u32 ufd;
 904
 905			ret = -EFAULT;
 906			if (copy_from_user(&ufd, optval, sizeof(ufd)))
 907				break;
 908
 909			ret = sk_attach_bpf(ufd, sk);
 910		}
 911		break;
 912
 913	case SO_ATTACH_REUSEPORT_CBPF:
 914		ret = -EINVAL;
 915		if (optlen == sizeof(struct sock_fprog)) {
 916			struct sock_fprog fprog;
 917
 918			ret = -EFAULT;
 919			if (copy_from_user(&fprog, optval, sizeof(fprog)))
 920				break;
 921
 922			ret = sk_reuseport_attach_filter(&fprog, sk);
 923		}
 924		break;
 925
 926	case SO_ATTACH_REUSEPORT_EBPF:
 927		ret = -EINVAL;
 928		if (optlen == sizeof(u32)) {
 929			u32 ufd;
 930
 931			ret = -EFAULT;
 932			if (copy_from_user(&ufd, optval, sizeof(ufd)))
 933				break;
 934
 935			ret = sk_reuseport_attach_bpf(ufd, sk);
 936		}
 937		break;
 938
 
 
 
 
 939	case SO_DETACH_FILTER:
 940		ret = sk_detach_filter(sk);
 941		break;
 942
 943	case SO_LOCK_FILTER:
 944		if (sock_flag(sk, SOCK_FILTER_LOCKED) && !valbool)
 945			ret = -EPERM;
 946		else
 947			sock_valbool_flag(sk, SOCK_FILTER_LOCKED, valbool);
 948		break;
 949
 950	case SO_PASSSEC:
 951		if (valbool)
 952			set_bit(SOCK_PASSSEC, &sock->flags);
 953		else
 954			clear_bit(SOCK_PASSSEC, &sock->flags);
 955		break;
 956	case SO_MARK:
 957		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
 958			ret = -EPERM;
 959		else
 960			sk->sk_mark = val;
 
 
 961		break;
 962
 963	case SO_RXQ_OVFL:
 964		sock_valbool_flag(sk, SOCK_RXQ_OVFL, valbool);
 965		break;
 966
 967	case SO_WIFI_STATUS:
 968		sock_valbool_flag(sk, SOCK_WIFI_STATUS, valbool);
 969		break;
 970
 971	case SO_PEEK_OFF:
 972		if (sock->ops->set_peek_off)
 973			ret = sock->ops->set_peek_off(sk, val);
 974		else
 975			ret = -EOPNOTSUPP;
 976		break;
 977
 978	case SO_NOFCS:
 979		sock_valbool_flag(sk, SOCK_NOFCS, valbool);
 980		break;
 981
 982	case SO_SELECT_ERR_QUEUE:
 983		sock_valbool_flag(sk, SOCK_SELECT_ERR_QUEUE, valbool);
 984		break;
 985
 986#ifdef CONFIG_NET_RX_BUSY_POLL
 987	case SO_BUSY_POLL:
 988		/* allow unprivileged users to decrease the value */
 989		if ((val > sk->sk_ll_usec) && !capable(CAP_NET_ADMIN))
 990			ret = -EPERM;
 991		else {
 992			if (val < 0)
 993				ret = -EINVAL;
 994			else
 995				sk->sk_ll_usec = val;
 996		}
 997		break;
 998#endif
 999
1000	case SO_MAX_PACING_RATE:
1001		sk->sk_max_pacing_rate = val;
1002		sk->sk_pacing_rate = min(sk->sk_pacing_rate,
1003					 sk->sk_max_pacing_rate);
 
 
 
 
 
 
 
 
 
 
 
 
1004		break;
1005
1006	case SO_INCOMING_CPU:
1007		sk->sk_incoming_cpu = val;
1008		break;
1009
1010	case SO_CNX_ADVICE:
1011		if (val == 1)
1012			dst_negative_advice(sk);
1013		break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1014	default:
1015		ret = -ENOPROTOOPT;
1016		break;
1017	}
1018	release_sock(sk);
1019	return ret;
1020}
1021EXPORT_SYMBOL(sock_setsockopt);
1022
1023
1024static void cred_to_ucred(struct pid *pid, const struct cred *cred,
1025			  struct ucred *ucred)
1026{
1027	ucred->pid = pid_vnr(pid);
1028	ucred->uid = ucred->gid = -1;
1029	if (cred) {
1030		struct user_namespace *current_ns = current_user_ns();
1031
1032		ucred->uid = from_kuid_munged(current_ns, cred->euid);
1033		ucred->gid = from_kgid_munged(current_ns, cred->egid);
1034	}
1035}
1036
 
 
 
 
 
 
 
 
 
 
 
 
1037int sock_getsockopt(struct socket *sock, int level, int optname,
1038		    char __user *optval, int __user *optlen)
1039{
1040	struct sock *sk = sock->sk;
1041
1042	union {
1043		int val;
 
 
1044		struct linger ling;
1045		struct timeval tm;
 
 
 
1046	} v;
1047
1048	int lv = sizeof(int);
1049	int len;
1050
1051	if (get_user(len, optlen))
1052		return -EFAULT;
1053	if (len < 0)
1054		return -EINVAL;
1055
1056	memset(&v, 0, sizeof(v));
1057
1058	switch (optname) {
1059	case SO_DEBUG:
1060		v.val = sock_flag(sk, SOCK_DBG);
1061		break;
1062
1063	case SO_DONTROUTE:
1064		v.val = sock_flag(sk, SOCK_LOCALROUTE);
1065		break;
1066
1067	case SO_BROADCAST:
1068		v.val = sock_flag(sk, SOCK_BROADCAST);
1069		break;
1070
1071	case SO_SNDBUF:
1072		v.val = sk->sk_sndbuf;
1073		break;
1074
1075	case SO_RCVBUF:
1076		v.val = sk->sk_rcvbuf;
1077		break;
1078
1079	case SO_REUSEADDR:
1080		v.val = sk->sk_reuse;
1081		break;
1082
1083	case SO_REUSEPORT:
1084		v.val = sk->sk_reuseport;
1085		break;
1086
1087	case SO_KEEPALIVE:
1088		v.val = sock_flag(sk, SOCK_KEEPOPEN);
1089		break;
1090
1091	case SO_TYPE:
1092		v.val = sk->sk_type;
1093		break;
1094
1095	case SO_PROTOCOL:
1096		v.val = sk->sk_protocol;
1097		break;
1098
1099	case SO_DOMAIN:
1100		v.val = sk->sk_family;
1101		break;
1102
1103	case SO_ERROR:
1104		v.val = -sock_error(sk);
1105		if (v.val == 0)
1106			v.val = xchg(&sk->sk_err_soft, 0);
1107		break;
1108
1109	case SO_OOBINLINE:
1110		v.val = sock_flag(sk, SOCK_URGINLINE);
1111		break;
1112
1113	case SO_NO_CHECK:
1114		v.val = sk->sk_no_check_tx;
1115		break;
1116
1117	case SO_PRIORITY:
1118		v.val = sk->sk_priority;
1119		break;
1120
1121	case SO_LINGER:
1122		lv		= sizeof(v.ling);
1123		v.ling.l_onoff	= sock_flag(sk, SOCK_LINGER);
1124		v.ling.l_linger	= sk->sk_lingertime / HZ;
1125		break;
1126
1127	case SO_BSDCOMPAT:
1128		sock_warn_obsolete_bsdism("getsockopt");
1129		break;
1130
1131	case SO_TIMESTAMP:
1132		v.val = sock_flag(sk, SOCK_RCVTSTAMP) &&
 
1133				!sock_flag(sk, SOCK_RCVTSTAMPNS);
1134		break;
1135
1136	case SO_TIMESTAMPNS:
1137		v.val = sock_flag(sk, SOCK_RCVTSTAMPNS);
 
 
 
 
1138		break;
1139
1140	case SO_TIMESTAMPING:
 
 
 
 
1141		v.val = sk->sk_tsflags;
1142		break;
1143
1144	case SO_RCVTIMEO:
1145		lv = sizeof(struct timeval);
1146		if (sk->sk_rcvtimeo == MAX_SCHEDULE_TIMEOUT) {
1147			v.tm.tv_sec = 0;
1148			v.tm.tv_usec = 0;
1149		} else {
1150			v.tm.tv_sec = sk->sk_rcvtimeo / HZ;
1151			v.tm.tv_usec = ((sk->sk_rcvtimeo % HZ) * 1000000) / HZ;
1152		}
1153		break;
1154
1155	case SO_SNDTIMEO:
1156		lv = sizeof(struct timeval);
1157		if (sk->sk_sndtimeo == MAX_SCHEDULE_TIMEOUT) {
1158			v.tm.tv_sec = 0;
1159			v.tm.tv_usec = 0;
1160		} else {
1161			v.tm.tv_sec = sk->sk_sndtimeo / HZ;
1162			v.tm.tv_usec = ((sk->sk_sndtimeo % HZ) * 1000000) / HZ;
1163		}
1164		break;
1165
1166	case SO_RCVLOWAT:
1167		v.val = sk->sk_rcvlowat;
1168		break;
1169
1170	case SO_SNDLOWAT:
1171		v.val = 1;
1172		break;
1173
1174	case SO_PASSCRED:
1175		v.val = !!test_bit(SOCK_PASSCRED, &sock->flags);
1176		break;
1177
1178	case SO_PEERCRED:
1179	{
1180		struct ucred peercred;
1181		if (len > sizeof(peercred))
1182			len = sizeof(peercred);
1183		cred_to_ucred(sk->sk_peer_pid, sk->sk_peer_cred, &peercred);
1184		if (copy_to_user(optval, &peercred, len))
1185			return -EFAULT;
1186		goto lenout;
1187	}
1188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1189	case SO_PEERNAME:
1190	{
1191		char address[128];
1192
1193		if (sock->ops->getname(sock, (struct sockaddr *)address, &lv, 2))
 
1194			return -ENOTCONN;
1195		if (lv < len)
1196			return -EINVAL;
1197		if (copy_to_user(optval, address, len))
1198			return -EFAULT;
1199		goto lenout;
1200	}
1201
1202	/* Dubious BSD thing... Probably nobody even uses it, but
1203	 * the UNIX standard wants it for whatever reason... -DaveM
1204	 */
1205	case SO_ACCEPTCONN:
1206		v.val = sk->sk_state == TCP_LISTEN;
1207		break;
1208
1209	case SO_PASSSEC:
1210		v.val = !!test_bit(SOCK_PASSSEC, &sock->flags);
1211		break;
1212
1213	case SO_PEERSEC:
1214		return security_socket_getpeersec_stream(sock, optval, optlen, len);
1215
1216	case SO_MARK:
1217		v.val = sk->sk_mark;
1218		break;
1219
1220	case SO_RXQ_OVFL:
1221		v.val = sock_flag(sk, SOCK_RXQ_OVFL);
1222		break;
1223
1224	case SO_WIFI_STATUS:
1225		v.val = sock_flag(sk, SOCK_WIFI_STATUS);
1226		break;
1227
1228	case SO_PEEK_OFF:
1229		if (!sock->ops->set_peek_off)
1230			return -EOPNOTSUPP;
1231
1232		v.val = sk->sk_peek_off;
1233		break;
1234	case SO_NOFCS:
1235		v.val = sock_flag(sk, SOCK_NOFCS);
1236		break;
1237
1238	case SO_BINDTODEVICE:
1239		return sock_getbindtodevice(sk, optval, optlen, len);
1240
1241	case SO_GET_FILTER:
1242		len = sk_get_filter(sk, (struct sock_filter __user *)optval, len);
1243		if (len < 0)
1244			return len;
1245
1246		goto lenout;
1247
1248	case SO_LOCK_FILTER:
1249		v.val = sock_flag(sk, SOCK_FILTER_LOCKED);
1250		break;
1251
1252	case SO_BPF_EXTENSIONS:
1253		v.val = bpf_tell_extensions();
1254		break;
1255
1256	case SO_SELECT_ERR_QUEUE:
1257		v.val = sock_flag(sk, SOCK_SELECT_ERR_QUEUE);
1258		break;
1259
1260#ifdef CONFIG_NET_RX_BUSY_POLL
1261	case SO_BUSY_POLL:
1262		v.val = sk->sk_ll_usec;
1263		break;
1264#endif
1265
1266	case SO_MAX_PACING_RATE:
1267		v.val = sk->sk_max_pacing_rate;
 
 
 
 
 
 
1268		break;
1269
1270	case SO_INCOMING_CPU:
1271		v.val = sk->sk_incoming_cpu;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1272		break;
1273
1274	default:
1275		/* We implement the SO_SNDLOWAT etc to not be settable
1276		 * (1003.1g 7).
1277		 */
1278		return -ENOPROTOOPT;
1279	}
1280
1281	if (len > lv)
1282		len = lv;
1283	if (copy_to_user(optval, &v, len))
1284		return -EFAULT;
1285lenout:
1286	if (put_user(len, optlen))
1287		return -EFAULT;
1288	return 0;
1289}
1290
1291/*
1292 * Initialize an sk_lock.
1293 *
1294 * (We also register the sk_lock with the lock validator.)
1295 */
1296static inline void sock_lock_init(struct sock *sk)
1297{
1298	sock_lock_init_class_and_name(sk,
 
 
 
 
 
 
 
 
 
1299			af_family_slock_key_strings[sk->sk_family],
1300			af_family_slock_keys + sk->sk_family,
1301			af_family_key_strings[sk->sk_family],
1302			af_family_keys + sk->sk_family);
1303}
1304
1305/*
1306 * Copy all fields from osk to nsk but nsk->sk_refcnt must not change yet,
1307 * even temporarly, because of RCU lookups. sk_node should also be left as is.
1308 * We must not copy fields between sk_dontcopy_begin and sk_dontcopy_end
1309 */
1310static void sock_copy(struct sock *nsk, const struct sock *osk)
1311{
1312#ifdef CONFIG_SECURITY_NETWORK
1313	void *sptr = nsk->sk_security;
1314#endif
1315	memcpy(nsk, osk, offsetof(struct sock, sk_dontcopy_begin));
1316
1317	memcpy(&nsk->sk_dontcopy_end, &osk->sk_dontcopy_end,
1318	       osk->sk_prot->obj_size - offsetof(struct sock, sk_dontcopy_end));
1319
1320#ifdef CONFIG_SECURITY_NETWORK
1321	nsk->sk_security = sptr;
1322	security_sk_clone(osk, nsk);
1323#endif
1324}
1325
1326static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority,
1327		int family)
1328{
1329	struct sock *sk;
1330	struct kmem_cache *slab;
1331
1332	slab = prot->slab;
1333	if (slab != NULL) {
1334		sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
1335		if (!sk)
1336			return sk;
1337		if (priority & __GFP_ZERO)
1338			sk_prot_clear_nulls(sk, prot->obj_size);
1339	} else
1340		sk = kmalloc(prot->obj_size, priority);
1341
1342	if (sk != NULL) {
1343		kmemcheck_annotate_bitfield(sk, flags);
1344
1345		if (security_sk_alloc(sk, family, priority))
1346			goto out_free;
1347
1348		if (!try_module_get(prot->owner))
1349			goto out_free_sec;
1350		sk_tx_queue_clear(sk);
1351	}
1352
1353	return sk;
1354
1355out_free_sec:
1356	security_sk_free(sk);
1357out_free:
1358	if (slab != NULL)
1359		kmem_cache_free(slab, sk);
1360	else
1361		kfree(sk);
1362	return NULL;
1363}
1364
1365static void sk_prot_free(struct proto *prot, struct sock *sk)
1366{
1367	struct kmem_cache *slab;
1368	struct module *owner;
1369
1370	owner = prot->owner;
1371	slab = prot->slab;
1372
1373	cgroup_sk_free(&sk->sk_cgrp_data);
1374	mem_cgroup_sk_free(sk);
1375	security_sk_free(sk);
1376	if (slab != NULL)
1377		kmem_cache_free(slab, sk);
1378	else
1379		kfree(sk);
1380	module_put(owner);
1381}
1382
1383/**
1384 *	sk_alloc - All socket objects are allocated here
1385 *	@net: the applicable net namespace
1386 *	@family: protocol family
1387 *	@priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
1388 *	@prot: struct proto associated with this new sock instance
1389 *	@kern: is this to be a kernel socket?
1390 */
1391struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
1392		      struct proto *prot, int kern)
1393{
1394	struct sock *sk;
1395
1396	sk = sk_prot_alloc(prot, priority | __GFP_ZERO, family);
1397	if (sk) {
1398		sk->sk_family = family;
1399		/*
1400		 * See comment in struct sock definition to understand
1401		 * why we need sk_prot_creator -acme
1402		 */
1403		sk->sk_prot = sk->sk_prot_creator = prot;
 
1404		sock_lock_init(sk);
1405		sk->sk_net_refcnt = kern ? 0 : 1;
1406		if (likely(sk->sk_net_refcnt))
1407			get_net(net);
 
 
 
1408		sock_net_set(sk, net);
1409		atomic_set(&sk->sk_wmem_alloc, 1);
1410
1411		mem_cgroup_sk_alloc(sk);
1412		cgroup_sk_alloc(&sk->sk_cgrp_data);
1413		sock_update_classid(&sk->sk_cgrp_data);
1414		sock_update_netprioidx(&sk->sk_cgrp_data);
1415	}
1416
1417	return sk;
1418}
1419EXPORT_SYMBOL(sk_alloc);
1420
1421/* Sockets having SOCK_RCU_FREE will call this function after one RCU
1422 * grace period. This is the case for UDP sockets and TCP listeners.
1423 */
1424static void __sk_destruct(struct rcu_head *head)
1425{
1426	struct sock *sk = container_of(head, struct sock, sk_rcu);
1427	struct sk_filter *filter;
1428
1429	if (sk->sk_destruct)
1430		sk->sk_destruct(sk);
1431
1432	filter = rcu_dereference_check(sk->sk_filter,
1433				       atomic_read(&sk->sk_wmem_alloc) == 0);
1434	if (filter) {
1435		sk_filter_uncharge(sk, filter);
1436		RCU_INIT_POINTER(sk->sk_filter, NULL);
1437	}
1438	if (rcu_access_pointer(sk->sk_reuseport_cb))
1439		reuseport_detach_sock(sk);
1440
1441	sock_disable_timestamp(sk, SK_FLAGS_TIMESTAMP);
1442
 
 
 
 
1443	if (atomic_read(&sk->sk_omem_alloc))
1444		pr_debug("%s: optmem leakage (%d bytes) detected\n",
1445			 __func__, atomic_read(&sk->sk_omem_alloc));
1446
1447	if (sk->sk_frag.page) {
1448		put_page(sk->sk_frag.page);
1449		sk->sk_frag.page = NULL;
1450	}
1451
1452	if (sk->sk_peer_cred)
1453		put_cred(sk->sk_peer_cred);
1454	put_pid(sk->sk_peer_pid);
1455	if (likely(sk->sk_net_refcnt))
1456		put_net(sock_net(sk));
1457	sk_prot_free(sk->sk_prot_creator, sk);
1458}
1459
1460void sk_destruct(struct sock *sk)
1461{
1462	if (sock_flag(sk, SOCK_RCU_FREE))
 
 
 
 
 
 
 
1463		call_rcu(&sk->sk_rcu, __sk_destruct);
1464	else
1465		__sk_destruct(&sk->sk_rcu);
1466}
1467
1468static void __sk_free(struct sock *sk)
1469{
1470	if (unlikely(sock_diag_has_destroy_listeners(sk) && sk->sk_net_refcnt))
 
 
 
1471		sock_diag_broadcast_destroy(sk);
1472	else
1473		sk_destruct(sk);
1474}
1475
1476void sk_free(struct sock *sk)
1477{
1478	/*
1479	 * We subtract one from sk_wmem_alloc and can know if
1480	 * some packets are still in some tx queue.
1481	 * If not null, sock_wfree() will call __sk_free(sk) later
1482	 */
1483	if (atomic_dec_and_test(&sk->sk_wmem_alloc))
1484		__sk_free(sk);
1485}
1486EXPORT_SYMBOL(sk_free);
1487
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1488/**
1489 *	sk_clone_lock - clone a socket, and lock its clone
1490 *	@sk: the socket to clone
1491 *	@priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
1492 *
1493 *	Caller must unlock socket even in error path (bh_unlock_sock(newsk))
1494 */
1495struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
1496{
1497	struct sock *newsk;
1498	bool is_charged = true;
1499
1500	newsk = sk_prot_alloc(sk->sk_prot, priority, sk->sk_family);
1501	if (newsk != NULL) {
1502		struct sk_filter *filter;
1503
1504		sock_copy(newsk, sk);
1505
 
 
1506		/* SANITY */
1507		if (likely(newsk->sk_net_refcnt))
1508			get_net(sock_net(newsk));
1509		sk_node_init(&newsk->sk_node);
1510		sock_lock_init(newsk);
1511		bh_lock_sock(newsk);
1512		newsk->sk_backlog.head	= newsk->sk_backlog.tail = NULL;
1513		newsk->sk_backlog.len = 0;
1514
1515		atomic_set(&newsk->sk_rmem_alloc, 0);
1516		/*
1517		 * sk_wmem_alloc set to one (see sk_free() and sock_wfree())
1518		 */
1519		atomic_set(&newsk->sk_wmem_alloc, 1);
1520		atomic_set(&newsk->sk_omem_alloc, 0);
1521		skb_queue_head_init(&newsk->sk_receive_queue);
1522		skb_queue_head_init(&newsk->sk_write_queue);
1523
1524		rwlock_init(&newsk->sk_callback_lock);
1525		lockdep_set_class_and_name(&newsk->sk_callback_lock,
1526				af_callback_keys + newsk->sk_family,
1527				af_family_clock_key_strings[newsk->sk_family]);
1528
1529		newsk->sk_dst_cache	= NULL;
 
1530		newsk->sk_wmem_queued	= 0;
1531		newsk->sk_forward_alloc = 0;
1532		atomic_set(&newsk->sk_drops, 0);
1533		newsk->sk_send_head	= NULL;
1534		newsk->sk_userlocks	= sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
 
1535
1536		sock_reset_flag(newsk, SOCK_DONE);
1537		skb_queue_head_init(&newsk->sk_error_queue);
 
1538
1539		filter = rcu_dereference_protected(newsk->sk_filter, 1);
 
1540		if (filter != NULL)
1541			/* though it's an empty new sock, the charging may fail
1542			 * if sysctl_optmem_max was changed between creation of
1543			 * original socket and cloning
1544			 */
1545			is_charged = sk_filter_charge(newsk, filter);
 
 
1546
1547		if (unlikely(!is_charged || xfrm_sk_clone_policy(newsk, sk))) {
1548			/* We need to make sure that we don't uncharge the new
1549			 * socket if we couldn't charge it in the first place
1550			 * as otherwise we uncharge the parent's filter.
1551			 */
1552			if (!is_charged)
1553				RCU_INIT_POINTER(newsk->sk_filter, NULL);
1554			/* It is still raw copy of parent, so invalidate
1555			 * destructor and make plain sk_free() */
1556			newsk->sk_destruct = NULL;
1557			bh_unlock_sock(newsk);
1558			sk_free(newsk);
1559			newsk = NULL;
1560			goto out;
1561		}
1562		RCU_INIT_POINTER(newsk->sk_reuseport_cb, NULL);
1563
 
 
 
 
 
 
1564		newsk->sk_err	   = 0;
1565		newsk->sk_err_soft = 0;
1566		newsk->sk_priority = 0;
1567		newsk->sk_incoming_cpu = raw_smp_processor_id();
1568		atomic64_set(&newsk->sk_cookie, 0);
1569
1570		mem_cgroup_sk_alloc(newsk);
1571		cgroup_sk_alloc(&newsk->sk_cgrp_data);
1572
1573		/*
1574		 * Before updating sk_refcnt, we must commit prior changes to memory
1575		 * (Documentation/RCU/rculist_nulls.txt for details)
1576		 */
1577		smp_wmb();
1578		atomic_set(&newsk->sk_refcnt, 2);
1579
1580		/*
1581		 * Increment the counter in the same struct proto as the master
1582		 * sock (sk_refcnt_debug_inc uses newsk->sk_prot->socks, that
1583		 * is the same as sk->sk_prot->socks, as this field was copied
1584		 * with memcpy).
1585		 *
1586		 * This _changes_ the previous behaviour, where
1587		 * tcp_create_openreq_child always was incrementing the
1588		 * equivalent to tcp_prot->socks (inet_sock_nr), so this have
1589		 * to be taken into account in all callers. -acme
1590		 */
1591		sk_refcnt_debug_inc(newsk);
1592		sk_set_socket(newsk, NULL);
1593		newsk->sk_wq = NULL;
1594
1595		if (newsk->sk_prot->sockets_allocated)
1596			sk_sockets_allocated_inc(newsk);
1597
1598		if (sock_needs_netstamp(sk) &&
1599		    newsk->sk_flags & SK_FLAGS_TIMESTAMP)
1600			net_enable_timestamp();
1601	}
1602out:
1603	return newsk;
1604}
1605EXPORT_SYMBOL_GPL(sk_clone_lock);
1606
 
 
 
 
 
 
 
 
 
 
1607void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
1608{
1609	u32 max_segs = 1;
1610
1611	sk_dst_set(sk, dst);
1612	sk->sk_route_caps = dst->dev->features;
1613	if (sk->sk_route_caps & NETIF_F_GSO)
1614		sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE;
1615	sk->sk_route_caps &= ~sk->sk_route_nocaps;
1616	if (sk_can_gso(sk)) {
1617		if (dst->header_len) {
1618			sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
1619		} else {
1620			sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
1621			sk->sk_gso_max_size = dst->dev->gso_max_size;
1622			max_segs = max_t(u32, dst->dev->gso_max_segs, 1);
1623		}
1624	}
1625	sk->sk_gso_max_segs = max_segs;
1626}
1627EXPORT_SYMBOL_GPL(sk_setup_caps);
1628
1629/*
1630 *	Simple resource managers for sockets.
1631 */
1632
1633
1634/*
1635 * Write buffer destructor automatically called from kfree_skb.
1636 */
1637void sock_wfree(struct sk_buff *skb)
1638{
1639	struct sock *sk = skb->sk;
1640	unsigned int len = skb->truesize;
1641
1642	if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) {
1643		/*
1644		 * Keep a reference on sk_wmem_alloc, this will be released
1645		 * after sk_write_space() call
1646		 */
1647		atomic_sub(len - 1, &sk->sk_wmem_alloc);
1648		sk->sk_write_space(sk);
1649		len = 1;
1650	}
1651	/*
1652	 * if sk_wmem_alloc reaches 0, we must finish what sk_free()
1653	 * could not do because of in-flight packets
1654	 */
1655	if (atomic_sub_and_test(len, &sk->sk_wmem_alloc))
1656		__sk_free(sk);
1657}
1658EXPORT_SYMBOL(sock_wfree);
1659
1660/* This variant of sock_wfree() is used by TCP,
1661 * since it sets SOCK_USE_WRITE_QUEUE.
1662 */
1663void __sock_wfree(struct sk_buff *skb)
1664{
1665	struct sock *sk = skb->sk;
1666
1667	if (atomic_sub_and_test(skb->truesize, &sk->sk_wmem_alloc))
1668		__sk_free(sk);
1669}
1670
1671void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
1672{
1673	skb_orphan(skb);
1674	skb->sk = sk;
1675#ifdef CONFIG_INET
1676	if (unlikely(!sk_fullsock(sk))) {
1677		skb->destructor = sock_edemux;
1678		sock_hold(sk);
1679		return;
1680	}
1681#endif
1682	skb->destructor = sock_wfree;
1683	skb_set_hash_from_sk(skb, sk);
1684	/*
1685	 * We used to take a refcount on sk, but following operation
1686	 * is enough to guarantee sk_free() wont free this sock until
1687	 * all in-flight packets are completed
1688	 */
1689	atomic_add(skb->truesize, &sk->sk_wmem_alloc);
1690}
1691EXPORT_SYMBOL(skb_set_owner_w);
1692
 
 
 
 
 
 
 
 
 
 
 
 
 
1693/* This helper is used by netem, as it can hold packets in its
1694 * delay queue. We want to allow the owner socket to send more
1695 * packets, as if they were already TX completed by a typical driver.
1696 * But we also want to keep skb->sk set because some packet schedulers
1697 * rely on it (sch_fq for example). So we set skb->truesize to a small
1698 * amount (1) and decrease sk_wmem_alloc accordingly.
1699 */
1700void skb_orphan_partial(struct sk_buff *skb)
1701{
1702	/* If this skb is a TCP pure ACK or already went here,
1703	 * we have nothing to do. 2 is already a very small truesize.
1704	 */
1705	if (skb->truesize <= 2)
1706		return;
1707
1708	/* TCP stack sets skb->ooo_okay based on sk_wmem_alloc,
1709	 * so we do not completely orphan skb, but transfert all
1710	 * accounted bytes but one, to avoid unexpected reorders.
1711	 */
1712	if (skb->destructor == sock_wfree
1713#ifdef CONFIG_INET
1714	    || skb->destructor == tcp_wfree
1715#endif
1716		) {
1717		atomic_sub(skb->truesize - 1, &skb->sk->sk_wmem_alloc);
1718		skb->truesize = 1;
1719	} else {
1720		skb_orphan(skb);
1721	}
1722}
1723EXPORT_SYMBOL(skb_orphan_partial);
1724
1725/*
1726 * Read buffer destructor automatically called from kfree_skb.
1727 */
1728void sock_rfree(struct sk_buff *skb)
1729{
1730	struct sock *sk = skb->sk;
1731	unsigned int len = skb->truesize;
1732
1733	atomic_sub(len, &sk->sk_rmem_alloc);
1734	sk_mem_uncharge(sk, len);
1735}
1736EXPORT_SYMBOL(sock_rfree);
1737
1738/*
1739 * Buffer destructor for skbs that are not used directly in read or write
1740 * path, e.g. for error handler skbs. Automatically called from kfree_skb.
1741 */
1742void sock_efree(struct sk_buff *skb)
1743{
1744	sock_put(skb->sk);
1745}
1746EXPORT_SYMBOL(sock_efree);
1747
1748kuid_t sock_i_uid(struct sock *sk)
1749{
1750	kuid_t uid;
1751
1752	read_lock_bh(&sk->sk_callback_lock);
1753	uid = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_uid : GLOBAL_ROOT_UID;
1754	read_unlock_bh(&sk->sk_callback_lock);
1755	return uid;
1756}
1757EXPORT_SYMBOL(sock_i_uid);
1758
1759unsigned long sock_i_ino(struct sock *sk)
1760{
1761	unsigned long ino;
1762
1763	read_lock_bh(&sk->sk_callback_lock);
1764	ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0;
1765	read_unlock_bh(&sk->sk_callback_lock);
1766	return ino;
1767}
1768EXPORT_SYMBOL(sock_i_ino);
1769
1770/*
1771 * Allocate a skb from the socket's send buffer.
1772 */
1773struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force,
1774			     gfp_t priority)
1775{
1776	if (force || atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) {
 
1777		struct sk_buff *skb = alloc_skb(size, priority);
 
1778		if (skb) {
1779			skb_set_owner_w(skb, sk);
1780			return skb;
1781		}
1782	}
1783	return NULL;
1784}
1785EXPORT_SYMBOL(sock_wmalloc);
1786
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1787/*
1788 * Allocate a memory block from the socket's option memory buffer.
1789 */
1790void *sock_kmalloc(struct sock *sk, int size, gfp_t priority)
1791{
1792	if ((unsigned int)size <= sysctl_optmem_max &&
1793	    atomic_read(&sk->sk_omem_alloc) + size < sysctl_optmem_max) {
1794		void *mem;
1795		/* First do the add, to avoid the race if kmalloc
1796		 * might sleep.
1797		 */
1798		atomic_add(size, &sk->sk_omem_alloc);
1799		mem = kmalloc(size, priority);
1800		if (mem)
1801			return mem;
1802		atomic_sub(size, &sk->sk_omem_alloc);
1803	}
1804	return NULL;
1805}
1806EXPORT_SYMBOL(sock_kmalloc);
1807
1808/* Free an option memory block. Note, we actually want the inline
1809 * here as this allows gcc to detect the nullify and fold away the
1810 * condition entirely.
1811 */
1812static inline void __sock_kfree_s(struct sock *sk, void *mem, int size,
1813				  const bool nullify)
1814{
1815	if (WARN_ON_ONCE(!mem))
1816		return;
1817	if (nullify)
1818		kzfree(mem);
1819	else
1820		kfree(mem);
1821	atomic_sub(size, &sk->sk_omem_alloc);
1822}
1823
1824void sock_kfree_s(struct sock *sk, void *mem, int size)
1825{
1826	__sock_kfree_s(sk, mem, size, false);
1827}
1828EXPORT_SYMBOL(sock_kfree_s);
1829
1830void sock_kzfree_s(struct sock *sk, void *mem, int size)
1831{
1832	__sock_kfree_s(sk, mem, size, true);
1833}
1834EXPORT_SYMBOL(sock_kzfree_s);
1835
1836/* It is almost wait_for_tcp_memory minus release_sock/lock_sock.
1837   I think, these locks should be removed for datagram sockets.
1838 */
1839static long sock_wait_for_wmem(struct sock *sk, long timeo)
1840{
1841	DEFINE_WAIT(wait);
1842
1843	sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
1844	for (;;) {
1845		if (!timeo)
1846			break;
1847		if (signal_pending(current))
1848			break;
1849		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
1850		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1851		if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf)
1852			break;
1853		if (sk->sk_shutdown & SEND_SHUTDOWN)
1854			break;
1855		if (sk->sk_err)
1856			break;
1857		timeo = schedule_timeout(timeo);
1858	}
1859	finish_wait(sk_sleep(sk), &wait);
1860	return timeo;
1861}
1862
1863
1864/*
1865 *	Generic send/receive buffer handlers
1866 */
1867
1868struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
1869				     unsigned long data_len, int noblock,
1870				     int *errcode, int max_page_order)
1871{
1872	struct sk_buff *skb;
1873	long timeo;
1874	int err;
1875
1876	timeo = sock_sndtimeo(sk, noblock);
1877	for (;;) {
1878		err = sock_error(sk);
1879		if (err != 0)
1880			goto failure;
1881
1882		err = -EPIPE;
1883		if (sk->sk_shutdown & SEND_SHUTDOWN)
1884			goto failure;
1885
1886		if (sk_wmem_alloc_get(sk) < sk->sk_sndbuf)
1887			break;
1888
1889		sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
1890		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
1891		err = -EAGAIN;
1892		if (!timeo)
1893			goto failure;
1894		if (signal_pending(current))
1895			goto interrupted;
1896		timeo = sock_wait_for_wmem(sk, timeo);
1897	}
1898	skb = alloc_skb_with_frags(header_len, data_len, max_page_order,
1899				   errcode, sk->sk_allocation);
1900	if (skb)
1901		skb_set_owner_w(skb, sk);
1902	return skb;
1903
1904interrupted:
1905	err = sock_intr_errno(timeo);
1906failure:
1907	*errcode = err;
1908	return NULL;
1909}
1910EXPORT_SYMBOL(sock_alloc_send_pskb);
1911
1912struct sk_buff *sock_alloc_send_skb(struct sock *sk, unsigned long size,
1913				    int noblock, int *errcode)
1914{
1915	return sock_alloc_send_pskb(sk, size, 0, noblock, errcode, 0);
1916}
1917EXPORT_SYMBOL(sock_alloc_send_skb);
1918
1919int __sock_cmsg_send(struct sock *sk, struct msghdr *msg, struct cmsghdr *cmsg,
1920		     struct sockcm_cookie *sockc)
1921{
1922	u32 tsflags;
1923
1924	switch (cmsg->cmsg_type) {
1925	case SO_MARK:
1926		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
1927			return -EPERM;
1928		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32)))
1929			return -EINVAL;
1930		sockc->mark = *(u32 *)CMSG_DATA(cmsg);
1931		break;
1932	case SO_TIMESTAMPING:
1933		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32)))
1934			return -EINVAL;
1935
1936		tsflags = *(u32 *)CMSG_DATA(cmsg);
1937		if (tsflags & ~SOF_TIMESTAMPING_TX_RECORD_MASK)
1938			return -EINVAL;
1939
1940		sockc->tsflags &= ~SOF_TIMESTAMPING_TX_RECORD_MASK;
1941		sockc->tsflags |= tsflags;
1942		break;
 
 
 
 
 
 
 
1943	/* SCM_RIGHTS and SCM_CREDENTIALS are semantically in SOL_UNIX. */
1944	case SCM_RIGHTS:
1945	case SCM_CREDENTIALS:
1946		break;
1947	default:
1948		return -EINVAL;
1949	}
1950	return 0;
1951}
1952EXPORT_SYMBOL(__sock_cmsg_send);
1953
1954int sock_cmsg_send(struct sock *sk, struct msghdr *msg,
1955		   struct sockcm_cookie *sockc)
1956{
1957	struct cmsghdr *cmsg;
1958	int ret;
1959
1960	for_each_cmsghdr(cmsg, msg) {
1961		if (!CMSG_OK(msg, cmsg))
1962			return -EINVAL;
1963		if (cmsg->cmsg_level != SOL_SOCKET)
1964			continue;
1965		ret = __sock_cmsg_send(sk, msg, cmsg, sockc);
1966		if (ret)
1967			return ret;
1968	}
1969	return 0;
1970}
1971EXPORT_SYMBOL(sock_cmsg_send);
1972
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1973/* On 32bit arches, an skb frag is limited to 2^15 */
1974#define SKB_FRAG_PAGE_ORDER	get_order(32768)
 
1975
1976/**
1977 * skb_page_frag_refill - check that a page_frag contains enough room
1978 * @sz: minimum size of the fragment we want to get
1979 * @pfrag: pointer to page_frag
1980 * @gfp: priority for memory allocation
1981 *
1982 * Note: While this allocator tries to use high order pages, there is
1983 * no guarantee that allocations succeed. Therefore, @sz MUST be
1984 * less or equal than PAGE_SIZE.
1985 */
1986bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)
1987{
1988	if (pfrag->page) {
1989		if (page_ref_count(pfrag->page) == 1) {
1990			pfrag->offset = 0;
1991			return true;
1992		}
1993		if (pfrag->offset + sz <= pfrag->size)
1994			return true;
1995		put_page(pfrag->page);
1996	}
1997
1998	pfrag->offset = 0;
1999	if (SKB_FRAG_PAGE_ORDER) {
 
2000		/* Avoid direct reclaim but allow kswapd to wake */
2001		pfrag->page = alloc_pages((gfp & ~__GFP_DIRECT_RECLAIM) |
2002					  __GFP_COMP | __GFP_NOWARN |
2003					  __GFP_NORETRY,
2004					  SKB_FRAG_PAGE_ORDER);
2005		if (likely(pfrag->page)) {
2006			pfrag->size = PAGE_SIZE << SKB_FRAG_PAGE_ORDER;
2007			return true;
2008		}
2009	}
2010	pfrag->page = alloc_page(gfp);
2011	if (likely(pfrag->page)) {
2012		pfrag->size = PAGE_SIZE;
2013		return true;
2014	}
2015	return false;
2016}
2017EXPORT_SYMBOL(skb_page_frag_refill);
2018
2019bool sk_page_frag_refill(struct sock *sk, struct page_frag *pfrag)
2020{
2021	if (likely(skb_page_frag_refill(32U, pfrag, sk->sk_allocation)))
2022		return true;
2023
2024	sk_enter_memory_pressure(sk);
2025	sk_stream_moderate_sndbuf(sk);
2026	return false;
2027}
2028EXPORT_SYMBOL(sk_page_frag_refill);
2029
2030static void __lock_sock(struct sock *sk)
2031	__releases(&sk->sk_lock.slock)
2032	__acquires(&sk->sk_lock.slock)
2033{
2034	DEFINE_WAIT(wait);
2035
2036	for (;;) {
2037		prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait,
2038					TASK_UNINTERRUPTIBLE);
2039		spin_unlock_bh(&sk->sk_lock.slock);
2040		schedule();
2041		spin_lock_bh(&sk->sk_lock.slock);
2042		if (!sock_owned_by_user(sk))
2043			break;
2044	}
2045	finish_wait(&sk->sk_lock.wq, &wait);
2046}
2047
2048static void __release_sock(struct sock *sk)
2049	__releases(&sk->sk_lock.slock)
2050	__acquires(&sk->sk_lock.slock)
2051{
2052	struct sk_buff *skb, *next;
2053
2054	while ((skb = sk->sk_backlog.head) != NULL) {
2055		sk->sk_backlog.head = sk->sk_backlog.tail = NULL;
2056
2057		spin_unlock_bh(&sk->sk_lock.slock);
2058
2059		do {
2060			next = skb->next;
2061			prefetch(next);
2062			WARN_ON_ONCE(skb_dst_is_noref(skb));
2063			skb->next = NULL;
2064			sk_backlog_rcv(sk, skb);
2065
2066			cond_resched();
2067
2068			skb = next;
2069		} while (skb != NULL);
2070
2071		spin_lock_bh(&sk->sk_lock.slock);
2072	}
2073
2074	/*
2075	 * Doing the zeroing here guarantee we can not loop forever
2076	 * while a wild producer attempts to flood us.
2077	 */
2078	sk->sk_backlog.len = 0;
2079}
2080
2081void __sk_flush_backlog(struct sock *sk)
2082{
2083	spin_lock_bh(&sk->sk_lock.slock);
2084	__release_sock(sk);
2085	spin_unlock_bh(&sk->sk_lock.slock);
2086}
2087
2088/**
2089 * sk_wait_data - wait for data to arrive at sk_receive_queue
2090 * @sk:    sock to wait on
2091 * @timeo: for how long
2092 * @skb:   last skb seen on sk_receive_queue
2093 *
2094 * Now socket state including sk->sk_err is changed only under lock,
2095 * hence we may omit checks after joining wait queue.
2096 * We check receive queue before schedule() only as optimization;
2097 * it is very likely that release_sock() added new data.
2098 */
2099int sk_wait_data(struct sock *sk, long *timeo, const struct sk_buff *skb)
2100{
2101	DEFINE_WAIT_FUNC(wait, woken_wake_function);
2102	int rc;
2103
2104	add_wait_queue(sk_sleep(sk), &wait);
2105	sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2106	rc = sk_wait_event(sk, timeo, skb_peek_tail(&sk->sk_receive_queue) != skb, &wait);
2107	sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
2108	remove_wait_queue(sk_sleep(sk), &wait);
2109	return rc;
2110}
2111EXPORT_SYMBOL(sk_wait_data);
2112
2113/**
2114 *	__sk_mem_raise_allocated - increase memory_allocated
2115 *	@sk: socket
2116 *	@size: memory size to allocate
2117 *	@amt: pages to allocate
2118 *	@kind: allocation type
2119 *
2120 *	Similar to __sk_mem_schedule(), but does not update sk_forward_alloc
2121 */
2122int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)
2123{
2124	struct proto *prot = sk->sk_prot;
2125	long allocated = sk_memory_allocated_add(sk, amt);
 
2126
2127	if (mem_cgroup_sockets_enabled && sk->sk_memcg &&
2128	    !mem_cgroup_charge_skmem(sk->sk_memcg, amt))
2129		goto suppress_allocation;
2130
2131	/* Under limit. */
2132	if (allocated <= sk_prot_mem_limits(sk, 0)) {
2133		sk_leave_memory_pressure(sk);
2134		return 1;
2135	}
2136
2137	/* Under pressure. */
2138	if (allocated > sk_prot_mem_limits(sk, 1))
2139		sk_enter_memory_pressure(sk);
2140
2141	/* Over hard limit. */
2142	if (allocated > sk_prot_mem_limits(sk, 2))
2143		goto suppress_allocation;
2144
2145	/* guarantee minimum buffer size under pressure */
2146	if (kind == SK_MEM_RECV) {
2147		if (atomic_read(&sk->sk_rmem_alloc) < prot->sysctl_rmem[0])
2148			return 1;
2149
2150	} else { /* SK_MEM_SEND */
 
 
2151		if (sk->sk_type == SOCK_STREAM) {
2152			if (sk->sk_wmem_queued < prot->sysctl_wmem[0])
2153				return 1;
2154		} else if (atomic_read(&sk->sk_wmem_alloc) <
2155			   prot->sysctl_wmem[0])
2156				return 1;
 
2157	}
2158
2159	if (sk_has_memory_pressure(sk)) {
2160		int alloc;
2161
2162		if (!sk_under_memory_pressure(sk))
2163			return 1;
2164		alloc = sk_sockets_allocated_read_positive(sk);
2165		if (sk_prot_mem_limits(sk, 2) > alloc *
2166		    sk_mem_pages(sk->sk_wmem_queued +
2167				 atomic_read(&sk->sk_rmem_alloc) +
2168				 sk->sk_forward_alloc))
2169			return 1;
2170	}
2171
2172suppress_allocation:
2173
2174	if (kind == SK_MEM_SEND && sk->sk_type == SOCK_STREAM) {
2175		sk_stream_moderate_sndbuf(sk);
2176
2177		/* Fail only if socket is _under_ its sndbuf.
2178		 * In this case we cannot block, so that we have to fail.
2179		 */
2180		if (sk->sk_wmem_queued + size >= sk->sk_sndbuf)
2181			return 1;
2182	}
2183
2184	trace_sock_exceed_buf_limit(sk, prot, allocated);
 
2185
2186	sk_memory_allocated_sub(sk, amt);
2187
2188	if (mem_cgroup_sockets_enabled && sk->sk_memcg)
2189		mem_cgroup_uncharge_skmem(sk->sk_memcg, amt);
2190
2191	return 0;
2192}
2193EXPORT_SYMBOL(__sk_mem_raise_allocated);
2194
2195/**
2196 *	__sk_mem_schedule - increase sk_forward_alloc and memory_allocated
2197 *	@sk: socket
2198 *	@size: memory size to allocate
2199 *	@kind: allocation type
2200 *
2201 *	If kind is SK_MEM_SEND, it means wmem allocation. Otherwise it means
2202 *	rmem allocation. This function assumes that protocols which have
2203 *	memory_pressure use sk_wmem_queued as write buffer accounting.
2204 */
2205int __sk_mem_schedule(struct sock *sk, int size, int kind)
2206{
2207	int ret, amt = sk_mem_pages(size);
2208
2209	sk->sk_forward_alloc += amt << SK_MEM_QUANTUM_SHIFT;
2210	ret = __sk_mem_raise_allocated(sk, size, amt, kind);
2211	if (!ret)
2212		sk->sk_forward_alloc -= amt << SK_MEM_QUANTUM_SHIFT;
2213	return ret;
2214}
2215EXPORT_SYMBOL(__sk_mem_schedule);
2216
2217/**
2218 *	__sk_mem_reduce_allocated - reclaim memory_allocated
2219 *	@sk: socket
2220 *	@amount: number of quanta
2221 *
2222 *	Similar to __sk_mem_reclaim(), but does not update sk_forward_alloc
2223 */
2224void __sk_mem_reduce_allocated(struct sock *sk, int amount)
2225{
2226	sk_memory_allocated_sub(sk, amount);
2227
2228	if (mem_cgroup_sockets_enabled && sk->sk_memcg)
2229		mem_cgroup_uncharge_skmem(sk->sk_memcg, amount);
2230
2231	if (sk_under_memory_pressure(sk) &&
2232	    (sk_memory_allocated(sk) < sk_prot_mem_limits(sk, 0)))
2233		sk_leave_memory_pressure(sk);
2234}
2235EXPORT_SYMBOL(__sk_mem_reduce_allocated);
2236
2237/**
2238 *	__sk_mem_reclaim - reclaim sk_forward_alloc and memory_allocated
2239 *	@sk: socket
2240 *	@amount: number of bytes (rounded down to a SK_MEM_QUANTUM multiple)
2241 */
2242void __sk_mem_reclaim(struct sock *sk, int amount)
2243{
2244	amount >>= SK_MEM_QUANTUM_SHIFT;
2245	sk->sk_forward_alloc -= amount << SK_MEM_QUANTUM_SHIFT;
2246	__sk_mem_reduce_allocated(sk, amount);
2247}
2248EXPORT_SYMBOL(__sk_mem_reclaim);
2249
2250int sk_set_peek_off(struct sock *sk, int val)
2251{
2252	if (val < 0)
2253		return -EINVAL;
2254
2255	sk->sk_peek_off = val;
2256	return 0;
2257}
2258EXPORT_SYMBOL_GPL(sk_set_peek_off);
2259
2260/*
2261 * Set of default routines for initialising struct proto_ops when
2262 * the protocol does not support a particular function. In certain
2263 * cases where it makes no sense for a protocol to have a "do nothing"
2264 * function, some default processing is provided.
2265 */
2266
2267int sock_no_bind(struct socket *sock, struct sockaddr *saddr, int len)
2268{
2269	return -EOPNOTSUPP;
2270}
2271EXPORT_SYMBOL(sock_no_bind);
2272
2273int sock_no_connect(struct socket *sock, struct sockaddr *saddr,
2274		    int len, int flags)
2275{
2276	return -EOPNOTSUPP;
2277}
2278EXPORT_SYMBOL(sock_no_connect);
2279
2280int sock_no_socketpair(struct socket *sock1, struct socket *sock2)
2281{
2282	return -EOPNOTSUPP;
2283}
2284EXPORT_SYMBOL(sock_no_socketpair);
2285
2286int sock_no_accept(struct socket *sock, struct socket *newsock, int flags)
 
2287{
2288	return -EOPNOTSUPP;
2289}
2290EXPORT_SYMBOL(sock_no_accept);
2291
2292int sock_no_getname(struct socket *sock, struct sockaddr *saddr,
2293		    int *len, int peer)
2294{
2295	return -EOPNOTSUPP;
2296}
2297EXPORT_SYMBOL(sock_no_getname);
2298
2299unsigned int sock_no_poll(struct file *file, struct socket *sock, poll_table *pt)
2300{
2301	return 0;
2302}
2303EXPORT_SYMBOL(sock_no_poll);
2304
2305int sock_no_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
2306{
2307	return -EOPNOTSUPP;
2308}
2309EXPORT_SYMBOL(sock_no_ioctl);
2310
2311int sock_no_listen(struct socket *sock, int backlog)
2312{
2313	return -EOPNOTSUPP;
2314}
2315EXPORT_SYMBOL(sock_no_listen);
2316
2317int sock_no_shutdown(struct socket *sock, int how)
2318{
2319	return -EOPNOTSUPP;
2320}
2321EXPORT_SYMBOL(sock_no_shutdown);
2322
2323int sock_no_setsockopt(struct socket *sock, int level, int optname,
2324		    char __user *optval, unsigned int optlen)
2325{
2326	return -EOPNOTSUPP;
2327}
2328EXPORT_SYMBOL(sock_no_setsockopt);
2329
2330int sock_no_getsockopt(struct socket *sock, int level, int optname,
2331		    char __user *optval, int __user *optlen)
2332{
2333	return -EOPNOTSUPP;
2334}
2335EXPORT_SYMBOL(sock_no_getsockopt);
2336
2337int sock_no_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
2338{
2339	return -EOPNOTSUPP;
2340}
2341EXPORT_SYMBOL(sock_no_sendmsg);
2342
 
 
 
 
 
 
2343int sock_no_recvmsg(struct socket *sock, struct msghdr *m, size_t len,
2344		    int flags)
2345{
2346	return -EOPNOTSUPP;
2347}
2348EXPORT_SYMBOL(sock_no_recvmsg);
2349
2350int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
2351{
2352	/* Mirror missing mmap method error code */
2353	return -ENODEV;
2354}
2355EXPORT_SYMBOL(sock_no_mmap);
2356
2357ssize_t sock_no_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags)
2358{
2359	ssize_t res;
2360	struct msghdr msg = {.msg_flags = flags};
2361	struct kvec iov;
2362	char *kaddr = kmap(page);
2363	iov.iov_base = kaddr + offset;
2364	iov.iov_len = size;
2365	res = kernel_sendmsg(sock, &msg, &iov, 1, size);
2366	kunmap(page);
2367	return res;
2368}
2369EXPORT_SYMBOL(sock_no_sendpage);
2370
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2371/*
2372 *	Default Socket Callbacks
2373 */
2374
2375static void sock_def_wakeup(struct sock *sk)
2376{
2377	struct socket_wq *wq;
2378
2379	rcu_read_lock();
2380	wq = rcu_dereference(sk->sk_wq);
2381	if (skwq_has_sleeper(wq))
2382		wake_up_interruptible_all(&wq->wait);
2383	rcu_read_unlock();
2384}
2385
2386static void sock_def_error_report(struct sock *sk)
2387{
2388	struct socket_wq *wq;
2389
2390	rcu_read_lock();
2391	wq = rcu_dereference(sk->sk_wq);
2392	if (skwq_has_sleeper(wq))
2393		wake_up_interruptible_poll(&wq->wait, POLLERR);
2394	sk_wake_async(sk, SOCK_WAKE_IO, POLL_ERR);
2395	rcu_read_unlock();
2396}
2397
2398static void sock_def_readable(struct sock *sk)
2399{
2400	struct socket_wq *wq;
2401
2402	rcu_read_lock();
2403	wq = rcu_dereference(sk->sk_wq);
2404	if (skwq_has_sleeper(wq))
2405		wake_up_interruptible_sync_poll(&wq->wait, POLLIN | POLLPRI |
2406						POLLRDNORM | POLLRDBAND);
2407	sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN);
2408	rcu_read_unlock();
2409}
2410
2411static void sock_def_write_space(struct sock *sk)
2412{
2413	struct socket_wq *wq;
2414
2415	rcu_read_lock();
2416
2417	/* Do not wake up a writer until he can make "significant"
2418	 * progress.  --DaveM
2419	 */
2420	if ((atomic_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf) {
2421		wq = rcu_dereference(sk->sk_wq);
2422		if (skwq_has_sleeper(wq))
2423			wake_up_interruptible_sync_poll(&wq->wait, POLLOUT |
2424						POLLWRNORM | POLLWRBAND);
2425
2426		/* Should agree with poll, otherwise some programs break */
2427		if (sock_writeable(sk))
2428			sk_wake_async(sk, SOCK_WAKE_SPACE, POLL_OUT);
2429	}
2430
2431	rcu_read_unlock();
2432}
2433
2434static void sock_def_destruct(struct sock *sk)
2435{
2436}
2437
2438void sk_send_sigurg(struct sock *sk)
2439{
2440	if (sk->sk_socket && sk->sk_socket->file)
2441		if (send_sigurg(&sk->sk_socket->file->f_owner))
2442			sk_wake_async(sk, SOCK_WAKE_URG, POLL_PRI);
2443}
2444EXPORT_SYMBOL(sk_send_sigurg);
2445
2446void sk_reset_timer(struct sock *sk, struct timer_list* timer,
2447		    unsigned long expires)
2448{
2449	if (!mod_timer(timer, expires))
2450		sock_hold(sk);
2451}
2452EXPORT_SYMBOL(sk_reset_timer);
2453
2454void sk_stop_timer(struct sock *sk, struct timer_list* timer)
2455{
2456	if (del_timer(timer))
2457		__sock_put(sk);
2458}
2459EXPORT_SYMBOL(sk_stop_timer);
2460
2461void sock_init_data(struct socket *sock, struct sock *sk)
2462{
2463	skb_queue_head_init(&sk->sk_receive_queue);
2464	skb_queue_head_init(&sk->sk_write_queue);
2465	skb_queue_head_init(&sk->sk_error_queue);
2466
2467	sk->sk_send_head	=	NULL;
2468
2469	init_timer(&sk->sk_timer);
2470
2471	sk->sk_allocation	=	GFP_KERNEL;
2472	sk->sk_rcvbuf		=	sysctl_rmem_default;
2473	sk->sk_sndbuf		=	sysctl_wmem_default;
2474	sk->sk_state		=	TCP_CLOSE;
2475	sk_set_socket(sk, sock);
2476
2477	sock_set_flag(sk, SOCK_ZAPPED);
2478
2479	if (sock) {
2480		sk->sk_type	=	sock->type;
2481		sk->sk_wq	=	sock->wq;
2482		sock->sk	=	sk;
2483		sk->sk_uid	=	SOCK_INODE(sock)->i_uid;
2484	} else {
2485		sk->sk_wq	=	NULL;
2486		sk->sk_uid	=	make_kuid(sock_net(sk)->user_ns, 0);
2487	}
2488
2489	rwlock_init(&sk->sk_callback_lock);
2490	lockdep_set_class_and_name(&sk->sk_callback_lock,
 
 
 
 
 
 
 
2491			af_callback_keys + sk->sk_family,
2492			af_family_clock_key_strings[sk->sk_family]);
2493
2494	sk->sk_state_change	=	sock_def_wakeup;
2495	sk->sk_data_ready	=	sock_def_readable;
2496	sk->sk_write_space	=	sock_def_write_space;
2497	sk->sk_error_report	=	sock_def_error_report;
2498	sk->sk_destruct		=	sock_def_destruct;
2499
2500	sk->sk_frag.page	=	NULL;
2501	sk->sk_frag.offset	=	0;
2502	sk->sk_peek_off		=	-1;
2503
2504	sk->sk_peer_pid 	=	NULL;
2505	sk->sk_peer_cred	=	NULL;
2506	sk->sk_write_pending	=	0;
2507	sk->sk_rcvlowat		=	1;
2508	sk->sk_rcvtimeo		=	MAX_SCHEDULE_TIMEOUT;
2509	sk->sk_sndtimeo		=	MAX_SCHEDULE_TIMEOUT;
2510
2511	sk->sk_stamp = ktime_set(-1L, 0);
 
 
 
 
2512
2513#ifdef CONFIG_NET_RX_BUSY_POLL
2514	sk->sk_napi_id		=	0;
2515	sk->sk_ll_usec		=	sysctl_net_busy_read;
2516#endif
2517
2518	sk->sk_max_pacing_rate = ~0U;
2519	sk->sk_pacing_rate = ~0U;
 
2520	sk->sk_incoming_cpu = -1;
 
 
2521	/*
2522	 * Before updating sk_refcnt, we must commit prior changes to memory
2523	 * (Documentation/RCU/rculist_nulls.txt for details)
2524	 */
2525	smp_wmb();
2526	atomic_set(&sk->sk_refcnt, 1);
2527	atomic_set(&sk->sk_drops, 0);
2528}
2529EXPORT_SYMBOL(sock_init_data);
2530
2531void lock_sock_nested(struct sock *sk, int subclass)
2532{
2533	might_sleep();
2534	spin_lock_bh(&sk->sk_lock.slock);
2535	if (sk->sk_lock.owned)
2536		__lock_sock(sk);
2537	sk->sk_lock.owned = 1;
2538	spin_unlock(&sk->sk_lock.slock);
2539	/*
2540	 * The sk_lock has mutex_lock() semantics here:
2541	 */
2542	mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
2543	local_bh_enable();
2544}
2545EXPORT_SYMBOL(lock_sock_nested);
2546
2547void release_sock(struct sock *sk)
2548{
2549	spin_lock_bh(&sk->sk_lock.slock);
2550	if (sk->sk_backlog.tail)
2551		__release_sock(sk);
2552
2553	/* Warning : release_cb() might need to release sk ownership,
2554	 * ie call sock_release_ownership(sk) before us.
2555	 */
2556	if (sk->sk_prot->release_cb)
2557		sk->sk_prot->release_cb(sk);
2558
2559	sock_release_ownership(sk);
2560	if (waitqueue_active(&sk->sk_lock.wq))
2561		wake_up(&sk->sk_lock.wq);
2562	spin_unlock_bh(&sk->sk_lock.slock);
2563}
2564EXPORT_SYMBOL(release_sock);
2565
2566/**
2567 * lock_sock_fast - fast version of lock_sock
2568 * @sk: socket
2569 *
2570 * This version should be used for very small section, where process wont block
2571 * return false if fast path is taken
 
2572 *   sk_lock.slock locked, owned = 0, BH disabled
2573 * return true if slow path is taken
 
 
2574 *   sk_lock.slock unlocked, owned = 1, BH enabled
2575 */
2576bool lock_sock_fast(struct sock *sk)
2577{
2578	might_sleep();
2579	spin_lock_bh(&sk->sk_lock.slock);
2580
2581	if (!sk->sk_lock.owned)
2582		/*
2583		 * Note : We must disable BH
2584		 */
2585		return false;
2586
2587	__lock_sock(sk);
2588	sk->sk_lock.owned = 1;
2589	spin_unlock(&sk->sk_lock.slock);
2590	/*
2591	 * The sk_lock has mutex_lock() semantics here:
2592	 */
2593	mutex_acquire(&sk->sk_lock.dep_map, 0, 0, _RET_IP_);
2594	local_bh_enable();
2595	return true;
2596}
2597EXPORT_SYMBOL(lock_sock_fast);
2598
2599int sock_get_timestamp(struct sock *sk, struct timeval __user *userstamp)
 
2600{
2601	struct timeval tv;
2602	if (!sock_flag(sk, SOCK_TIMESTAMP))
2603		sock_enable_timestamp(sk, SOCK_TIMESTAMP);
2604	tv = ktime_to_timeval(sk->sk_stamp);
2605	if (tv.tv_sec == -1)
2606		return -ENOENT;
2607	if (tv.tv_sec == 0) {
2608		sk->sk_stamp = ktime_get_real();
2609		tv = ktime_to_timeval(sk->sk_stamp);
2610	}
2611	return copy_to_user(userstamp, &tv, sizeof(tv)) ? -EFAULT : 0;
2612}
2613EXPORT_SYMBOL(sock_get_timestamp);
2614
2615int sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp)
2616{
2617	struct timespec ts;
2618	if (!sock_flag(sk, SOCK_TIMESTAMP))
2619		sock_enable_timestamp(sk, SOCK_TIMESTAMP);
2620	ts = ktime_to_timespec(sk->sk_stamp);
2621	if (ts.tv_sec == -1)
2622		return -ENOENT;
2623	if (ts.tv_sec == 0) {
2624		sk->sk_stamp = ktime_get_real();
2625		ts = ktime_to_timespec(sk->sk_stamp);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2626	}
2627	return copy_to_user(userstamp, &ts, sizeof(ts)) ? -EFAULT : 0;
 
2628}
2629EXPORT_SYMBOL(sock_get_timestampns);
2630
2631void sock_enable_timestamp(struct sock *sk, int flag)
2632{
2633	if (!sock_flag(sk, flag)) {
2634		unsigned long previous_flags = sk->sk_flags;
2635
2636		sock_set_flag(sk, flag);
2637		/*
2638		 * we just set one of the two flags which require net
2639		 * time stamping, but time stamping might have been on
2640		 * already because of the other one
2641		 */
2642		if (sock_needs_netstamp(sk) &&
2643		    !(previous_flags & SK_FLAGS_TIMESTAMP))
2644			net_enable_timestamp();
2645	}
2646}
2647
2648int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
2649		       int level, int type)
2650{
2651	struct sock_exterr_skb *serr;
2652	struct sk_buff *skb;
2653	int copied, err;
2654
2655	err = -EAGAIN;
2656	skb = sock_dequeue_err_skb(sk);
2657	if (skb == NULL)
2658		goto out;
2659
2660	copied = skb->len;
2661	if (copied > len) {
2662		msg->msg_flags |= MSG_TRUNC;
2663		copied = len;
2664	}
2665	err = skb_copy_datagram_msg(skb, 0, msg, copied);
2666	if (err)
2667		goto out_free_skb;
2668
2669	sock_recv_timestamp(msg, sk, skb);
2670
2671	serr = SKB_EXT_ERR(skb);
2672	put_cmsg(msg, level, type, sizeof(serr->ee), &serr->ee);
2673
2674	msg->msg_flags |= MSG_ERRQUEUE;
2675	err = copied;
2676
2677out_free_skb:
2678	kfree_skb(skb);
2679out:
2680	return err;
2681}
2682EXPORT_SYMBOL(sock_recv_errqueue);
2683
2684/*
2685 *	Get a socket option on an socket.
2686 *
2687 *	FIX: POSIX 1003.1g is very ambiguous here. It states that
2688 *	asynchronous errors should be reported by getsockopt. We assume
2689 *	this means if you specify SO_ERROR (otherwise whats the point of it).
2690 */
2691int sock_common_getsockopt(struct socket *sock, int level, int optname,
2692			   char __user *optval, int __user *optlen)
2693{
2694	struct sock *sk = sock->sk;
2695
2696	return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
2697}
2698EXPORT_SYMBOL(sock_common_getsockopt);
2699
2700#ifdef CONFIG_COMPAT
2701int compat_sock_common_getsockopt(struct socket *sock, int level, int optname,
2702				  char __user *optval, int __user *optlen)
2703{
2704	struct sock *sk = sock->sk;
2705
2706	if (sk->sk_prot->compat_getsockopt != NULL)
2707		return sk->sk_prot->compat_getsockopt(sk, level, optname,
2708						      optval, optlen);
2709	return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
2710}
2711EXPORT_SYMBOL(compat_sock_common_getsockopt);
2712#endif
2713
2714int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
2715			int flags)
2716{
2717	struct sock *sk = sock->sk;
2718	int addr_len = 0;
2719	int err;
2720
2721	err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
2722				   flags & ~MSG_DONTWAIT, &addr_len);
2723	if (err >= 0)
2724		msg->msg_namelen = addr_len;
2725	return err;
2726}
2727EXPORT_SYMBOL(sock_common_recvmsg);
2728
2729/*
2730 *	Set socket options on an inet socket.
2731 */
2732int sock_common_setsockopt(struct socket *sock, int level, int optname,
2733			   char __user *optval, unsigned int optlen)
2734{
2735	struct sock *sk = sock->sk;
2736
2737	return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
2738}
2739EXPORT_SYMBOL(sock_common_setsockopt);
2740
2741#ifdef CONFIG_COMPAT
2742int compat_sock_common_setsockopt(struct socket *sock, int level, int optname,
2743				  char __user *optval, unsigned int optlen)
2744{
2745	struct sock *sk = sock->sk;
2746
2747	if (sk->sk_prot->compat_setsockopt != NULL)
2748		return sk->sk_prot->compat_setsockopt(sk, level, optname,
2749						      optval, optlen);
2750	return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
2751}
2752EXPORT_SYMBOL(compat_sock_common_setsockopt);
2753#endif
2754
2755void sk_common_release(struct sock *sk)
2756{
2757	if (sk->sk_prot->destroy)
2758		sk->sk_prot->destroy(sk);
2759
2760	/*
2761	 * Observation: when sock_common_release is called, processes have
2762	 * no access to socket. But net still has.
2763	 * Step one, detach it from networking:
2764	 *
2765	 * A. Remove from hash tables.
2766	 */
2767
2768	sk->sk_prot->unhash(sk);
2769
2770	/*
2771	 * In this point socket cannot receive new packets, but it is possible
2772	 * that some packets are in flight because some CPU runs receiver and
2773	 * did hash table lookup before we unhashed socket. They will achieve
2774	 * receive queue and will be purged by socket destructor.
2775	 *
2776	 * Also we still have packets pending on receive queue and probably,
2777	 * our own packets waiting in device queues. sock_destroy will drain
2778	 * receive queue, but transmitted packets will delay socket destruction
2779	 * until the last reference will be released.
2780	 */
2781
2782	sock_orphan(sk);
2783
2784	xfrm_sk_free_policy(sk);
2785
2786	sk_refcnt_debug_release(sk);
2787
2788	sock_put(sk);
2789}
2790EXPORT_SYMBOL(sk_common_release);
2791
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2792#ifdef CONFIG_PROC_FS
2793#define PROTO_INUSE_NR	64	/* should be enough for the first time */
2794struct prot_inuse {
2795	int val[PROTO_INUSE_NR];
2796};
2797
2798static DECLARE_BITMAP(proto_inuse_idx, PROTO_INUSE_NR);
2799
2800#ifdef CONFIG_NET_NS
2801void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
2802{
2803	__this_cpu_add(net->core.inuse->val[prot->inuse_idx], val);
2804}
2805EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
2806
2807int sock_prot_inuse_get(struct net *net, struct proto *prot)
2808{
2809	int cpu, idx = prot->inuse_idx;
2810	int res = 0;
2811
2812	for_each_possible_cpu(cpu)
2813		res += per_cpu_ptr(net->core.inuse, cpu)->val[idx];
2814
2815	return res >= 0 ? res : 0;
2816}
2817EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
2818
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2819static int __net_init sock_inuse_init_net(struct net *net)
2820{
2821	net->core.inuse = alloc_percpu(struct prot_inuse);
2822	return net->core.inuse ? 0 : -ENOMEM;
 
 
 
 
 
 
 
 
 
 
 
2823}
2824
2825static void __net_exit sock_inuse_exit_net(struct net *net)
2826{
2827	free_percpu(net->core.inuse);
 
2828}
2829
2830static struct pernet_operations net_inuse_ops = {
2831	.init = sock_inuse_init_net,
2832	.exit = sock_inuse_exit_net,
2833};
2834
2835static __init int net_inuse_init(void)
2836{
2837	if (register_pernet_subsys(&net_inuse_ops))
2838		panic("Cannot initialize net inuse counters");
2839
2840	return 0;
2841}
2842
2843core_initcall(net_inuse_init);
2844#else
2845static DEFINE_PER_CPU(struct prot_inuse, prot_inuse);
2846
2847void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
2848{
2849	__this_cpu_add(prot_inuse.val[prot->inuse_idx], val);
2850}
2851EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
2852
2853int sock_prot_inuse_get(struct net *net, struct proto *prot)
2854{
2855	int cpu, idx = prot->inuse_idx;
2856	int res = 0;
2857
2858	for_each_possible_cpu(cpu)
2859		res += per_cpu(prot_inuse, cpu).val[idx];
2860
2861	return res >= 0 ? res : 0;
2862}
2863EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
2864#endif
2865
2866static void assign_proto_idx(struct proto *prot)
2867{
2868	prot->inuse_idx = find_first_zero_bit(proto_inuse_idx, PROTO_INUSE_NR);
2869
2870	if (unlikely(prot->inuse_idx == PROTO_INUSE_NR - 1)) {
2871		pr_err("PROTO_INUSE_NR exhausted\n");
2872		return;
2873	}
2874
2875	set_bit(prot->inuse_idx, proto_inuse_idx);
 
2876}
2877
2878static void release_proto_idx(struct proto *prot)
2879{
2880	if (prot->inuse_idx != PROTO_INUSE_NR - 1)
2881		clear_bit(prot->inuse_idx, proto_inuse_idx);
2882}
2883#else
2884static inline void assign_proto_idx(struct proto *prot)
2885{
 
2886}
2887
2888static inline void release_proto_idx(struct proto *prot)
2889{
2890}
 
 
 
 
2891#endif
2892
2893static void req_prot_cleanup(struct request_sock_ops *rsk_prot)
2894{
2895	if (!rsk_prot)
2896		return;
2897	kfree(rsk_prot->slab_name);
2898	rsk_prot->slab_name = NULL;
2899	kmem_cache_destroy(rsk_prot->slab);
2900	rsk_prot->slab = NULL;
2901}
2902
2903static int req_prot_init(const struct proto *prot)
2904{
2905	struct request_sock_ops *rsk_prot = prot->rsk_prot;
2906
2907	if (!rsk_prot)
2908		return 0;
2909
2910	rsk_prot->slab_name = kasprintf(GFP_KERNEL, "request_sock_%s",
2911					prot->name);
2912	if (!rsk_prot->slab_name)
2913		return -ENOMEM;
2914
2915	rsk_prot->slab = kmem_cache_create(rsk_prot->slab_name,
2916					   rsk_prot->obj_size, 0,
2917					   prot->slab_flags, NULL);
 
2918
2919	if (!rsk_prot->slab) {
2920		pr_crit("%s: Can't create request sock SLAB cache!\n",
2921			prot->name);
2922		return -ENOMEM;
2923	}
2924	return 0;
2925}
2926
2927int proto_register(struct proto *prot, int alloc_slab)
2928{
 
 
2929	if (alloc_slab) {
2930		prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0,
2931					SLAB_HWCACHE_ALIGN | prot->slab_flags,
 
 
 
2932					NULL);
2933
2934		if (prot->slab == NULL) {
2935			pr_crit("%s: Can't create sock SLAB cache!\n",
2936				prot->name);
2937			goto out;
2938		}
2939
2940		if (req_prot_init(prot))
2941			goto out_free_request_sock_slab;
2942
2943		if (prot->twsk_prot != NULL) {
2944			prot->twsk_prot->twsk_slab_name = kasprintf(GFP_KERNEL, "tw_sock_%s", prot->name);
2945
2946			if (prot->twsk_prot->twsk_slab_name == NULL)
2947				goto out_free_request_sock_slab;
2948
2949			prot->twsk_prot->twsk_slab =
2950				kmem_cache_create(prot->twsk_prot->twsk_slab_name,
2951						  prot->twsk_prot->twsk_obj_size,
2952						  0,
 
2953						  prot->slab_flags,
2954						  NULL);
2955			if (prot->twsk_prot->twsk_slab == NULL)
2956				goto out_free_timewait_sock_slab_name;
2957		}
2958	}
2959
2960	mutex_lock(&proto_list_mutex);
 
 
 
 
 
2961	list_add(&prot->node, &proto_list);
2962	assign_proto_idx(prot);
2963	mutex_unlock(&proto_list_mutex);
2964	return 0;
2965
2966out_free_timewait_sock_slab_name:
2967	kfree(prot->twsk_prot->twsk_slab_name);
 
2968out_free_request_sock_slab:
2969	req_prot_cleanup(prot->rsk_prot);
 
2970
2971	kmem_cache_destroy(prot->slab);
2972	prot->slab = NULL;
 
2973out:
2974	return -ENOBUFS;
2975}
2976EXPORT_SYMBOL(proto_register);
2977
2978void proto_unregister(struct proto *prot)
2979{
2980	mutex_lock(&proto_list_mutex);
2981	release_proto_idx(prot);
2982	list_del(&prot->node);
2983	mutex_unlock(&proto_list_mutex);
2984
2985	kmem_cache_destroy(prot->slab);
2986	prot->slab = NULL;
2987
2988	req_prot_cleanup(prot->rsk_prot);
2989
2990	if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) {
2991		kmem_cache_destroy(prot->twsk_prot->twsk_slab);
2992		kfree(prot->twsk_prot->twsk_slab_name);
2993		prot->twsk_prot->twsk_slab = NULL;
2994	}
2995}
2996EXPORT_SYMBOL(proto_unregister);
2997
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2998#ifdef CONFIG_PROC_FS
2999static void *proto_seq_start(struct seq_file *seq, loff_t *pos)
3000	__acquires(proto_list_mutex)
3001{
3002	mutex_lock(&proto_list_mutex);
3003	return seq_list_start_head(&proto_list, *pos);
3004}
3005
3006static void *proto_seq_next(struct seq_file *seq, void *v, loff_t *pos)
3007{
3008	return seq_list_next(v, &proto_list, pos);
3009}
3010
3011static void proto_seq_stop(struct seq_file *seq, void *v)
3012	__releases(proto_list_mutex)
3013{
3014	mutex_unlock(&proto_list_mutex);
3015}
3016
3017static char proto_method_implemented(const void *method)
3018{
3019	return method == NULL ? 'n' : 'y';
3020}
3021static long sock_prot_memory_allocated(struct proto *proto)
3022{
3023	return proto->memory_allocated != NULL ? proto_memory_allocated(proto) : -1L;
3024}
3025
3026static char *sock_prot_memory_pressure(struct proto *proto)
3027{
3028	return proto->memory_pressure != NULL ?
3029	proto_memory_pressure(proto) ? "yes" : "no" : "NI";
3030}
3031
3032static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
3033{
3034
3035	seq_printf(seq, "%-9s %4u %6d  %6ld   %-3s %6u   %-3s  %-10s "
3036			"%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
3037		   proto->name,
3038		   proto->obj_size,
3039		   sock_prot_inuse_get(seq_file_net(seq), proto),
3040		   sock_prot_memory_allocated(proto),
3041		   sock_prot_memory_pressure(proto),
3042		   proto->max_header,
3043		   proto->slab == NULL ? "no" : "yes",
3044		   module_name(proto->owner),
3045		   proto_method_implemented(proto->close),
3046		   proto_method_implemented(proto->connect),
3047		   proto_method_implemented(proto->disconnect),
3048		   proto_method_implemented(proto->accept),
3049		   proto_method_implemented(proto->ioctl),
3050		   proto_method_implemented(proto->init),
3051		   proto_method_implemented(proto->destroy),
3052		   proto_method_implemented(proto->shutdown),
3053		   proto_method_implemented(proto->setsockopt),
3054		   proto_method_implemented(proto->getsockopt),
3055		   proto_method_implemented(proto->sendmsg),
3056		   proto_method_implemented(proto->recvmsg),
3057		   proto_method_implemented(proto->sendpage),
3058		   proto_method_implemented(proto->bind),
3059		   proto_method_implemented(proto->backlog_rcv),
3060		   proto_method_implemented(proto->hash),
3061		   proto_method_implemented(proto->unhash),
3062		   proto_method_implemented(proto->get_port),
3063		   proto_method_implemented(proto->enter_memory_pressure));
3064}
3065
3066static int proto_seq_show(struct seq_file *seq, void *v)
3067{
3068	if (v == &proto_list)
3069		seq_printf(seq, "%-9s %-4s %-8s %-6s %-5s %-7s %-4s %-10s %s",
3070			   "protocol",
3071			   "size",
3072			   "sockets",
3073			   "memory",
3074			   "press",
3075			   "maxhdr",
3076			   "slab",
3077			   "module",
3078			   "cl co di ac io in de sh ss gs se re sp bi br ha uh gp em\n");
3079	else
3080		proto_seq_printf(seq, list_entry(v, struct proto, node));
3081	return 0;
3082}
3083
3084static const struct seq_operations proto_seq_ops = {
3085	.start  = proto_seq_start,
3086	.next   = proto_seq_next,
3087	.stop   = proto_seq_stop,
3088	.show   = proto_seq_show,
3089};
3090
3091static int proto_seq_open(struct inode *inode, struct file *file)
3092{
3093	return seq_open_net(inode, file, &proto_seq_ops,
3094			    sizeof(struct seq_net_private));
3095}
3096
3097static const struct file_operations proto_seq_fops = {
3098	.owner		= THIS_MODULE,
3099	.open		= proto_seq_open,
3100	.read		= seq_read,
3101	.llseek		= seq_lseek,
3102	.release	= seq_release_net,
3103};
3104
3105static __net_init int proto_init_net(struct net *net)
3106{
3107	if (!proc_create("protocols", S_IRUGO, net->proc_net, &proto_seq_fops))
 
3108		return -ENOMEM;
3109
3110	return 0;
3111}
3112
3113static __net_exit void proto_exit_net(struct net *net)
3114{
3115	remove_proc_entry("protocols", net->proc_net);
3116}
3117
3118
3119static __net_initdata struct pernet_operations proto_net_ops = {
3120	.init = proto_init_net,
3121	.exit = proto_exit_net,
3122};
3123
3124static int __init proto_init(void)
3125{
3126	return register_pernet_subsys(&proto_net_ops);
3127}
3128
3129subsys_initcall(proto_init);
3130
3131#endif /* PROC_FS */