Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Feb 10-13, 2025
Register
Loading...
v6.13.7
   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 <linux/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/udp.h>
 111#include <linux/init.h>
 112#include <linux/highmem.h>
 113#include <linux/user_namespace.h>
 114#include <linux/static_key.h>
 115#include <linux/memcontrol.h>
 116#include <linux/prefetch.h>
 117#include <linux/compat.h>
 118#include <linux/mroute.h>
 119#include <linux/mroute6.h>
 120#include <linux/icmpv6.h>
 121
 122#include <linux/uaccess.h>
 123
 124#include <linux/netdevice.h>
 125#include <net/protocol.h>
 126#include <linux/skbuff.h>
 127#include <linux/skbuff_ref.h>
 128#include <net/net_namespace.h>
 129#include <net/request_sock.h>
 130#include <net/sock.h>
 131#include <net/proto_memory.h>
 132#include <linux/net_tstamp.h>
 133#include <net/xfrm.h>
 134#include <linux/ipsec.h>
 135#include <net/cls_cgroup.h>
 136#include <net/netprio_cgroup.h>
 137#include <linux/sock_diag.h>
 138
 139#include <linux/filter.h>
 140#include <net/sock_reuseport.h>
 141#include <net/bpf_sk_storage.h>
 142
 143#include <trace/events/sock.h>
 144
 145#include <net/tcp.h>
 146#include <net/busy_poll.h>
 147#include <net/phonet/phonet.h>
 148
 149#include <linux/ethtool.h>
 150
 151#include "dev.h"
 152
 153static DEFINE_MUTEX(proto_list_mutex);
 154static LIST_HEAD(proto_list);
 155
 156static void sock_def_write_space_wfree(struct sock *sk);
 157static void sock_def_write_space(struct sock *sk);
 158
 159/**
 160 * sk_ns_capable - General socket capability test
 161 * @sk: Socket to use a capability on or through
 162 * @user_ns: The user namespace of the capability to use
 163 * @cap: The capability to use
 164 *
 165 * Test to see if the opener of the socket had when the socket was
 166 * created and the current process has the capability @cap in the user
 167 * namespace @user_ns.
 168 */
 169bool sk_ns_capable(const struct sock *sk,
 170		   struct user_namespace *user_ns, int cap)
 171{
 172	return file_ns_capable(sk->sk_socket->file, user_ns, cap) &&
 173		ns_capable(user_ns, cap);
 174}
 175EXPORT_SYMBOL(sk_ns_capable);
 176
 177/**
 178 * sk_capable - Socket global capability test
 179 * @sk: Socket to use a capability on or through
 180 * @cap: The global capability to use
 181 *
 182 * Test to see if the opener of the socket had when the socket was
 183 * created and the current process has the capability @cap in all user
 184 * namespaces.
 185 */
 186bool sk_capable(const struct sock *sk, int cap)
 187{
 188	return sk_ns_capable(sk, &init_user_ns, cap);
 189}
 190EXPORT_SYMBOL(sk_capable);
 191
 192/**
 193 * sk_net_capable - Network namespace socket capability test
 194 * @sk: Socket to use a capability on or through
 195 * @cap: The capability to use
 196 *
 197 * Test to see if the opener of the socket had when the socket was created
 198 * and the current process has the capability @cap over the network namespace
 199 * the socket is a member of.
 200 */
 201bool sk_net_capable(const struct sock *sk, int cap)
 202{
 203	return sk_ns_capable(sk, sock_net(sk)->user_ns, cap);
 204}
 205EXPORT_SYMBOL(sk_net_capable);
 206
 207/*
 208 * Each address family might have different locking rules, so we have
 209 * one slock key per address family and separate keys for internal and
 210 * userspace sockets.
 211 */
 212static struct lock_class_key af_family_keys[AF_MAX];
 213static struct lock_class_key af_family_kern_keys[AF_MAX];
 214static struct lock_class_key af_family_slock_keys[AF_MAX];
 215static struct lock_class_key af_family_kern_slock_keys[AF_MAX];
 216
 217/*
 218 * Make lock validator output more readable. (we pre-construct these
 219 * strings build-time, so that runtime initialization of socket
 220 * locks is fast):
 221 */
 222
 223#define _sock_locks(x)						  \
 224  x "AF_UNSPEC",	x "AF_UNIX"     ,	x "AF_INET"     , \
 225  x "AF_AX25"  ,	x "AF_IPX"      ,	x "AF_APPLETALK", \
 226  x "AF_NETROM",	x "AF_BRIDGE"   ,	x "AF_ATMPVC"   , \
 227  x "AF_X25"   ,	x "AF_INET6"    ,	x "AF_ROSE"     , \
 228  x "AF_DECnet",	x "AF_NETBEUI"  ,	x "AF_SECURITY" , \
 229  x "AF_KEY"   ,	x "AF_NETLINK"  ,	x "AF_PACKET"   , \
 230  x "AF_ASH"   ,	x "AF_ECONET"   ,	x "AF_ATMSVC"   , \
 231  x "AF_RDS"   ,	x "AF_SNA"      ,	x "AF_IRDA"     , \
 232  x "AF_PPPOX" ,	x "AF_WANPIPE"  ,	x "AF_LLC"      , \
 233  x "27"       ,	x "28"          ,	x "AF_CAN"      , \
 234  x "AF_TIPC"  ,	x "AF_BLUETOOTH",	x "IUCV"        , \
 235  x "AF_RXRPC" ,	x "AF_ISDN"     ,	x "AF_PHONET"   , \
 236  x "AF_IEEE802154",	x "AF_CAIF"	,	x "AF_ALG"      , \
 237  x "AF_NFC"   ,	x "AF_VSOCK"    ,	x "AF_KCM"      , \
 238  x "AF_QIPCRTR",	x "AF_SMC"	,	x "AF_XDP"	, \
 239  x "AF_MCTP"  , \
 240  x "AF_MAX"
 241
 242static const char *const af_family_key_strings[AF_MAX+1] = {
 243	_sock_locks("sk_lock-")
 244};
 245static const char *const af_family_slock_key_strings[AF_MAX+1] = {
 246	_sock_locks("slock-")
 247};
 248static const char *const af_family_clock_key_strings[AF_MAX+1] = {
 249	_sock_locks("clock-")
 250};
 251
 252static const char *const af_family_kern_key_strings[AF_MAX+1] = {
 253	_sock_locks("k-sk_lock-")
 254};
 255static const char *const af_family_kern_slock_key_strings[AF_MAX+1] = {
 256	_sock_locks("k-slock-")
 257};
 258static const char *const af_family_kern_clock_key_strings[AF_MAX+1] = {
 259	_sock_locks("k-clock-")
 260};
 261static const char *const af_family_rlock_key_strings[AF_MAX+1] = {
 262	_sock_locks("rlock-")
 263};
 264static const char *const af_family_wlock_key_strings[AF_MAX+1] = {
 265	_sock_locks("wlock-")
 266};
 267static const char *const af_family_elock_key_strings[AF_MAX+1] = {
 268	_sock_locks("elock-")
 269};
 270
 271/*
 272 * sk_callback_lock and sk queues locking rules are per-address-family,
 273 * so split the lock classes by using a per-AF key:
 274 */
 275static struct lock_class_key af_callback_keys[AF_MAX];
 276static struct lock_class_key af_rlock_keys[AF_MAX];
 277static struct lock_class_key af_wlock_keys[AF_MAX];
 278static struct lock_class_key af_elock_keys[AF_MAX];
 279static struct lock_class_key af_kern_callback_keys[AF_MAX];
 280
 281/* Run time adjustable parameters. */
 282__u32 sysctl_wmem_max __read_mostly = SK_WMEM_MAX;
 283EXPORT_SYMBOL(sysctl_wmem_max);
 284__u32 sysctl_rmem_max __read_mostly = SK_RMEM_MAX;
 285EXPORT_SYMBOL(sysctl_rmem_max);
 286__u32 sysctl_wmem_default __read_mostly = SK_WMEM_MAX;
 287__u32 sysctl_rmem_default __read_mostly = SK_RMEM_MAX;
 288
 
 
 
 
 
 
 289DEFINE_STATIC_KEY_FALSE(memalloc_socks_key);
 290EXPORT_SYMBOL_GPL(memalloc_socks_key);
 291
 292/**
 293 * sk_set_memalloc - sets %SOCK_MEMALLOC
 294 * @sk: socket to set it on
 295 *
 296 * Set %SOCK_MEMALLOC on a socket for access to emergency reserves.
 297 * It's the responsibility of the admin to adjust min_free_kbytes
 298 * to meet the requirements
 299 */
 300void sk_set_memalloc(struct sock *sk)
 301{
 302	sock_set_flag(sk, SOCK_MEMALLOC);
 303	sk->sk_allocation |= __GFP_MEMALLOC;
 304	static_branch_inc(&memalloc_socks_key);
 305}
 306EXPORT_SYMBOL_GPL(sk_set_memalloc);
 307
 308void sk_clear_memalloc(struct sock *sk)
 309{
 310	sock_reset_flag(sk, SOCK_MEMALLOC);
 311	sk->sk_allocation &= ~__GFP_MEMALLOC;
 312	static_branch_dec(&memalloc_socks_key);
 313
 314	/*
 315	 * SOCK_MEMALLOC is allowed to ignore rmem limits to ensure forward
 316	 * progress of swapping. SOCK_MEMALLOC may be cleared while
 317	 * it has rmem allocations due to the last swapfile being deactivated
 318	 * but there is a risk that the socket is unusable due to exceeding
 319	 * the rmem limits. Reclaim the reserves and obey rmem limits again.
 320	 */
 321	sk_mem_reclaim(sk);
 322}
 323EXPORT_SYMBOL_GPL(sk_clear_memalloc);
 324
 325int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
 326{
 327	int ret;
 328	unsigned int noreclaim_flag;
 329
 330	/* these should have been dropped before queueing */
 331	BUG_ON(!sock_flag(sk, SOCK_MEMALLOC));
 332
 333	noreclaim_flag = memalloc_noreclaim_save();
 334	ret = INDIRECT_CALL_INET(sk->sk_backlog_rcv,
 335				 tcp_v6_do_rcv,
 336				 tcp_v4_do_rcv,
 337				 sk, skb);
 338	memalloc_noreclaim_restore(noreclaim_flag);
 339
 340	return ret;
 341}
 342EXPORT_SYMBOL(__sk_backlog_rcv);
 343
 344void sk_error_report(struct sock *sk)
 345{
 346	sk->sk_error_report(sk);
 347
 348	switch (sk->sk_family) {
 349	case AF_INET:
 350		fallthrough;
 351	case AF_INET6:
 352		trace_inet_sk_error_report(sk);
 353		break;
 354	default:
 355		break;
 356	}
 357}
 358EXPORT_SYMBOL(sk_error_report);
 359
 360int sock_get_timeout(long timeo, void *optval, bool old_timeval)
 361{
 362	struct __kernel_sock_timeval tv;
 
 363
 364	if (timeo == MAX_SCHEDULE_TIMEOUT) {
 365		tv.tv_sec = 0;
 366		tv.tv_usec = 0;
 367	} else {
 368		tv.tv_sec = timeo / HZ;
 369		tv.tv_usec = ((timeo % HZ) * USEC_PER_SEC) / HZ;
 370	}
 371
 372	if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) {
 373		struct old_timeval32 tv32 = { tv.tv_sec, tv.tv_usec };
 374		*(struct old_timeval32 *)optval = tv32;
 375		return sizeof(tv32);
 376	}
 377
 378	if (old_timeval) {
 379		struct __kernel_old_timeval old_tv;
 380		old_tv.tv_sec = tv.tv_sec;
 381		old_tv.tv_usec = tv.tv_usec;
 382		*(struct __kernel_old_timeval *)optval = old_tv;
 383		return sizeof(old_tv);
 
 
 
 384	}
 385
 386	*(struct __kernel_sock_timeval *)optval = tv;
 387	return sizeof(tv);
 388}
 389EXPORT_SYMBOL(sock_get_timeout);
 390
 391int sock_copy_user_timeval(struct __kernel_sock_timeval *tv,
 392			   sockptr_t optval, int optlen, bool old_timeval)
 393{
 
 
 394	if (old_timeval && in_compat_syscall() && !COMPAT_USE_64BIT_TIME) {
 395		struct old_timeval32 tv32;
 396
 397		if (optlen < sizeof(tv32))
 398			return -EINVAL;
 399
 400		if (copy_from_sockptr(&tv32, optval, sizeof(tv32)))
 401			return -EFAULT;
 402		tv->tv_sec = tv32.tv_sec;
 403		tv->tv_usec = tv32.tv_usec;
 404	} else if (old_timeval) {
 405		struct __kernel_old_timeval old_tv;
 406
 407		if (optlen < sizeof(old_tv))
 408			return -EINVAL;
 409		if (copy_from_sockptr(&old_tv, optval, sizeof(old_tv)))
 410			return -EFAULT;
 411		tv->tv_sec = old_tv.tv_sec;
 412		tv->tv_usec = old_tv.tv_usec;
 413	} else {
 414		if (optlen < sizeof(*tv))
 415			return -EINVAL;
 416		if (copy_from_sockptr(tv, optval, sizeof(*tv)))
 417			return -EFAULT;
 418	}
 419
 420	return 0;
 421}
 422EXPORT_SYMBOL(sock_copy_user_timeval);
 423
 424static int sock_set_timeout(long *timeo_p, sockptr_t optval, int optlen,
 425			    bool old_timeval)
 426{
 427	struct __kernel_sock_timeval tv;
 428	int err = sock_copy_user_timeval(&tv, optval, optlen, old_timeval);
 429	long val;
 430
 431	if (err)
 432		return err;
 433
 434	if (tv.tv_usec < 0 || tv.tv_usec >= USEC_PER_SEC)
 435		return -EDOM;
 436
 437	if (tv.tv_sec < 0) {
 438		static int warned __read_mostly;
 439
 440		WRITE_ONCE(*timeo_p, 0);
 441		if (warned < 10 && net_ratelimit()) {
 442			warned++;
 443			pr_info("%s: `%s' (pid %d) tries to set negative timeout\n",
 444				__func__, current->comm, task_pid_nr(current));
 445		}
 446		return 0;
 447	}
 448	val = MAX_SCHEDULE_TIMEOUT;
 449	if ((tv.tv_sec || tv.tv_usec) &&
 450	    (tv.tv_sec < (MAX_SCHEDULE_TIMEOUT / HZ - 1)))
 451		val = tv.tv_sec * HZ + DIV_ROUND_UP((unsigned long)tv.tv_usec,
 452						    USEC_PER_SEC / HZ);
 453	WRITE_ONCE(*timeo_p, val);
 454	return 0;
 455}
 456
 
 
 
 
 
 
 
 
 
 
 
 
 457static bool sock_needs_netstamp(const struct sock *sk)
 458{
 459	switch (sk->sk_family) {
 460	case AF_UNSPEC:
 461	case AF_UNIX:
 462		return false;
 463	default:
 464		return true;
 465	}
 466}
 467
 468static void sock_disable_timestamp(struct sock *sk, unsigned long flags)
 469{
 470	if (sk->sk_flags & flags) {
 471		sk->sk_flags &= ~flags;
 472		if (sock_needs_netstamp(sk) &&
 473		    !(sk->sk_flags & SK_FLAGS_TIMESTAMP))
 474			net_disable_timestamp();
 475	}
 476}
 477
 478
 479int __sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 480{
 481	unsigned long flags;
 482	struct sk_buff_head *list = &sk->sk_receive_queue;
 483
 484	if (atomic_read(&sk->sk_rmem_alloc) >= READ_ONCE(sk->sk_rcvbuf)) {
 485		atomic_inc(&sk->sk_drops);
 486		trace_sock_rcvqueue_full(sk, skb);
 487		return -ENOMEM;
 488	}
 489
 490	if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
 491		atomic_inc(&sk->sk_drops);
 492		return -ENOBUFS;
 493	}
 494
 495	skb->dev = NULL;
 496	skb_set_owner_r(skb, sk);
 497
 498	/* we escape from rcu protected region, make sure we dont leak
 499	 * a norefcounted dst
 500	 */
 501	skb_dst_force(skb);
 502
 503	spin_lock_irqsave(&list->lock, flags);
 504	sock_skb_set_dropcount(sk, skb);
 505	__skb_queue_tail(list, skb);
 506	spin_unlock_irqrestore(&list->lock, flags);
 507
 508	if (!sock_flag(sk, SOCK_DEAD))
 509		sk->sk_data_ready(sk);
 510	return 0;
 511}
 512EXPORT_SYMBOL(__sock_queue_rcv_skb);
 513
 514int sock_queue_rcv_skb_reason(struct sock *sk, struct sk_buff *skb,
 515			      enum skb_drop_reason *reason)
 516{
 517	enum skb_drop_reason drop_reason;
 518	int err;
 519
 520	err = sk_filter(sk, skb);
 521	if (err) {
 522		drop_reason = SKB_DROP_REASON_SOCKET_FILTER;
 523		goto out;
 524	}
 525	err = __sock_queue_rcv_skb(sk, skb);
 526	switch (err) {
 527	case -ENOMEM:
 528		drop_reason = SKB_DROP_REASON_SOCKET_RCVBUFF;
 529		break;
 530	case -ENOBUFS:
 531		drop_reason = SKB_DROP_REASON_PROTO_MEM;
 532		break;
 533	default:
 534		drop_reason = SKB_NOT_DROPPED_YET;
 535		break;
 536	}
 537out:
 538	if (reason)
 539		*reason = drop_reason;
 540	return err;
 541}
 542EXPORT_SYMBOL(sock_queue_rcv_skb_reason);
 543
 544int __sk_receive_skb(struct sock *sk, struct sk_buff *skb,
 545		     const int nested, unsigned int trim_cap, bool refcounted)
 546{
 547	int rc = NET_RX_SUCCESS;
 548
 549	if (sk_filter_trim_cap(sk, skb, trim_cap))
 550		goto discard_and_relse;
 551
 552	skb->dev = NULL;
 553
 554	if (sk_rcvqueues_full(sk, READ_ONCE(sk->sk_rcvbuf))) {
 555		atomic_inc(&sk->sk_drops);
 556		goto discard_and_relse;
 557	}
 558	if (nested)
 559		bh_lock_sock_nested(sk);
 560	else
 561		bh_lock_sock(sk);
 562	if (!sock_owned_by_user(sk)) {
 563		/*
 564		 * trylock + unlock semantics:
 565		 */
 566		mutex_acquire(&sk->sk_lock.dep_map, 0, 1, _RET_IP_);
 567
 568		rc = sk_backlog_rcv(sk, skb);
 569
 570		mutex_release(&sk->sk_lock.dep_map, _RET_IP_);
 571	} else if (sk_add_backlog(sk, skb, READ_ONCE(sk->sk_rcvbuf))) {
 572		bh_unlock_sock(sk);
 573		atomic_inc(&sk->sk_drops);
 574		goto discard_and_relse;
 575	}
 576
 577	bh_unlock_sock(sk);
 578out:
 579	if (refcounted)
 580		sock_put(sk);
 581	return rc;
 582discard_and_relse:
 583	kfree_skb(skb);
 584	goto out;
 585}
 586EXPORT_SYMBOL(__sk_receive_skb);
 587
 588INDIRECT_CALLABLE_DECLARE(struct dst_entry *ip6_dst_check(struct dst_entry *,
 589							  u32));
 590INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
 591							   u32));
 592struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
 593{
 594	struct dst_entry *dst = __sk_dst_get(sk);
 595
 596	if (dst && dst->obsolete &&
 597	    INDIRECT_CALL_INET(dst->ops->check, ip6_dst_check, ipv4_dst_check,
 598			       dst, cookie) == NULL) {
 599		sk_tx_queue_clear(sk);
 600		WRITE_ONCE(sk->sk_dst_pending_confirm, 0);
 601		RCU_INIT_POINTER(sk->sk_dst_cache, NULL);
 602		dst_release(dst);
 603		return NULL;
 604	}
 605
 606	return dst;
 607}
 608EXPORT_SYMBOL(__sk_dst_check);
 609
 610struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie)
 611{
 612	struct dst_entry *dst = sk_dst_get(sk);
 613
 614	if (dst && dst->obsolete &&
 615	    INDIRECT_CALL_INET(dst->ops->check, ip6_dst_check, ipv4_dst_check,
 616			       dst, cookie) == NULL) {
 617		sk_dst_reset(sk);
 618		dst_release(dst);
 619		return NULL;
 620	}
 621
 622	return dst;
 623}
 624EXPORT_SYMBOL(sk_dst_check);
 625
 626static int sock_bindtoindex_locked(struct sock *sk, int ifindex)
 627{
 628	int ret = -ENOPROTOOPT;
 629#ifdef CONFIG_NETDEVICES
 630	struct net *net = sock_net(sk);
 631
 632	/* Sorry... */
 633	ret = -EPERM;
 634	if (sk->sk_bound_dev_if && !ns_capable(net->user_ns, CAP_NET_RAW))
 635		goto out;
 636
 637	ret = -EINVAL;
 638	if (ifindex < 0)
 639		goto out;
 640
 641	/* Paired with all READ_ONCE() done locklessly. */
 642	WRITE_ONCE(sk->sk_bound_dev_if, ifindex);
 643
 644	if (sk->sk_prot->rehash)
 645		sk->sk_prot->rehash(sk);
 646	sk_dst_reset(sk);
 647
 648	ret = 0;
 649
 650out:
 651#endif
 652
 653	return ret;
 654}
 655
 656int sock_bindtoindex(struct sock *sk, int ifindex, bool lock_sk)
 657{
 658	int ret;
 659
 660	if (lock_sk)
 661		lock_sock(sk);
 662	ret = sock_bindtoindex_locked(sk, ifindex);
 663	if (lock_sk)
 664		release_sock(sk);
 665
 666	return ret;
 667}
 668EXPORT_SYMBOL(sock_bindtoindex);
 669
 670static int sock_setbindtodevice(struct sock *sk, sockptr_t optval, int optlen)
 671{
 672	int ret = -ENOPROTOOPT;
 673#ifdef CONFIG_NETDEVICES
 674	struct net *net = sock_net(sk);
 675	char devname[IFNAMSIZ];
 676	int index;
 677
 678	ret = -EINVAL;
 679	if (optlen < 0)
 680		goto out;
 681
 682	/* Bind this socket to a particular device like "eth0",
 683	 * as specified in the passed interface name. If the
 684	 * name is "" or the option length is zero the socket
 685	 * is not bound.
 686	 */
 687	if (optlen > IFNAMSIZ - 1)
 688		optlen = IFNAMSIZ - 1;
 689	memset(devname, 0, sizeof(devname));
 690
 691	ret = -EFAULT;
 692	if (copy_from_sockptr(devname, optval, optlen))
 693		goto out;
 694
 695	index = 0;
 696	if (devname[0] != '\0') {
 697		struct net_device *dev;
 698
 699		rcu_read_lock();
 700		dev = dev_get_by_name_rcu(net, devname);
 701		if (dev)
 702			index = dev->ifindex;
 703		rcu_read_unlock();
 704		ret = -ENODEV;
 705		if (!dev)
 706			goto out;
 707	}
 708
 709	sockopt_lock_sock(sk);
 710	ret = sock_bindtoindex_locked(sk, index);
 711	sockopt_release_sock(sk);
 
 712out:
 713#endif
 714
 715	return ret;
 716}
 717
 718static int sock_getbindtodevice(struct sock *sk, sockptr_t optval,
 719				sockptr_t optlen, int len)
 720{
 721	int ret = -ENOPROTOOPT;
 722#ifdef CONFIG_NETDEVICES
 723	int bound_dev_if = READ_ONCE(sk->sk_bound_dev_if);
 724	struct net *net = sock_net(sk);
 725	char devname[IFNAMSIZ];
 726
 727	if (bound_dev_if == 0) {
 728		len = 0;
 729		goto zero;
 730	}
 731
 732	ret = -EINVAL;
 733	if (len < IFNAMSIZ)
 734		goto out;
 735
 736	ret = netdev_get_name(net, devname, bound_dev_if);
 737	if (ret)
 738		goto out;
 739
 740	len = strlen(devname) + 1;
 741
 742	ret = -EFAULT;
 743	if (copy_to_sockptr(optval, devname, len))
 744		goto out;
 745
 746zero:
 747	ret = -EFAULT;
 748	if (copy_to_sockptr(optlen, &len, sizeof(int)))
 749		goto out;
 750
 751	ret = 0;
 752
 753out:
 754#endif
 755
 756	return ret;
 757}
 758
 759bool sk_mc_loop(const struct sock *sk)
 
 
 
 
 
 
 
 
 760{
 761	if (dev_recursion_level())
 762		return false;
 763	if (!sk)
 764		return true;
 765	/* IPV6_ADDRFORM can change sk->sk_family under us. */
 766	switch (READ_ONCE(sk->sk_family)) {
 767	case AF_INET:
 768		return inet_test_bit(MC_LOOP, sk);
 769#if IS_ENABLED(CONFIG_IPV6)
 770	case AF_INET6:
 771		return inet6_test_bit(MC6_LOOP, sk);
 772#endif
 773	}
 774	WARN_ON_ONCE(1);
 775	return true;
 776}
 777EXPORT_SYMBOL(sk_mc_loop);
 778
 779void sock_set_reuseaddr(struct sock *sk)
 780{
 781	lock_sock(sk);
 782	sk->sk_reuse = SK_CAN_REUSE;
 783	release_sock(sk);
 784}
 785EXPORT_SYMBOL(sock_set_reuseaddr);
 786
 787void sock_set_reuseport(struct sock *sk)
 788{
 789	lock_sock(sk);
 790	sk->sk_reuseport = true;
 791	release_sock(sk);
 792}
 793EXPORT_SYMBOL(sock_set_reuseport);
 794
 795void sock_no_linger(struct sock *sk)
 796{
 797	lock_sock(sk);
 798	WRITE_ONCE(sk->sk_lingertime, 0);
 799	sock_set_flag(sk, SOCK_LINGER);
 800	release_sock(sk);
 801}
 802EXPORT_SYMBOL(sock_no_linger);
 803
 804void sock_set_priority(struct sock *sk, u32 priority)
 805{
 806	WRITE_ONCE(sk->sk_priority, priority);
 807}
 808EXPORT_SYMBOL(sock_set_priority);
 809
 810void sock_set_sndtimeo(struct sock *sk, s64 secs)
 811{
 812	lock_sock(sk);
 813	if (secs && secs < MAX_SCHEDULE_TIMEOUT / HZ - 1)
 814		WRITE_ONCE(sk->sk_sndtimeo, secs * HZ);
 815	else
 816		WRITE_ONCE(sk->sk_sndtimeo, MAX_SCHEDULE_TIMEOUT);
 817	release_sock(sk);
 818}
 819EXPORT_SYMBOL(sock_set_sndtimeo);
 820
 821static void __sock_set_timestamps(struct sock *sk, bool val, bool new, bool ns)
 822{
 823	sock_valbool_flag(sk, SOCK_RCVTSTAMP, val);
 824	sock_valbool_flag(sk, SOCK_RCVTSTAMPNS, val && ns);
 825	if (val)  {
 826		sock_valbool_flag(sk, SOCK_TSTAMP_NEW, new);
 827		sock_enable_timestamp(sk, SOCK_TIMESTAMP);
 828	}
 829}
 830
 831void sock_enable_timestamps(struct sock *sk)
 832{
 833	lock_sock(sk);
 834	__sock_set_timestamps(sk, true, false, true);
 835	release_sock(sk);
 836}
 837EXPORT_SYMBOL(sock_enable_timestamps);
 838
 839void sock_set_timestamp(struct sock *sk, int optname, bool valbool)
 840{
 841	switch (optname) {
 842	case SO_TIMESTAMP_OLD:
 843		__sock_set_timestamps(sk, valbool, false, false);
 844		break;
 845	case SO_TIMESTAMP_NEW:
 846		__sock_set_timestamps(sk, valbool, true, false);
 847		break;
 848	case SO_TIMESTAMPNS_OLD:
 849		__sock_set_timestamps(sk, valbool, false, true);
 850		break;
 851	case SO_TIMESTAMPNS_NEW:
 852		__sock_set_timestamps(sk, valbool, true, true);
 853		break;
 854	}
 855}
 856
 857static int sock_timestamping_bind_phc(struct sock *sk, int phc_index)
 858{
 859	struct net *net = sock_net(sk);
 860	struct net_device *dev = NULL;
 861	bool match = false;
 862	int *vclock_index;
 863	int i, num;
 864
 865	if (sk->sk_bound_dev_if)
 866		dev = dev_get_by_index(net, sk->sk_bound_dev_if);
 867
 868	if (!dev) {
 869		pr_err("%s: sock not bind to device\n", __func__);
 870		return -EOPNOTSUPP;
 871	}
 872
 873	num = ethtool_get_phc_vclocks(dev, &vclock_index);
 874	dev_put(dev);
 875
 876	for (i = 0; i < num; i++) {
 877		if (*(vclock_index + i) == phc_index) {
 878			match = true;
 879			break;
 880		}
 881	}
 882
 883	if (num > 0)
 884		kfree(vclock_index);
 885
 886	if (!match)
 887		return -EINVAL;
 888
 889	WRITE_ONCE(sk->sk_bind_phc, phc_index);
 890
 891	return 0;
 892}
 893
 894int sock_set_timestamping(struct sock *sk, int optname,
 895			  struct so_timestamping timestamping)
 896{
 897	int val = timestamping.flags;
 898	int ret;
 899
 900	if (val & ~SOF_TIMESTAMPING_MASK)
 901		return -EINVAL;
 902
 903	if (val & SOF_TIMESTAMPING_OPT_ID_TCP &&
 904	    !(val & SOF_TIMESTAMPING_OPT_ID))
 905		return -EINVAL;
 906
 907	if (val & SOF_TIMESTAMPING_OPT_ID &&
 908	    !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) {
 909		if (sk_is_tcp(sk)) {
 910			if ((1 << sk->sk_state) &
 911			    (TCPF_CLOSE | TCPF_LISTEN))
 912				return -EINVAL;
 913			if (val & SOF_TIMESTAMPING_OPT_ID_TCP)
 914				atomic_set(&sk->sk_tskey, tcp_sk(sk)->write_seq);
 915			else
 916				atomic_set(&sk->sk_tskey, tcp_sk(sk)->snd_una);
 917		} else {
 918			atomic_set(&sk->sk_tskey, 0);
 919		}
 920	}
 921
 922	if (val & SOF_TIMESTAMPING_OPT_STATS &&
 923	    !(val & SOF_TIMESTAMPING_OPT_TSONLY))
 924		return -EINVAL;
 925
 926	if (val & SOF_TIMESTAMPING_BIND_PHC) {
 927		ret = sock_timestamping_bind_phc(sk, timestamping.bind_phc);
 928		if (ret)
 929			return ret;
 930	}
 931
 932	WRITE_ONCE(sk->sk_tsflags, val);
 933	sock_valbool_flag(sk, SOCK_TSTAMP_NEW, optname == SO_TIMESTAMPING_NEW);
 934
 935	if (val & SOF_TIMESTAMPING_RX_SOFTWARE)
 936		sock_enable_timestamp(sk,
 937				      SOCK_TIMESTAMPING_RX_SOFTWARE);
 938	else
 939		sock_disable_timestamp(sk,
 940				       (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE));
 941	return 0;
 942}
 943
 944void sock_set_keepalive(struct sock *sk)
 945{
 946	lock_sock(sk);
 947	if (sk->sk_prot->keepalive)
 948		sk->sk_prot->keepalive(sk, true);
 949	sock_valbool_flag(sk, SOCK_KEEPOPEN, true);
 950	release_sock(sk);
 951}
 952EXPORT_SYMBOL(sock_set_keepalive);
 953
 954static void __sock_set_rcvbuf(struct sock *sk, int val)
 955{
 956	/* Ensure val * 2 fits into an int, to prevent max_t() from treating it
 957	 * as a negative value.
 958	 */
 959	val = min_t(int, val, INT_MAX / 2);
 960	sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
 961
 962	/* We double it on the way in to account for "struct sk_buff" etc.
 963	 * overhead.   Applications assume that the SO_RCVBUF setting they make
 964	 * will allow that much actual data to be received on that socket.
 965	 *
 966	 * Applications are unaware that "struct sk_buff" and other overheads
 967	 * allocate from the receive buffer during socket buffer allocation.
 968	 *
 969	 * And after considering the possible alternatives, returning the value
 970	 * we actually used in getsockopt is the most desirable behavior.
 971	 */
 972	WRITE_ONCE(sk->sk_rcvbuf, max_t(int, val * 2, SOCK_MIN_RCVBUF));
 973}
 974
 975void sock_set_rcvbuf(struct sock *sk, int val)
 976{
 977	lock_sock(sk);
 978	__sock_set_rcvbuf(sk, val);
 979	release_sock(sk);
 980}
 981EXPORT_SYMBOL(sock_set_rcvbuf);
 982
 983static void __sock_set_mark(struct sock *sk, u32 val)
 984{
 985	if (val != sk->sk_mark) {
 986		WRITE_ONCE(sk->sk_mark, val);
 987		sk_dst_reset(sk);
 988	}
 989}
 990
 991void sock_set_mark(struct sock *sk, u32 val)
 992{
 993	lock_sock(sk);
 994	__sock_set_mark(sk, val);
 995	release_sock(sk);
 996}
 997EXPORT_SYMBOL(sock_set_mark);
 998
 999static void sock_release_reserved_memory(struct sock *sk, int bytes)
1000{
1001	/* Round down bytes to multiple of pages */
1002	bytes = round_down(bytes, PAGE_SIZE);
1003
1004	WARN_ON(bytes > sk->sk_reserved_mem);
1005	WRITE_ONCE(sk->sk_reserved_mem, sk->sk_reserved_mem - bytes);
1006	sk_mem_reclaim(sk);
1007}
1008
1009static int sock_reserve_memory(struct sock *sk, int bytes)
1010{
1011	long allocated;
1012	bool charged;
1013	int pages;
1014
1015	if (!mem_cgroup_sockets_enabled || !sk->sk_memcg || !sk_has_account(sk))
1016		return -EOPNOTSUPP;
1017
1018	if (!bytes)
1019		return 0;
1020
1021	pages = sk_mem_pages(bytes);
1022
1023	/* pre-charge to memcg */
1024	charged = mem_cgroup_charge_skmem(sk->sk_memcg, pages,
1025					  GFP_KERNEL | __GFP_RETRY_MAYFAIL);
1026	if (!charged)
1027		return -ENOMEM;
1028
1029	/* pre-charge to forward_alloc */
1030	sk_memory_allocated_add(sk, pages);
1031	allocated = sk_memory_allocated(sk);
1032	/* If the system goes into memory pressure with this
1033	 * precharge, give up and return error.
1034	 */
1035	if (allocated > sk_prot_mem_limits(sk, 1)) {
1036		sk_memory_allocated_sub(sk, pages);
1037		mem_cgroup_uncharge_skmem(sk->sk_memcg, pages);
1038		return -ENOMEM;
1039	}
1040	sk_forward_alloc_add(sk, pages << PAGE_SHIFT);
1041
1042	WRITE_ONCE(sk->sk_reserved_mem,
1043		   sk->sk_reserved_mem + (pages << PAGE_SHIFT));
1044
1045	return 0;
1046}
1047
1048#ifdef CONFIG_PAGE_POOL
1049
1050/* This is the number of tokens and frags that the user can SO_DEVMEM_DONTNEED
1051 * in 1 syscall. The limit exists to limit the amount of memory the kernel
1052 * allocates to copy these tokens, and to prevent looping over the frags for
1053 * too long.
1054 */
1055#define MAX_DONTNEED_TOKENS 128
1056#define MAX_DONTNEED_FRAGS 1024
1057
1058static noinline_for_stack int
1059sock_devmem_dontneed(struct sock *sk, sockptr_t optval, unsigned int optlen)
1060{
1061	unsigned int num_tokens, i, j, k, netmem_num = 0;
1062	struct dmabuf_token *tokens;
1063	int ret = 0, num_frags = 0;
1064	netmem_ref netmems[16];
1065
1066	if (!sk_is_tcp(sk))
1067		return -EBADF;
1068
1069	if (optlen % sizeof(*tokens) ||
1070	    optlen > sizeof(*tokens) * MAX_DONTNEED_TOKENS)
1071		return -EINVAL;
1072
1073	num_tokens = optlen / sizeof(*tokens);
1074	tokens = kvmalloc_array(num_tokens, sizeof(*tokens), GFP_KERNEL);
1075	if (!tokens)
1076		return -ENOMEM;
1077
1078	if (copy_from_sockptr(tokens, optval, optlen)) {
1079		kvfree(tokens);
1080		return -EFAULT;
1081	}
1082
1083	xa_lock_bh(&sk->sk_user_frags);
1084	for (i = 0; i < num_tokens; i++) {
1085		for (j = 0; j < tokens[i].token_count; j++) {
1086			if (++num_frags > MAX_DONTNEED_FRAGS)
1087				goto frag_limit_reached;
1088
1089			netmem_ref netmem = (__force netmem_ref)__xa_erase(
1090				&sk->sk_user_frags, tokens[i].token_start + j);
1091
1092			if (!netmem || WARN_ON_ONCE(!netmem_is_net_iov(netmem)))
1093				continue;
1094
1095			netmems[netmem_num++] = netmem;
1096			if (netmem_num == ARRAY_SIZE(netmems)) {
1097				xa_unlock_bh(&sk->sk_user_frags);
1098				for (k = 0; k < netmem_num; k++)
1099					WARN_ON_ONCE(!napi_pp_put_page(netmems[k]));
1100				netmem_num = 0;
1101				xa_lock_bh(&sk->sk_user_frags);
1102			}
1103			ret++;
1104		}
1105	}
1106
1107frag_limit_reached:
1108	xa_unlock_bh(&sk->sk_user_frags);
1109	for (k = 0; k < netmem_num; k++)
1110		WARN_ON_ONCE(!napi_pp_put_page(netmems[k]));
1111
1112	kvfree(tokens);
1113	return ret;
1114}
1115#endif
1116
1117void sockopt_lock_sock(struct sock *sk)
1118{
1119	/* When current->bpf_ctx is set, the setsockopt is called from
1120	 * a bpf prog.  bpf has ensured the sk lock has been
1121	 * acquired before calling setsockopt().
1122	 */
1123	if (has_current_bpf_ctx())
1124		return;
1125
1126	lock_sock(sk);
1127}
1128EXPORT_SYMBOL(sockopt_lock_sock);
1129
1130void sockopt_release_sock(struct sock *sk)
1131{
1132	if (has_current_bpf_ctx())
1133		return;
1134
1135	release_sock(sk);
1136}
1137EXPORT_SYMBOL(sockopt_release_sock);
1138
1139bool sockopt_ns_capable(struct user_namespace *ns, int cap)
1140{
1141	return has_current_bpf_ctx() || ns_capable(ns, cap);
1142}
1143EXPORT_SYMBOL(sockopt_ns_capable);
1144
1145bool sockopt_capable(int cap)
1146{
1147	return has_current_bpf_ctx() || capable(cap);
1148}
1149EXPORT_SYMBOL(sockopt_capable);
1150
1151static int sockopt_validate_clockid(__kernel_clockid_t value)
1152{
1153	switch (value) {
1154	case CLOCK_REALTIME:
1155	case CLOCK_MONOTONIC:
1156	case CLOCK_TAI:
1157		return 0;
1158	}
1159	return -EINVAL;
1160}
1161
1162/*
1163 *	This is meant for all protocols to use and covers goings on
1164 *	at the socket level. Everything here is generic.
1165 */
1166
1167int sk_setsockopt(struct sock *sk, int level, int optname,
1168		  sockptr_t optval, unsigned int optlen)
1169{
1170	struct so_timestamping timestamping;
1171	struct socket *sock = sk->sk_socket;
1172	struct sock_txtime sk_txtime;
 
1173	int val;
1174	int valbool;
1175	struct linger ling;
1176	int ret = 0;
1177
1178	/*
1179	 *	Options without arguments
1180	 */
1181
1182	if (optname == SO_BINDTODEVICE)
1183		return sock_setbindtodevice(sk, optval, optlen);
1184
1185	if (optlen < sizeof(int))
1186		return -EINVAL;
1187
1188	if (copy_from_sockptr(&val, optval, sizeof(val)))
1189		return -EFAULT;
1190
1191	valbool = val ? 1 : 0;
1192
1193	/* handle options which do not require locking the socket. */
1194	switch (optname) {
1195	case SO_PRIORITY:
1196		if ((val >= 0 && val <= 6) ||
1197		    sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_RAW) ||
1198		    sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
1199			sock_set_priority(sk, val);
1200			return 0;
1201		}
1202		return -EPERM;
1203	case SO_PASSSEC:
1204		assign_bit(SOCK_PASSSEC, &sock->flags, valbool);
1205		return 0;
1206	case SO_PASSCRED:
1207		assign_bit(SOCK_PASSCRED, &sock->flags, valbool);
1208		return 0;
1209	case SO_PASSPIDFD:
1210		assign_bit(SOCK_PASSPIDFD, &sock->flags, valbool);
1211		return 0;
1212	case SO_TYPE:
1213	case SO_PROTOCOL:
1214	case SO_DOMAIN:
1215	case SO_ERROR:
1216		return -ENOPROTOOPT;
1217#ifdef CONFIG_NET_RX_BUSY_POLL
1218	case SO_BUSY_POLL:
1219		if (val < 0)
1220			return -EINVAL;
1221		WRITE_ONCE(sk->sk_ll_usec, val);
1222		return 0;
1223	case SO_PREFER_BUSY_POLL:
1224		if (valbool && !sockopt_capable(CAP_NET_ADMIN))
1225			return -EPERM;
1226		WRITE_ONCE(sk->sk_prefer_busy_poll, valbool);
1227		return 0;
1228	case SO_BUSY_POLL_BUDGET:
1229		if (val > READ_ONCE(sk->sk_busy_poll_budget) &&
1230		    !sockopt_capable(CAP_NET_ADMIN))
1231			return -EPERM;
1232		if (val < 0 || val > U16_MAX)
1233			return -EINVAL;
1234		WRITE_ONCE(sk->sk_busy_poll_budget, val);
1235		return 0;
1236#endif
1237	case SO_MAX_PACING_RATE:
1238		{
1239		unsigned long ulval = (val == ~0U) ? ~0UL : (unsigned int)val;
1240		unsigned long pacing_rate;
1241
1242		if (sizeof(ulval) != sizeof(val) &&
1243		    optlen >= sizeof(ulval) &&
1244		    copy_from_sockptr(&ulval, optval, sizeof(ulval))) {
1245			return -EFAULT;
1246		}
1247		if (ulval != ~0UL)
1248			cmpxchg(&sk->sk_pacing_status,
1249				SK_PACING_NONE,
1250				SK_PACING_NEEDED);
1251		/* Pairs with READ_ONCE() from sk_getsockopt() */
1252		WRITE_ONCE(sk->sk_max_pacing_rate, ulval);
1253		pacing_rate = READ_ONCE(sk->sk_pacing_rate);
1254		if (ulval < pacing_rate)
1255			WRITE_ONCE(sk->sk_pacing_rate, ulval);
1256		return 0;
1257		}
1258	case SO_TXREHASH:
1259		if (val < -1 || val > 1)
1260			return -EINVAL;
1261		if ((u8)val == SOCK_TXREHASH_DEFAULT)
1262			val = READ_ONCE(sock_net(sk)->core.sysctl_txrehash);
1263		/* Paired with READ_ONCE() in tcp_rtx_synack()
1264		 * and sk_getsockopt().
1265		 */
1266		WRITE_ONCE(sk->sk_txrehash, (u8)val);
1267		return 0;
1268	case SO_PEEK_OFF:
1269		{
1270		int (*set_peek_off)(struct sock *sk, int val);
1271
1272		set_peek_off = READ_ONCE(sock->ops)->set_peek_off;
1273		if (set_peek_off)
1274			ret = set_peek_off(sk, val);
1275		else
1276			ret = -EOPNOTSUPP;
1277		return ret;
1278		}
1279#ifdef CONFIG_PAGE_POOL
1280	case SO_DEVMEM_DONTNEED:
1281		return sock_devmem_dontneed(sk, optval, optlen);
1282#endif
1283	}
1284
1285	sockopt_lock_sock(sk);
1286
1287	switch (optname) {
1288	case SO_DEBUG:
1289		if (val && !sockopt_capable(CAP_NET_ADMIN))
1290			ret = -EACCES;
1291		else
1292			sock_valbool_flag(sk, SOCK_DBG, valbool);
1293		break;
1294	case SO_REUSEADDR:
1295		sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
1296		break;
1297	case SO_REUSEPORT:
1298		if (valbool && !sk_is_inet(sk))
1299			ret = -EOPNOTSUPP;
1300		else
1301			sk->sk_reuseport = valbool;
 
 
 
1302		break;
1303	case SO_DONTROUTE:
1304		sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
1305		sk_dst_reset(sk);
1306		break;
1307	case SO_BROADCAST:
1308		sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
1309		break;
1310	case SO_SNDBUF:
1311		/* Don't error on this BSD doesn't and if you think
1312		 * about it this is right. Otherwise apps have to
1313		 * play 'guess the biggest size' games. RCVBUF/SNDBUF
1314		 * are treated in BSD as hints
1315		 */
1316		val = min_t(u32, val, READ_ONCE(sysctl_wmem_max));
1317set_sndbuf:
1318		/* Ensure val * 2 fits into an int, to prevent max_t()
1319		 * from treating it as a negative value.
1320		 */
1321		val = min_t(int, val, INT_MAX / 2);
1322		sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
1323		WRITE_ONCE(sk->sk_sndbuf,
1324			   max_t(int, val * 2, SOCK_MIN_SNDBUF));
1325		/* Wake up sending tasks if we upped the value. */
1326		sk->sk_write_space(sk);
1327		break;
1328
1329	case SO_SNDBUFFORCE:
1330		if (!sockopt_capable(CAP_NET_ADMIN)) {
1331			ret = -EPERM;
1332			break;
1333		}
1334
1335		/* No negative values (to prevent underflow, as val will be
1336		 * multiplied by 2).
1337		 */
1338		if (val < 0)
1339			val = 0;
1340		goto set_sndbuf;
1341
1342	case SO_RCVBUF:
1343		/* Don't error on this BSD doesn't and if you think
1344		 * about it this is right. Otherwise apps have to
1345		 * play 'guess the biggest size' games. RCVBUF/SNDBUF
1346		 * are treated in BSD as hints
1347		 */
1348		__sock_set_rcvbuf(sk, min_t(u32, val, READ_ONCE(sysctl_rmem_max)));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1349		break;
1350
1351	case SO_RCVBUFFORCE:
1352		if (!sockopt_capable(CAP_NET_ADMIN)) {
1353			ret = -EPERM;
1354			break;
1355		}
1356
1357		/* No negative values (to prevent underflow, as val will be
1358		 * multiplied by 2).
1359		 */
1360		__sock_set_rcvbuf(sk, max(val, 0));
1361		break;
 
1362
1363	case SO_KEEPALIVE:
1364		if (sk->sk_prot->keepalive)
1365			sk->sk_prot->keepalive(sk, valbool);
1366		sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
1367		break;
1368
1369	case SO_OOBINLINE:
1370		sock_valbool_flag(sk, SOCK_URGINLINE, valbool);
1371		break;
1372
1373	case SO_NO_CHECK:
1374		sk->sk_no_check_tx = valbool;
1375		break;
1376
 
 
 
 
 
 
 
 
1377	case SO_LINGER:
1378		if (optlen < sizeof(ling)) {
1379			ret = -EINVAL;	/* 1003.1g */
1380			break;
1381		}
1382		if (copy_from_sockptr(&ling, optval, sizeof(ling))) {
1383			ret = -EFAULT;
1384			break;
1385		}
1386		if (!ling.l_onoff) {
1387			sock_reset_flag(sk, SOCK_LINGER);
1388		} else {
1389			unsigned long t_sec = ling.l_linger;
1390
1391			if (t_sec >= MAX_SCHEDULE_TIMEOUT / HZ)
1392				WRITE_ONCE(sk->sk_lingertime, MAX_SCHEDULE_TIMEOUT);
1393			else
1394				WRITE_ONCE(sk->sk_lingertime, t_sec * HZ);
 
1395			sock_set_flag(sk, SOCK_LINGER);
1396		}
1397		break;
1398
1399	case SO_BSDCOMPAT:
 
 
 
 
 
 
 
 
1400		break;
1401
1402	case SO_TIMESTAMP_OLD:
1403	case SO_TIMESTAMP_NEW:
1404	case SO_TIMESTAMPNS_OLD:
1405	case SO_TIMESTAMPNS_NEW:
1406		sock_set_timestamp(sk, optname, valbool);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1407		break;
1408
1409	case SO_TIMESTAMPING_NEW:
 
 
1410	case SO_TIMESTAMPING_OLD:
1411		if (optlen == sizeof(timestamping)) {
1412			if (copy_from_sockptr(&timestamping, optval,
1413					      sizeof(timestamping))) {
1414				ret = -EFAULT;
1415				break;
 
 
 
 
 
 
 
 
 
 
 
 
1416			}
1417		} else {
1418			memset(&timestamping, 0, sizeof(timestamping));
1419			timestamping.flags = val;
1420		}
1421		ret = sock_set_timestamping(sk, optname, timestamping);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1422		break;
1423
1424	case SO_RCVLOWAT:
1425		{
1426		int (*set_rcvlowat)(struct sock *sk, int val) = NULL;
1427
1428		if (val < 0)
1429			val = INT_MAX;
1430		if (sock)
1431			set_rcvlowat = READ_ONCE(sock->ops)->set_rcvlowat;
1432		if (set_rcvlowat)
1433			ret = set_rcvlowat(sk, val);
1434		else
1435			WRITE_ONCE(sk->sk_rcvlowat, val ? : 1);
1436		break;
1437		}
1438	case SO_RCVTIMEO_OLD:
1439	case SO_RCVTIMEO_NEW:
1440		ret = sock_set_timeout(&sk->sk_rcvtimeo, optval,
1441				       optlen, optname == SO_RCVTIMEO_OLD);
1442		break;
1443
1444	case SO_SNDTIMEO_OLD:
1445	case SO_SNDTIMEO_NEW:
1446		ret = sock_set_timeout(&sk->sk_sndtimeo, optval,
1447				       optlen, optname == SO_SNDTIMEO_OLD);
1448		break;
1449
1450	case SO_ATTACH_FILTER: {
1451		struct sock_fprog fprog;
 
 
 
 
 
 
1452
1453		ret = copy_bpf_fprog_from_user(&fprog, optval, optlen);
1454		if (!ret)
1455			ret = sk_attach_filter(&fprog, sk);
 
1456		break;
1457	}
1458	case SO_ATTACH_BPF:
1459		ret = -EINVAL;
1460		if (optlen == sizeof(u32)) {
1461			u32 ufd;
1462
1463			ret = -EFAULT;
1464			if (copy_from_sockptr(&ufd, optval, sizeof(ufd)))
1465				break;
1466
1467			ret = sk_attach_bpf(ufd, sk);
1468		}
1469		break;
1470
1471	case SO_ATTACH_REUSEPORT_CBPF: {
1472		struct sock_fprog fprog;
 
 
 
 
 
 
1473
1474		ret = copy_bpf_fprog_from_user(&fprog, optval, optlen);
1475		if (!ret)
1476			ret = sk_reuseport_attach_filter(&fprog, sk);
 
1477		break;
1478	}
1479	case SO_ATTACH_REUSEPORT_EBPF:
1480		ret = -EINVAL;
1481		if (optlen == sizeof(u32)) {
1482			u32 ufd;
1483
1484			ret = -EFAULT;
1485			if (copy_from_sockptr(&ufd, optval, sizeof(ufd)))
1486				break;
1487
1488			ret = sk_reuseport_attach_bpf(ufd, sk);
1489		}
1490		break;
1491
1492	case SO_DETACH_REUSEPORT_BPF:
1493		ret = reuseport_detach_prog(sk);
1494		break;
1495
1496	case SO_DETACH_FILTER:
1497		ret = sk_detach_filter(sk);
1498		break;
1499
1500	case SO_LOCK_FILTER:
1501		if (sock_flag(sk, SOCK_FILTER_LOCKED) && !valbool)
1502			ret = -EPERM;
1503		else
1504			sock_valbool_flag(sk, SOCK_FILTER_LOCKED, valbool);
1505		break;
1506
 
 
 
 
 
 
1507	case SO_MARK:
1508		if (!sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_RAW) &&
1509		    !sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
1510			ret = -EPERM;
1511			break;
 
 
1512		}
1513
1514		__sock_set_mark(sk, val);
1515		break;
1516	case SO_RCVMARK:
1517		sock_valbool_flag(sk, SOCK_RCVMARK, valbool);
1518		break;
1519
1520	case SO_RXQ_OVFL:
1521		sock_valbool_flag(sk, SOCK_RXQ_OVFL, valbool);
1522		break;
1523
1524	case SO_WIFI_STATUS:
1525		sock_valbool_flag(sk, SOCK_WIFI_STATUS, valbool);
1526		break;
1527
 
 
 
 
 
 
 
1528	case SO_NOFCS:
1529		sock_valbool_flag(sk, SOCK_NOFCS, valbool);
1530		break;
1531
1532	case SO_SELECT_ERR_QUEUE:
1533		sock_valbool_flag(sk, SOCK_SELECT_ERR_QUEUE, valbool);
1534		break;
1535
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1536
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1537	case SO_INCOMING_CPU:
1538		reuseport_update_incoming_cpu(sk, val);
1539		break;
1540
1541	case SO_CNX_ADVICE:
1542		if (val == 1)
1543			dst_negative_advice(sk);
1544		break;
1545
1546	case SO_ZEROCOPY:
1547		if (sk->sk_family == PF_INET || sk->sk_family == PF_INET6) {
1548			if (!(sk_is_tcp(sk) ||
 
1549			      (sk->sk_type == SOCK_DGRAM &&
1550			       sk->sk_protocol == IPPROTO_UDP)))
1551				ret = -EOPNOTSUPP;
1552		} else if (sk->sk_family != PF_RDS) {
1553			ret = -EOPNOTSUPP;
1554		}
1555		if (!ret) {
1556			if (val < 0 || val > 1)
1557				ret = -EINVAL;
1558			else
1559				sock_valbool_flag(sk, SOCK_ZEROCOPY, valbool);
1560		}
1561		break;
1562
1563	case SO_TXTIME:
1564		if (optlen != sizeof(struct sock_txtime)) {
 
 
1565			ret = -EINVAL;
1566			break;
1567		} else if (copy_from_sockptr(&sk_txtime, optval,
1568			   sizeof(struct sock_txtime))) {
1569			ret = -EFAULT;
1570			break;
1571		} else if (sk_txtime.flags & ~SOF_TXTIME_FLAGS_MASK) {
1572			ret = -EINVAL;
1573			break;
1574		}
1575		/* CLOCK_MONOTONIC is only used by sch_fq, and this packet
1576		 * scheduler has enough safe guards.
1577		 */
1578		if (sk_txtime.clockid != CLOCK_MONOTONIC &&
1579		    !sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
1580			ret = -EPERM;
1581			break;
1582		}
1583
1584		ret = sockopt_validate_clockid(sk_txtime.clockid);
1585		if (ret)
1586			break;
1587
1588		sock_valbool_flag(sk, SOCK_TXTIME, true);
1589		sk->sk_clockid = sk_txtime.clockid;
1590		sk->sk_txtime_deadline_mode =
1591			!!(sk_txtime.flags & SOF_TXTIME_DEADLINE_MODE);
1592		sk->sk_txtime_report_errors =
1593			!!(sk_txtime.flags & SOF_TXTIME_REPORT_ERRORS);
1594		break;
1595
1596	case SO_BINDTOIFINDEX:
1597		ret = sock_bindtoindex_locked(sk, val);
1598		break;
1599
1600	case SO_BUF_LOCK:
1601		if (val & ~SOCK_BUF_LOCK_MASK) {
1602			ret = -EINVAL;
1603			break;
1604		}
1605		sk->sk_userlocks = val | (sk->sk_userlocks &
1606					  ~SOCK_BUF_LOCK_MASK);
1607		break;
1608
1609	case SO_RESERVE_MEM:
1610	{
1611		int delta;
1612
1613		if (val < 0) {
1614			ret = -EINVAL;
1615			break;
1616		}
1617
1618		delta = val - sk->sk_reserved_mem;
1619		if (delta < 0)
1620			sock_release_reserved_memory(sk, -delta);
1621		else
1622			ret = sock_reserve_memory(sk, delta);
1623		break;
1624	}
1625
1626	default:
1627		ret = -ENOPROTOOPT;
1628		break;
1629	}
1630	sockopt_release_sock(sk);
1631	return ret;
1632}
1633
1634int sock_setsockopt(struct socket *sock, int level, int optname,
1635		    sockptr_t optval, unsigned int optlen)
1636{
1637	return sk_setsockopt(sock->sk, level, optname,
1638			     optval, optlen);
1639}
1640EXPORT_SYMBOL(sock_setsockopt);
1641
1642static const struct cred *sk_get_peer_cred(struct sock *sk)
1643{
1644	const struct cred *cred;
1645
1646	spin_lock(&sk->sk_peer_lock);
1647	cred = get_cred(sk->sk_peer_cred);
1648	spin_unlock(&sk->sk_peer_lock);
1649
1650	return cred;
1651}
1652
1653static void cred_to_ucred(struct pid *pid, const struct cred *cred,
1654			  struct ucred *ucred)
1655{
1656	ucred->pid = pid_vnr(pid);
1657	ucred->uid = ucred->gid = -1;
1658	if (cred) {
1659		struct user_namespace *current_ns = current_user_ns();
1660
1661		ucred->uid = from_kuid_munged(current_ns, cred->euid);
1662		ucred->gid = from_kgid_munged(current_ns, cred->egid);
1663	}
1664}
1665
1666static int groups_to_user(sockptr_t dst, const struct group_info *src)
1667{
1668	struct user_namespace *user_ns = current_user_ns();
1669	int i;
1670
1671	for (i = 0; i < src->ngroups; i++) {
1672		gid_t gid = from_kgid_munged(user_ns, src->gid[i]);
1673
1674		if (copy_to_sockptr_offset(dst, i * sizeof(gid), &gid, sizeof(gid)))
1675			return -EFAULT;
1676	}
1677
1678	return 0;
1679}
1680
1681int sk_getsockopt(struct sock *sk, int level, int optname,
1682		  sockptr_t optval, sockptr_t optlen)
1683{
1684	struct socket *sock = sk->sk_socket;
1685
1686	union {
1687		int val;
1688		u64 val64;
1689		unsigned long ulval;
1690		struct linger ling;
1691		struct old_timeval32 tm32;
1692		struct __kernel_old_timeval tm;
1693		struct  __kernel_sock_timeval stm;
1694		struct sock_txtime txtime;
1695		struct so_timestamping timestamping;
1696	} v;
1697
1698	int lv = sizeof(int);
1699	int len;
1700
1701	if (copy_from_sockptr(&len, optlen, sizeof(int)))
1702		return -EFAULT;
1703	if (len < 0)
1704		return -EINVAL;
1705
1706	memset(&v, 0, sizeof(v));
1707
1708	switch (optname) {
1709	case SO_DEBUG:
1710		v.val = sock_flag(sk, SOCK_DBG);
1711		break;
1712
1713	case SO_DONTROUTE:
1714		v.val = sock_flag(sk, SOCK_LOCALROUTE);
1715		break;
1716
1717	case SO_BROADCAST:
1718		v.val = sock_flag(sk, SOCK_BROADCAST);
1719		break;
1720
1721	case SO_SNDBUF:
1722		v.val = READ_ONCE(sk->sk_sndbuf);
1723		break;
1724
1725	case SO_RCVBUF:
1726		v.val = READ_ONCE(sk->sk_rcvbuf);
1727		break;
1728
1729	case SO_REUSEADDR:
1730		v.val = sk->sk_reuse;
1731		break;
1732
1733	case SO_REUSEPORT:
1734		v.val = sk->sk_reuseport;
1735		break;
1736
1737	case SO_KEEPALIVE:
1738		v.val = sock_flag(sk, SOCK_KEEPOPEN);
1739		break;
1740
1741	case SO_TYPE:
1742		v.val = sk->sk_type;
1743		break;
1744
1745	case SO_PROTOCOL:
1746		v.val = sk->sk_protocol;
1747		break;
1748
1749	case SO_DOMAIN:
1750		v.val = sk->sk_family;
1751		break;
1752
1753	case SO_ERROR:
1754		v.val = -sock_error(sk);
1755		if (v.val == 0)
1756			v.val = xchg(&sk->sk_err_soft, 0);
1757		break;
1758
1759	case SO_OOBINLINE:
1760		v.val = sock_flag(sk, SOCK_URGINLINE);
1761		break;
1762
1763	case SO_NO_CHECK:
1764		v.val = sk->sk_no_check_tx;
1765		break;
1766
1767	case SO_PRIORITY:
1768		v.val = READ_ONCE(sk->sk_priority);
1769		break;
1770
1771	case SO_LINGER:
1772		lv		= sizeof(v.ling);
1773		v.ling.l_onoff	= sock_flag(sk, SOCK_LINGER);
1774		v.ling.l_linger	= READ_ONCE(sk->sk_lingertime) / HZ;
1775		break;
1776
1777	case SO_BSDCOMPAT:
 
1778		break;
1779
1780	case SO_TIMESTAMP_OLD:
1781		v.val = sock_flag(sk, SOCK_RCVTSTAMP) &&
1782				!sock_flag(sk, SOCK_TSTAMP_NEW) &&
1783				!sock_flag(sk, SOCK_RCVTSTAMPNS);
1784		break;
1785
1786	case SO_TIMESTAMPNS_OLD:
1787		v.val = sock_flag(sk, SOCK_RCVTSTAMPNS) && !sock_flag(sk, SOCK_TSTAMP_NEW);
1788		break;
1789
1790	case SO_TIMESTAMP_NEW:
1791		v.val = sock_flag(sk, SOCK_RCVTSTAMP) && sock_flag(sk, SOCK_TSTAMP_NEW);
1792		break;
1793
1794	case SO_TIMESTAMPNS_NEW:
1795		v.val = sock_flag(sk, SOCK_RCVTSTAMPNS) && sock_flag(sk, SOCK_TSTAMP_NEW);
1796		break;
1797
1798	case SO_TIMESTAMPING_OLD:
1799	case SO_TIMESTAMPING_NEW:
1800		lv = sizeof(v.timestamping);
1801		/* For the later-added case SO_TIMESTAMPING_NEW: Be strict about only
1802		 * returning the flags when they were set through the same option.
1803		 * Don't change the beviour for the old case SO_TIMESTAMPING_OLD.
1804		 */
1805		if (optname == SO_TIMESTAMPING_OLD || sock_flag(sk, SOCK_TSTAMP_NEW)) {
1806			v.timestamping.flags = READ_ONCE(sk->sk_tsflags);
1807			v.timestamping.bind_phc = READ_ONCE(sk->sk_bind_phc);
1808		}
1809		break;
1810
1811	case SO_RCVTIMEO_OLD:
1812	case SO_RCVTIMEO_NEW:
1813		lv = sock_get_timeout(READ_ONCE(sk->sk_rcvtimeo), &v,
1814				      SO_RCVTIMEO_OLD == optname);
1815		break;
1816
1817	case SO_SNDTIMEO_OLD:
1818	case SO_SNDTIMEO_NEW:
1819		lv = sock_get_timeout(READ_ONCE(sk->sk_sndtimeo), &v,
1820				      SO_SNDTIMEO_OLD == optname);
1821		break;
1822
1823	case SO_RCVLOWAT:
1824		v.val = READ_ONCE(sk->sk_rcvlowat);
1825		break;
1826
1827	case SO_SNDLOWAT:
1828		v.val = 1;
1829		break;
1830
1831	case SO_PASSCRED:
1832		v.val = !!test_bit(SOCK_PASSCRED, &sock->flags);
1833		break;
1834
1835	case SO_PASSPIDFD:
1836		v.val = !!test_bit(SOCK_PASSPIDFD, &sock->flags);
1837		break;
1838
1839	case SO_PEERCRED:
1840	{
1841		struct ucred peercred;
1842		if (len > sizeof(peercred))
1843			len = sizeof(peercred);
1844
1845		spin_lock(&sk->sk_peer_lock);
1846		cred_to_ucred(sk->sk_peer_pid, sk->sk_peer_cred, &peercred);
1847		spin_unlock(&sk->sk_peer_lock);
1848
1849		if (copy_to_sockptr(optval, &peercred, len))
1850			return -EFAULT;
1851		goto lenout;
1852	}
1853
1854	case SO_PEERPIDFD:
1855	{
1856		struct pid *peer_pid;
1857		struct file *pidfd_file = NULL;
1858		int pidfd;
1859
1860		if (len > sizeof(pidfd))
1861			len = sizeof(pidfd);
1862
1863		spin_lock(&sk->sk_peer_lock);
1864		peer_pid = get_pid(sk->sk_peer_pid);
1865		spin_unlock(&sk->sk_peer_lock);
1866
1867		if (!peer_pid)
1868			return -ENODATA;
1869
1870		pidfd = pidfd_prepare(peer_pid, 0, &pidfd_file);
1871		put_pid(peer_pid);
1872		if (pidfd < 0)
1873			return pidfd;
1874
1875		if (copy_to_sockptr(optval, &pidfd, len) ||
1876		    copy_to_sockptr(optlen, &len, sizeof(int))) {
1877			put_unused_fd(pidfd);
1878			fput(pidfd_file);
1879
1880			return -EFAULT;
1881		}
1882
1883		fd_install(pidfd, pidfd_file);
1884		return 0;
1885	}
1886
1887	case SO_PEERGROUPS:
1888	{
1889		const struct cred *cred;
1890		int ret, n;
1891
1892		cred = sk_get_peer_cred(sk);
1893		if (!cred)
1894			return -ENODATA;
1895
1896		n = cred->group_info->ngroups;
1897		if (len < n * sizeof(gid_t)) {
1898			len = n * sizeof(gid_t);
1899			put_cred(cred);
1900			return copy_to_sockptr(optlen, &len, sizeof(int)) ? -EFAULT : -ERANGE;
1901		}
1902		len = n * sizeof(gid_t);
1903
1904		ret = groups_to_user(optval, cred->group_info);
1905		put_cred(cred);
1906		if (ret)
1907			return ret;
1908		goto lenout;
1909	}
1910
1911	case SO_PEERNAME:
1912	{
1913		struct sockaddr_storage address;
1914
1915		lv = READ_ONCE(sock->ops)->getname(sock, (struct sockaddr *)&address, 2);
1916		if (lv < 0)
1917			return -ENOTCONN;
1918		if (lv < len)
1919			return -EINVAL;
1920		if (copy_to_sockptr(optval, &address, len))
1921			return -EFAULT;
1922		goto lenout;
1923	}
1924
1925	/* Dubious BSD thing... Probably nobody even uses it, but
1926	 * the UNIX standard wants it for whatever reason... -DaveM
1927	 */
1928	case SO_ACCEPTCONN:
1929		v.val = sk->sk_state == TCP_LISTEN;
1930		break;
1931
1932	case SO_PASSSEC:
1933		v.val = !!test_bit(SOCK_PASSSEC, &sock->flags);
1934		break;
1935
1936	case SO_PEERSEC:
1937		return security_socket_getpeersec_stream(sock,
1938							 optval, optlen, len);
1939
1940	case SO_MARK:
1941		v.val = READ_ONCE(sk->sk_mark);
1942		break;
1943
1944	case SO_RCVMARK:
1945		v.val = sock_flag(sk, SOCK_RCVMARK);
1946		break;
1947
1948	case SO_RXQ_OVFL:
1949		v.val = sock_flag(sk, SOCK_RXQ_OVFL);
1950		break;
1951
1952	case SO_WIFI_STATUS:
1953		v.val = sock_flag(sk, SOCK_WIFI_STATUS);
1954		break;
1955
1956	case SO_PEEK_OFF:
1957		if (!READ_ONCE(sock->ops)->set_peek_off)
1958			return -EOPNOTSUPP;
1959
1960		v.val = READ_ONCE(sk->sk_peek_off);
1961		break;
1962	case SO_NOFCS:
1963		v.val = sock_flag(sk, SOCK_NOFCS);
1964		break;
1965
1966	case SO_BINDTODEVICE:
1967		return sock_getbindtodevice(sk, optval, optlen, len);
1968
1969	case SO_GET_FILTER:
1970		len = sk_get_filter(sk, optval, len);
1971		if (len < 0)
1972			return len;
1973
1974		goto lenout;
1975
1976	case SO_LOCK_FILTER:
1977		v.val = sock_flag(sk, SOCK_FILTER_LOCKED);
1978		break;
1979
1980	case SO_BPF_EXTENSIONS:
1981		v.val = bpf_tell_extensions();
1982		break;
1983
1984	case SO_SELECT_ERR_QUEUE:
1985		v.val = sock_flag(sk, SOCK_SELECT_ERR_QUEUE);
1986		break;
1987
1988#ifdef CONFIG_NET_RX_BUSY_POLL
1989	case SO_BUSY_POLL:
1990		v.val = READ_ONCE(sk->sk_ll_usec);
1991		break;
1992	case SO_PREFER_BUSY_POLL:
1993		v.val = READ_ONCE(sk->sk_prefer_busy_poll);
1994		break;
1995#endif
1996
1997	case SO_MAX_PACING_RATE:
1998		/* The READ_ONCE() pair with the WRITE_ONCE() in sk_setsockopt() */
1999		if (sizeof(v.ulval) != sizeof(v.val) && len >= sizeof(v.ulval)) {
2000			lv = sizeof(v.ulval);
2001			v.ulval = READ_ONCE(sk->sk_max_pacing_rate);
2002		} else {
2003			/* 32bit version */
2004			v.val = min_t(unsigned long, ~0U,
2005				      READ_ONCE(sk->sk_max_pacing_rate));
2006		}
2007		break;
2008
2009	case SO_INCOMING_CPU:
2010		v.val = READ_ONCE(sk->sk_incoming_cpu);
2011		break;
2012
2013	case SO_MEMINFO:
2014	{
2015		u32 meminfo[SK_MEMINFO_VARS];
2016
2017		sk_get_meminfo(sk, meminfo);
2018
2019		len = min_t(unsigned int, len, sizeof(meminfo));
2020		if (copy_to_sockptr(optval, &meminfo, len))
2021			return -EFAULT;
2022
2023		goto lenout;
2024	}
2025
2026#ifdef CONFIG_NET_RX_BUSY_POLL
2027	case SO_INCOMING_NAPI_ID:
2028		v.val = READ_ONCE(sk->sk_napi_id);
2029
2030		/* aggregate non-NAPI IDs down to 0 */
2031		if (v.val < MIN_NAPI_ID)
2032			v.val = 0;
2033
2034		break;
2035#endif
2036
2037	case SO_COOKIE:
2038		lv = sizeof(u64);
2039		if (len < lv)
2040			return -EINVAL;
2041		v.val64 = sock_gen_cookie(sk);
2042		break;
2043
2044	case SO_ZEROCOPY:
2045		v.val = sock_flag(sk, SOCK_ZEROCOPY);
2046		break;
2047
2048	case SO_TXTIME:
2049		lv = sizeof(v.txtime);
2050		v.txtime.clockid = sk->sk_clockid;
2051		v.txtime.flags |= sk->sk_txtime_deadline_mode ?
2052				  SOF_TXTIME_DEADLINE_MODE : 0;
2053		v.txtime.flags |= sk->sk_txtime_report_errors ?
2054				  SOF_TXTIME_REPORT_ERRORS : 0;
2055		break;
2056
2057	case SO_BINDTOIFINDEX:
2058		v.val = READ_ONCE(sk->sk_bound_dev_if);
2059		break;
2060
2061	case SO_NETNS_COOKIE:
2062		lv = sizeof(u64);
2063		if (len != lv)
2064			return -EINVAL;
2065		v.val64 = sock_net(sk)->net_cookie;
2066		break;
2067
2068	case SO_BUF_LOCK:
2069		v.val = sk->sk_userlocks & SOCK_BUF_LOCK_MASK;
2070		break;
2071
2072	case SO_RESERVE_MEM:
2073		v.val = READ_ONCE(sk->sk_reserved_mem);
2074		break;
2075
2076	case SO_TXREHASH:
2077		/* Paired with WRITE_ONCE() in sk_setsockopt() */
2078		v.val = READ_ONCE(sk->sk_txrehash);
2079		break;
2080
2081	default:
2082		/* We implement the SO_SNDLOWAT etc to not be settable
2083		 * (1003.1g 7).
2084		 */
2085		return -ENOPROTOOPT;
2086	}
2087
2088	if (len > lv)
2089		len = lv;
2090	if (copy_to_sockptr(optval, &v, len))
2091		return -EFAULT;
2092lenout:
2093	if (copy_to_sockptr(optlen, &len, sizeof(int)))
2094		return -EFAULT;
2095	return 0;
2096}
2097
2098/*
2099 * Initialize an sk_lock.
2100 *
2101 * (We also register the sk_lock with the lock validator.)
2102 */
2103static inline void sock_lock_init(struct sock *sk)
2104{
2105	if (sk->sk_kern_sock)
2106		sock_lock_init_class_and_name(
2107			sk,
2108			af_family_kern_slock_key_strings[sk->sk_family],
2109			af_family_kern_slock_keys + sk->sk_family,
2110			af_family_kern_key_strings[sk->sk_family],
2111			af_family_kern_keys + sk->sk_family);
2112	else
2113		sock_lock_init_class_and_name(
2114			sk,
2115			af_family_slock_key_strings[sk->sk_family],
2116			af_family_slock_keys + sk->sk_family,
2117			af_family_key_strings[sk->sk_family],
2118			af_family_keys + sk->sk_family);
2119}
2120
2121/*
2122 * Copy all fields from osk to nsk but nsk->sk_refcnt must not change yet,
2123 * even temporarily, because of RCU lookups. sk_node should also be left as is.
2124 * We must not copy fields between sk_dontcopy_begin and sk_dontcopy_end
2125 */
2126static void sock_copy(struct sock *nsk, const struct sock *osk)
2127{
2128	const struct proto *prot = READ_ONCE(osk->sk_prot);
2129#ifdef CONFIG_SECURITY_NETWORK
2130	void *sptr = nsk->sk_security;
2131#endif
2132
2133	/* If we move sk_tx_queue_mapping out of the private section,
2134	 * we must check if sk_tx_queue_clear() is called after
2135	 * sock_copy() in sk_clone_lock().
2136	 */
2137	BUILD_BUG_ON(offsetof(struct sock, sk_tx_queue_mapping) <
2138		     offsetof(struct sock, sk_dontcopy_begin) ||
2139		     offsetof(struct sock, sk_tx_queue_mapping) >=
2140		     offsetof(struct sock, sk_dontcopy_end));
2141
2142	memcpy(nsk, osk, offsetof(struct sock, sk_dontcopy_begin));
2143
2144	unsafe_memcpy(&nsk->sk_dontcopy_end, &osk->sk_dontcopy_end,
2145		      prot->obj_size - offsetof(struct sock, sk_dontcopy_end),
2146		      /* alloc is larger than struct, see sk_prot_alloc() */);
2147
2148#ifdef CONFIG_SECURITY_NETWORK
2149	nsk->sk_security = sptr;
2150	security_sk_clone(osk, nsk);
2151#endif
2152}
2153
2154static struct sock *sk_prot_alloc(struct proto *prot, gfp_t priority,
2155		int family)
2156{
2157	struct sock *sk;
2158	struct kmem_cache *slab;
2159
2160	slab = prot->slab;
2161	if (slab != NULL) {
2162		sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
2163		if (!sk)
2164			return sk;
2165		if (want_init_on_alloc(priority))
2166			sk_prot_clear_nulls(sk, prot->obj_size);
2167	} else
2168		sk = kmalloc(prot->obj_size, priority);
2169
2170	if (sk != NULL) {
2171		if (security_sk_alloc(sk, family, priority))
2172			goto out_free;
2173
2174		if (!try_module_get(prot->owner))
2175			goto out_free_sec;
 
2176	}
2177
2178	return sk;
2179
2180out_free_sec:
2181	security_sk_free(sk);
2182out_free:
2183	if (slab != NULL)
2184		kmem_cache_free(slab, sk);
2185	else
2186		kfree(sk);
2187	return NULL;
2188}
2189
2190static void sk_prot_free(struct proto *prot, struct sock *sk)
2191{
2192	struct kmem_cache *slab;
2193	struct module *owner;
2194
2195	owner = prot->owner;
2196	slab = prot->slab;
2197
2198	cgroup_sk_free(&sk->sk_cgrp_data);
2199	mem_cgroup_sk_free(sk);
2200	security_sk_free(sk);
2201	if (slab != NULL)
2202		kmem_cache_free(slab, sk);
2203	else
2204		kfree(sk);
2205	module_put(owner);
2206}
2207
2208/**
2209 *	sk_alloc - All socket objects are allocated here
2210 *	@net: the applicable net namespace
2211 *	@family: protocol family
2212 *	@priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
2213 *	@prot: struct proto associated with this new sock instance
2214 *	@kern: is this to be a kernel socket?
2215 */
2216struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
2217		      struct proto *prot, int kern)
2218{
2219	struct sock *sk;
2220
2221	sk = sk_prot_alloc(prot, priority | __GFP_ZERO, family);
2222	if (sk) {
2223		sk->sk_family = family;
2224		/*
2225		 * See comment in struct sock definition to understand
2226		 * why we need sk_prot_creator -acme
2227		 */
2228		sk->sk_prot = sk->sk_prot_creator = prot;
2229		sk->sk_kern_sock = kern;
2230		sock_lock_init(sk);
2231		sk->sk_net_refcnt = kern ? 0 : 1;
2232		if (likely(sk->sk_net_refcnt)) {
2233			get_net_track(net, &sk->ns_tracker, priority);
2234			sock_inuse_add(net, 1);
2235		} else {
2236			net_passive_inc(net);
2237			__netns_tracker_alloc(net, &sk->ns_tracker,
2238					      false, priority);
2239		}
2240
2241		sock_net_set(sk, net);
2242		refcount_set(&sk->sk_wmem_alloc, 1);
2243
2244		mem_cgroup_sk_alloc(sk);
2245		cgroup_sk_alloc(&sk->sk_cgrp_data);
2246		sock_update_classid(&sk->sk_cgrp_data);
2247		sock_update_netprioidx(&sk->sk_cgrp_data);
2248		sk_tx_queue_clear(sk);
2249	}
2250
2251	return sk;
2252}
2253EXPORT_SYMBOL(sk_alloc);
2254
2255/* Sockets having SOCK_RCU_FREE will call this function after one RCU
2256 * grace period. This is the case for UDP sockets and TCP listeners.
2257 */
2258static void __sk_destruct(struct rcu_head *head)
2259{
2260	struct sock *sk = container_of(head, struct sock, sk_rcu);
2261	struct net *net = sock_net(sk);
2262	struct sk_filter *filter;
2263
2264	if (sk->sk_destruct)
2265		sk->sk_destruct(sk);
2266
2267	filter = rcu_dereference_check(sk->sk_filter,
2268				       refcount_read(&sk->sk_wmem_alloc) == 0);
2269	if (filter) {
2270		sk_filter_uncharge(sk, filter);
2271		RCU_INIT_POINTER(sk->sk_filter, NULL);
2272	}
2273
2274	sock_disable_timestamp(sk, SK_FLAGS_TIMESTAMP);
2275
2276#ifdef CONFIG_BPF_SYSCALL
2277	bpf_sk_storage_free(sk);
2278#endif
2279
2280	if (atomic_read(&sk->sk_omem_alloc))
2281		pr_debug("%s: optmem leakage (%d bytes) detected\n",
2282			 __func__, atomic_read(&sk->sk_omem_alloc));
2283
2284	if (sk->sk_frag.page) {
2285		put_page(sk->sk_frag.page);
2286		sk->sk_frag.page = NULL;
2287	}
2288
2289	/* We do not need to acquire sk->sk_peer_lock, we are the last user. */
2290	put_cred(sk->sk_peer_cred);
2291	put_pid(sk->sk_peer_pid);
2292
2293	if (likely(sk->sk_net_refcnt)) {
2294		put_net_track(net, &sk->ns_tracker);
2295	} else {
2296		__netns_tracker_free(net, &sk->ns_tracker, false);
2297		net_passive_dec(net);
2298	}
2299	sk_prot_free(sk->sk_prot_creator, sk);
2300}
2301
2302void sk_net_refcnt_upgrade(struct sock *sk)
2303{
2304	struct net *net = sock_net(sk);
2305
2306	WARN_ON_ONCE(sk->sk_net_refcnt);
2307	__netns_tracker_free(net, &sk->ns_tracker, false);
2308	net_passive_dec(net);
2309	sk->sk_net_refcnt = 1;
2310	get_net_track(net, &sk->ns_tracker, GFP_KERNEL);
2311	sock_inuse_add(net, 1);
2312}
2313EXPORT_SYMBOL_GPL(sk_net_refcnt_upgrade);
2314
2315void sk_destruct(struct sock *sk)
2316{
2317	bool use_call_rcu = sock_flag(sk, SOCK_RCU_FREE);
2318
2319	if (rcu_access_pointer(sk->sk_reuseport_cb)) {
2320		reuseport_detach_sock(sk);
2321		use_call_rcu = true;
2322	}
2323
2324	if (use_call_rcu)
2325		call_rcu(&sk->sk_rcu, __sk_destruct);
2326	else
2327		__sk_destruct(&sk->sk_rcu);
2328}
2329
2330static void __sk_free(struct sock *sk)
2331{
2332	if (likely(sk->sk_net_refcnt))
2333		sock_inuse_add(sock_net(sk), -1);
2334
2335	if (unlikely(sk->sk_net_refcnt && sock_diag_has_destroy_listeners(sk)))
2336		sock_diag_broadcast_destroy(sk);
2337	else
2338		sk_destruct(sk);
2339}
2340
2341void sk_free(struct sock *sk)
2342{
2343	/*
2344	 * We subtract one from sk_wmem_alloc and can know if
2345	 * some packets are still in some tx queue.
2346	 * If not null, sock_wfree() will call __sk_free(sk) later
2347	 */
2348	if (refcount_dec_and_test(&sk->sk_wmem_alloc))
2349		__sk_free(sk);
2350}
2351EXPORT_SYMBOL(sk_free);
2352
2353static void sk_init_common(struct sock *sk)
2354{
2355	skb_queue_head_init(&sk->sk_receive_queue);
2356	skb_queue_head_init(&sk->sk_write_queue);
2357	skb_queue_head_init(&sk->sk_error_queue);
2358
2359	rwlock_init(&sk->sk_callback_lock);
2360	lockdep_set_class_and_name(&sk->sk_receive_queue.lock,
2361			af_rlock_keys + sk->sk_family,
2362			af_family_rlock_key_strings[sk->sk_family]);
2363	lockdep_set_class_and_name(&sk->sk_write_queue.lock,
2364			af_wlock_keys + sk->sk_family,
2365			af_family_wlock_key_strings[sk->sk_family]);
2366	lockdep_set_class_and_name(&sk->sk_error_queue.lock,
2367			af_elock_keys + sk->sk_family,
2368			af_family_elock_key_strings[sk->sk_family]);
2369	if (sk->sk_kern_sock)
2370		lockdep_set_class_and_name(&sk->sk_callback_lock,
2371			af_kern_callback_keys + sk->sk_family,
2372			af_family_kern_clock_key_strings[sk->sk_family]);
2373	else
2374		lockdep_set_class_and_name(&sk->sk_callback_lock,
2375			af_callback_keys + sk->sk_family,
2376			af_family_clock_key_strings[sk->sk_family]);
2377}
2378
2379/**
2380 *	sk_clone_lock - clone a socket, and lock its clone
2381 *	@sk: the socket to clone
2382 *	@priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
2383 *
2384 *	Caller must unlock socket even in error path (bh_unlock_sock(newsk))
2385 */
2386struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
2387{
2388	struct proto *prot = READ_ONCE(sk->sk_prot);
2389	struct sk_filter *filter;
2390	bool is_charged = true;
2391	struct sock *newsk;
 
2392
2393	newsk = sk_prot_alloc(prot, priority, sk->sk_family);
2394	if (!newsk)
2395		goto out;
2396
2397	sock_copy(newsk, sk);
2398
2399	newsk->sk_prot_creator = prot;
 
 
 
 
 
 
 
 
 
2400
2401	/* SANITY */
2402	if (likely(newsk->sk_net_refcnt)) {
2403		get_net_track(sock_net(newsk), &newsk->ns_tracker, priority);
2404		sock_inuse_add(sock_net(newsk), 1);
2405	} else {
2406		/* Kernel sockets are not elevating the struct net refcount.
2407		 * Instead, use a tracker to more easily detect if a layer
2408		 * is not properly dismantling its kernel sockets at netns
2409		 * destroy time.
2410		 */
2411		net_passive_inc(sock_net(newsk));
2412		__netns_tracker_alloc(sock_net(newsk), &newsk->ns_tracker,
2413				      false, priority);
2414	}
2415	sk_node_init(&newsk->sk_node);
2416	sock_lock_init(newsk);
2417	bh_lock_sock(newsk);
2418	newsk->sk_backlog.head	= newsk->sk_backlog.tail = NULL;
2419	newsk->sk_backlog.len = 0;
2420
2421	atomic_set(&newsk->sk_rmem_alloc, 0);
2422
2423	/* sk_wmem_alloc set to one (see sk_free() and sock_wfree()) */
2424	refcount_set(&newsk->sk_wmem_alloc, 1);
2425
2426	atomic_set(&newsk->sk_omem_alloc, 0);
2427	sk_init_common(newsk);
2428
2429	newsk->sk_dst_cache	= NULL;
2430	newsk->sk_dst_pending_confirm = 0;
2431	newsk->sk_wmem_queued	= 0;
2432	newsk->sk_forward_alloc = 0;
2433	newsk->sk_reserved_mem  = 0;
2434	atomic_set(&newsk->sk_drops, 0);
2435	newsk->sk_send_head	= NULL;
2436	newsk->sk_userlocks	= sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
2437	atomic_set(&newsk->sk_zckey, 0);
2438
2439	sock_reset_flag(newsk, SOCK_DONE);
 
 
 
 
 
 
 
 
 
2440
2441	/* sk->sk_memcg will be populated at accept() time */
2442	newsk->sk_memcg = NULL;
 
 
 
 
 
 
 
 
 
 
2443
2444	cgroup_sk_clone(&newsk->sk_cgrp_data);
 
 
 
 
2445
2446	rcu_read_lock();
2447	filter = rcu_dereference(sk->sk_filter);
2448	if (filter != NULL)
2449		/* though it's an empty new sock, the charging may fail
2450		 * if sysctl_optmem_max was changed between creation of
2451		 * original socket and cloning
2452		 */
2453		is_charged = sk_filter_charge(newsk, filter);
2454	RCU_INIT_POINTER(newsk->sk_filter, filter);
2455	rcu_read_unlock();
2456
2457	if (unlikely(!is_charged || xfrm_sk_clone_policy(newsk, sk))) {
2458		/* We need to make sure that we don't uncharge the new
2459		 * socket if we couldn't charge it in the first place
2460		 * as otherwise we uncharge the parent's filter.
2461		 */
2462		if (!is_charged)
2463			RCU_INIT_POINTER(newsk->sk_filter, NULL);
2464		sk_free_unlock_clone(newsk);
2465		newsk = NULL;
2466		goto out;
2467	}
2468	RCU_INIT_POINTER(newsk->sk_reuseport_cb, NULL);
2469
2470	if (bpf_sk_storage_clone(sk, newsk)) {
2471		sk_free_unlock_clone(newsk);
2472		newsk = NULL;
2473		goto out;
2474	}
2475
2476	/* Clear sk_user_data if parent had the pointer tagged
2477	 * as not suitable for copying when cloning.
2478	 */
2479	if (sk_user_data_is_nocopy(newsk))
2480		newsk->sk_user_data = NULL;
2481
2482	newsk->sk_err	   = 0;
2483	newsk->sk_err_soft = 0;
2484	newsk->sk_priority = 0;
2485	newsk->sk_incoming_cpu = raw_smp_processor_id();
2486
2487	/* Before updating sk_refcnt, we must commit prior changes to memory
2488	 * (Documentation/RCU/rculist_nulls.rst for details)
2489	 */
2490	smp_wmb();
2491	refcount_set(&newsk->sk_refcnt, 2);
2492
2493	sk_set_socket(newsk, NULL);
2494	sk_tx_queue_clear(newsk);
2495	RCU_INIT_POINTER(newsk->sk_wq, NULL);
 
 
 
 
 
 
 
 
 
 
 
2496
2497	if (newsk->sk_prot->sockets_allocated)
2498		sk_sockets_allocated_inc(newsk);
2499
2500	if (sock_needs_netstamp(sk) && newsk->sk_flags & SK_FLAGS_TIMESTAMP)
2501		net_enable_timestamp();
 
 
2502out:
2503	return newsk;
2504}
2505EXPORT_SYMBOL_GPL(sk_clone_lock);
2506
2507void sk_free_unlock_clone(struct sock *sk)
2508{
2509	/* It is still raw copy of parent, so invalidate
2510	 * destructor and make plain sk_free() */
2511	sk->sk_destruct = NULL;
2512	bh_unlock_sock(sk);
2513	sk_free(sk);
2514}
2515EXPORT_SYMBOL_GPL(sk_free_unlock_clone);
2516
2517static u32 sk_dst_gso_max_size(struct sock *sk, struct dst_entry *dst)
2518{
2519	bool is_ipv6 = false;
2520	u32 max_size;
2521
2522#if IS_ENABLED(CONFIG_IPV6)
2523	is_ipv6 = (sk->sk_family == AF_INET6 &&
2524		   !ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr));
2525#endif
2526	/* pairs with the WRITE_ONCE() in netif_set_gso(_ipv4)_max_size() */
2527	max_size = is_ipv6 ? READ_ONCE(dst->dev->gso_max_size) :
2528			READ_ONCE(dst->dev->gso_ipv4_max_size);
2529	if (max_size > GSO_LEGACY_MAX_SIZE && !sk_is_tcp(sk))
2530		max_size = GSO_LEGACY_MAX_SIZE;
2531
2532	return max_size - (MAX_TCP_HEADER + 1);
2533}
2534
2535void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
2536{
2537	u32 max_segs = 1;
2538
2539	sk->sk_route_caps = dst->dev->features;
2540	if (sk_is_tcp(sk))
2541		sk->sk_route_caps |= NETIF_F_GSO;
2542	if (sk->sk_route_caps & NETIF_F_GSO)
2543		sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE;
2544	if (unlikely(sk->sk_gso_disabled))
2545		sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
2546	if (sk_can_gso(sk)) {
2547		if (dst->header_len && !xfrm_dst_offload_ok(dst)) {
2548			sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
2549		} else {
2550			sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
2551			sk->sk_gso_max_size = sk_dst_gso_max_size(sk, dst);
2552			/* pairs with the WRITE_ONCE() in netif_set_gso_max_segs() */
2553			max_segs = max_t(u32, READ_ONCE(dst->dev->gso_max_segs), 1);
2554		}
2555	}
2556	sk->sk_gso_max_segs = max_segs;
2557	sk_dst_set(sk, dst);
2558}
2559EXPORT_SYMBOL_GPL(sk_setup_caps);
2560
2561/*
2562 *	Simple resource managers for sockets.
2563 */
2564
2565
2566/*
2567 * Write buffer destructor automatically called from kfree_skb.
2568 */
2569void sock_wfree(struct sk_buff *skb)
2570{
2571	struct sock *sk = skb->sk;
2572	unsigned int len = skb->truesize;
2573	bool free;
2574
2575	if (!sock_flag(sk, SOCK_USE_WRITE_QUEUE)) {
2576		if (sock_flag(sk, SOCK_RCU_FREE) &&
2577		    sk->sk_write_space == sock_def_write_space) {
2578			rcu_read_lock();
2579			free = refcount_sub_and_test(len, &sk->sk_wmem_alloc);
2580			sock_def_write_space_wfree(sk);
2581			rcu_read_unlock();
2582			if (unlikely(free))
2583				__sk_free(sk);
2584			return;
2585		}
2586
2587		/*
2588		 * Keep a reference on sk_wmem_alloc, this will be released
2589		 * after sk_write_space() call
2590		 */
2591		WARN_ON(refcount_sub_and_test(len - 1, &sk->sk_wmem_alloc));
2592		sk->sk_write_space(sk);
2593		len = 1;
2594	}
2595	/*
2596	 * if sk_wmem_alloc reaches 0, we must finish what sk_free()
2597	 * could not do because of in-flight packets
2598	 */
2599	if (refcount_sub_and_test(len, &sk->sk_wmem_alloc))
2600		__sk_free(sk);
2601}
2602EXPORT_SYMBOL(sock_wfree);
2603
2604/* This variant of sock_wfree() is used by TCP,
2605 * since it sets SOCK_USE_WRITE_QUEUE.
2606 */
2607void __sock_wfree(struct sk_buff *skb)
2608{
2609	struct sock *sk = skb->sk;
2610
2611	if (refcount_sub_and_test(skb->truesize, &sk->sk_wmem_alloc))
2612		__sk_free(sk);
2613}
2614
2615void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
2616{
2617	skb_orphan(skb);
 
2618#ifdef CONFIG_INET
2619	if (unlikely(!sk_fullsock(sk)))
2620		return skb_set_owner_edemux(skb, sk);
 
 
 
2621#endif
2622	skb->sk = sk;
2623	skb->destructor = sock_wfree;
2624	skb_set_hash_from_sk(skb, sk);
2625	/*
2626	 * We used to take a refcount on sk, but following operation
2627	 * is enough to guarantee sk_free() won't free this sock until
2628	 * all in-flight packets are completed
2629	 */
2630	refcount_add(skb->truesize, &sk->sk_wmem_alloc);
2631}
2632EXPORT_SYMBOL(skb_set_owner_w);
2633
2634static bool can_skb_orphan_partial(const struct sk_buff *skb)
2635{
 
2636	/* Drivers depend on in-order delivery for crypto offload,
2637	 * partial orphan breaks out-of-order-OK logic.
2638	 */
2639	if (skb_is_decrypted(skb))
2640		return false;
2641
2642	return (skb->destructor == sock_wfree ||
2643		(IS_ENABLED(CONFIG_INET) && skb->destructor == tcp_wfree));
2644}
2645
2646/* This helper is used by netem, as it can hold packets in its
2647 * delay queue. We want to allow the owner socket to send more
2648 * packets, as if they were already TX completed by a typical driver.
2649 * But we also want to keep skb->sk set because some packet schedulers
2650 * rely on it (sch_fq for example).
2651 */
2652void skb_orphan_partial(struct sk_buff *skb)
2653{
2654	if (skb_is_tcp_pure_ack(skb))
2655		return;
2656
2657	if (can_skb_orphan_partial(skb) && skb_set_owner_sk_safe(skb, skb->sk))
2658		return;
2659
2660	skb_orphan(skb);
 
 
 
 
 
 
2661}
2662EXPORT_SYMBOL(skb_orphan_partial);
2663
2664/*
2665 * Read buffer destructor automatically called from kfree_skb.
2666 */
2667void sock_rfree(struct sk_buff *skb)
2668{
2669	struct sock *sk = skb->sk;
2670	unsigned int len = skb->truesize;
2671
2672	atomic_sub(len, &sk->sk_rmem_alloc);
2673	sk_mem_uncharge(sk, len);
2674}
2675EXPORT_SYMBOL(sock_rfree);
2676
2677/*
2678 * Buffer destructor for skbs that are not used directly in read or write
2679 * path, e.g. for error handler skbs. Automatically called from kfree_skb.
2680 */
2681void sock_efree(struct sk_buff *skb)
2682{
2683	sock_put(skb->sk);
2684}
2685EXPORT_SYMBOL(sock_efree);
2686
2687/* Buffer destructor for prefetch/receive path where reference count may
2688 * not be held, e.g. for listen sockets.
2689 */
2690#ifdef CONFIG_INET
2691void sock_pfree(struct sk_buff *skb)
2692{
2693	struct sock *sk = skb->sk;
2694
2695	if (!sk_is_refcounted(sk))
2696		return;
2697
2698	if (sk->sk_state == TCP_NEW_SYN_RECV && inet_reqsk(sk)->syncookie) {
2699		inet_reqsk(sk)->rsk_listener = NULL;
2700		reqsk_free(inet_reqsk(sk));
2701		return;
2702	}
2703
2704	sock_gen_put(sk);
2705}
2706EXPORT_SYMBOL(sock_pfree);
2707#endif /* CONFIG_INET */
2708
2709kuid_t sock_i_uid(struct sock *sk)
2710{
2711	kuid_t uid;
2712
2713	read_lock_bh(&sk->sk_callback_lock);
2714	uid = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_uid : GLOBAL_ROOT_UID;
2715	read_unlock_bh(&sk->sk_callback_lock);
2716	return uid;
2717}
2718EXPORT_SYMBOL(sock_i_uid);
2719
2720unsigned long __sock_i_ino(struct sock *sk)
2721{
2722	unsigned long ino;
2723
2724	read_lock(&sk->sk_callback_lock);
2725	ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0;
2726	read_unlock(&sk->sk_callback_lock);
2727	return ino;
2728}
2729EXPORT_SYMBOL(__sock_i_ino);
2730
2731unsigned long sock_i_ino(struct sock *sk)
2732{
2733	unsigned long ino;
2734
2735	local_bh_disable();
2736	ino = __sock_i_ino(sk);
2737	local_bh_enable();
2738	return ino;
2739}
2740EXPORT_SYMBOL(sock_i_ino);
2741
2742/*
2743 * Allocate a skb from the socket's send buffer.
2744 */
2745struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force,
2746			     gfp_t priority)
2747{
2748	if (force ||
2749	    refcount_read(&sk->sk_wmem_alloc) < READ_ONCE(sk->sk_sndbuf)) {
2750		struct sk_buff *skb = alloc_skb(size, priority);
2751
2752		if (skb) {
2753			skb_set_owner_w(skb, sk);
2754			return skb;
2755		}
2756	}
2757	return NULL;
2758}
2759EXPORT_SYMBOL(sock_wmalloc);
2760
2761static void sock_ofree(struct sk_buff *skb)
2762{
2763	struct sock *sk = skb->sk;
2764
2765	atomic_sub(skb->truesize, &sk->sk_omem_alloc);
2766}
2767
2768struct sk_buff *sock_omalloc(struct sock *sk, unsigned long size,
2769			     gfp_t priority)
2770{
2771	struct sk_buff *skb;
2772
2773	/* small safe race: SKB_TRUESIZE may differ from final skb->truesize */
2774	if (atomic_read(&sk->sk_omem_alloc) + SKB_TRUESIZE(size) >
2775	    READ_ONCE(sock_net(sk)->core.sysctl_optmem_max))
2776		return NULL;
2777
2778	skb = alloc_skb(size, priority);
2779	if (!skb)
2780		return NULL;
2781
2782	atomic_add(skb->truesize, &sk->sk_omem_alloc);
2783	skb->sk = sk;
2784	skb->destructor = sock_ofree;
2785	return skb;
2786}
2787
2788/*
2789 * Allocate a memory block from the socket's option memory buffer.
2790 */
2791void *sock_kmalloc(struct sock *sk, int size, gfp_t priority)
2792{
2793	int optmem_max = READ_ONCE(sock_net(sk)->core.sysctl_optmem_max);
2794
2795	if ((unsigned int)size <= optmem_max &&
2796	    atomic_read(&sk->sk_omem_alloc) + size < optmem_max) {
2797		void *mem;
2798		/* First do the add, to avoid the race if kmalloc
2799		 * might sleep.
2800		 */
2801		atomic_add(size, &sk->sk_omem_alloc);
2802		mem = kmalloc(size, priority);
2803		if (mem)
2804			return mem;
2805		atomic_sub(size, &sk->sk_omem_alloc);
2806	}
2807	return NULL;
2808}
2809EXPORT_SYMBOL(sock_kmalloc);
2810
2811/* Free an option memory block. Note, we actually want the inline
2812 * here as this allows gcc to detect the nullify and fold away the
2813 * condition entirely.
2814 */
2815static inline void __sock_kfree_s(struct sock *sk, void *mem, int size,
2816				  const bool nullify)
2817{
2818	if (WARN_ON_ONCE(!mem))
2819		return;
2820	if (nullify)
2821		kfree_sensitive(mem);
2822	else
2823		kfree(mem);
2824	atomic_sub(size, &sk->sk_omem_alloc);
2825}
2826
2827void sock_kfree_s(struct sock *sk, void *mem, int size)
2828{
2829	__sock_kfree_s(sk, mem, size, false);
2830}
2831EXPORT_SYMBOL(sock_kfree_s);
2832
2833void sock_kzfree_s(struct sock *sk, void *mem, int size)
2834{
2835	__sock_kfree_s(sk, mem, size, true);
2836}
2837EXPORT_SYMBOL(sock_kzfree_s);
2838
2839/* It is almost wait_for_tcp_memory minus release_sock/lock_sock.
2840   I think, these locks should be removed for datagram sockets.
2841 */
2842static long sock_wait_for_wmem(struct sock *sk, long timeo)
2843{
2844	DEFINE_WAIT(wait);
2845
2846	sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2847	for (;;) {
2848		if (!timeo)
2849			break;
2850		if (signal_pending(current))
2851			break;
2852		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2853		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
2854		if (refcount_read(&sk->sk_wmem_alloc) < READ_ONCE(sk->sk_sndbuf))
2855			break;
2856		if (READ_ONCE(sk->sk_shutdown) & SEND_SHUTDOWN)
2857			break;
2858		if (READ_ONCE(sk->sk_err))
2859			break;
2860		timeo = schedule_timeout(timeo);
2861	}
2862	finish_wait(sk_sleep(sk), &wait);
2863	return timeo;
2864}
2865
2866
2867/*
2868 *	Generic send/receive buffer handlers
2869 */
2870
2871struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,
2872				     unsigned long data_len, int noblock,
2873				     int *errcode, int max_page_order)
2874{
2875	struct sk_buff *skb;
2876	long timeo;
2877	int err;
2878
2879	timeo = sock_sndtimeo(sk, noblock);
2880	for (;;) {
2881		err = sock_error(sk);
2882		if (err != 0)
2883			goto failure;
2884
2885		err = -EPIPE;
2886		if (READ_ONCE(sk->sk_shutdown) & SEND_SHUTDOWN)
2887			goto failure;
2888
2889		if (sk_wmem_alloc_get(sk) < READ_ONCE(sk->sk_sndbuf))
2890			break;
2891
2892		sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
2893		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
2894		err = -EAGAIN;
2895		if (!timeo)
2896			goto failure;
2897		if (signal_pending(current))
2898			goto interrupted;
2899		timeo = sock_wait_for_wmem(sk, timeo);
2900	}
2901	skb = alloc_skb_with_frags(header_len, data_len, max_page_order,
2902				   errcode, sk->sk_allocation);
2903	if (skb)
2904		skb_set_owner_w(skb, sk);
2905	return skb;
2906
2907interrupted:
2908	err = sock_intr_errno(timeo);
2909failure:
2910	*errcode = err;
2911	return NULL;
2912}
2913EXPORT_SYMBOL(sock_alloc_send_pskb);
2914
2915int __sock_cmsg_send(struct sock *sk, struct cmsghdr *cmsg,
 
 
 
 
 
 
 
2916		     struct sockcm_cookie *sockc)
2917{
2918	u32 tsflags;
2919
2920	BUILD_BUG_ON(SOF_TIMESTAMPING_LAST == (1 << 31));
2921
2922	switch (cmsg->cmsg_type) {
2923	case SO_MARK:
2924		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_RAW) &&
2925		    !ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN))
2926			return -EPERM;
2927		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32)))
2928			return -EINVAL;
2929		sockc->mark = *(u32 *)CMSG_DATA(cmsg);
2930		break;
2931	case SO_TIMESTAMPING_OLD:
2932	case SO_TIMESTAMPING_NEW:
2933		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32)))
2934			return -EINVAL;
2935
2936		tsflags = *(u32 *)CMSG_DATA(cmsg);
2937		if (tsflags & ~SOF_TIMESTAMPING_TX_RECORD_MASK)
2938			return -EINVAL;
2939
2940		sockc->tsflags &= ~SOF_TIMESTAMPING_TX_RECORD_MASK;
2941		sockc->tsflags |= tsflags;
2942		break;
2943	case SCM_TXTIME:
2944		if (!sock_flag(sk, SOCK_TXTIME))
2945			return -EINVAL;
2946		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u64)))
2947			return -EINVAL;
2948		sockc->transmit_time = get_unaligned((u64 *)CMSG_DATA(cmsg));
2949		break;
2950	case SCM_TS_OPT_ID:
2951		if (sk_is_tcp(sk))
2952			return -EINVAL;
2953		tsflags = READ_ONCE(sk->sk_tsflags);
2954		if (!(tsflags & SOF_TIMESTAMPING_OPT_ID))
2955			return -EINVAL;
2956		if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32)))
2957			return -EINVAL;
2958		sockc->ts_opt_id = *(u32 *)CMSG_DATA(cmsg);
2959		sockc->tsflags |= SOCKCM_FLAG_TS_OPT_ID;
2960		break;
2961	/* SCM_RIGHTS and SCM_CREDENTIALS are semantically in SOL_UNIX. */
2962	case SCM_RIGHTS:
2963	case SCM_CREDENTIALS:
2964		break;
2965	default:
2966		return -EINVAL;
2967	}
2968	return 0;
2969}
2970EXPORT_SYMBOL(__sock_cmsg_send);
2971
2972int sock_cmsg_send(struct sock *sk, struct msghdr *msg,
2973		   struct sockcm_cookie *sockc)
2974{
2975	struct cmsghdr *cmsg;
2976	int ret;
2977
2978	for_each_cmsghdr(cmsg, msg) {
2979		if (!CMSG_OK(msg, cmsg))
2980			return -EINVAL;
2981		if (cmsg->cmsg_level != SOL_SOCKET)
2982			continue;
2983		ret = __sock_cmsg_send(sk, cmsg, sockc);
2984		if (ret)
2985			return ret;
2986	}
2987	return 0;
2988}
2989EXPORT_SYMBOL(sock_cmsg_send);
2990
2991static void sk_enter_memory_pressure(struct sock *sk)
2992{
2993	if (!sk->sk_prot->enter_memory_pressure)
2994		return;
2995
2996	sk->sk_prot->enter_memory_pressure(sk);
2997}
2998
2999static void sk_leave_memory_pressure(struct sock *sk)
3000{
3001	if (sk->sk_prot->leave_memory_pressure) {
3002		INDIRECT_CALL_INET_1(sk->sk_prot->leave_memory_pressure,
3003				     tcp_leave_memory_pressure, sk);
3004	} else {
3005		unsigned long *memory_pressure = sk->sk_prot->memory_pressure;
3006
3007		if (memory_pressure && READ_ONCE(*memory_pressure))
3008			WRITE_ONCE(*memory_pressure, 0);
3009	}
3010}
3011
 
 
3012DEFINE_STATIC_KEY_FALSE(net_high_order_alloc_disable_key);
3013
3014/**
3015 * skb_page_frag_refill - check that a page_frag contains enough room
3016 * @sz: minimum size of the fragment we want to get
3017 * @pfrag: pointer to page_frag
3018 * @gfp: priority for memory allocation
3019 *
3020 * Note: While this allocator tries to use high order pages, there is
3021 * no guarantee that allocations succeed. Therefore, @sz MUST be
3022 * less or equal than PAGE_SIZE.
3023 */
3024bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)
3025{
3026	if (pfrag->page) {
3027		if (page_ref_count(pfrag->page) == 1) {
3028			pfrag->offset = 0;
3029			return true;
3030		}
3031		if (pfrag->offset + sz <= pfrag->size)
3032			return true;
3033		put_page(pfrag->page);
3034	}
3035
3036	pfrag->offset = 0;
3037	if (SKB_FRAG_PAGE_ORDER &&
3038	    !static_branch_unlikely(&net_high_order_alloc_disable_key)) {
3039		/* Avoid direct reclaim but allow kswapd to wake */
3040		pfrag->page = alloc_pages((gfp & ~__GFP_DIRECT_RECLAIM) |
3041					  __GFP_COMP | __GFP_NOWARN |
3042					  __GFP_NORETRY,
3043					  SKB_FRAG_PAGE_ORDER);
3044		if (likely(pfrag->page)) {
3045			pfrag->size = PAGE_SIZE << SKB_FRAG_PAGE_ORDER;
3046			return true;
3047		}
3048	}
3049	pfrag->page = alloc_page(gfp);
3050	if (likely(pfrag->page)) {
3051		pfrag->size = PAGE_SIZE;
3052		return true;
3053	}
3054	return false;
3055}
3056EXPORT_SYMBOL(skb_page_frag_refill);
3057
3058bool sk_page_frag_refill(struct sock *sk, struct page_frag *pfrag)
3059{
3060	if (likely(skb_page_frag_refill(32U, pfrag, sk->sk_allocation)))
3061		return true;
3062
3063	sk_enter_memory_pressure(sk);
3064	sk_stream_moderate_sndbuf(sk);
3065	return false;
3066}
3067EXPORT_SYMBOL(sk_page_frag_refill);
3068
3069void __lock_sock(struct sock *sk)
3070	__releases(&sk->sk_lock.slock)
3071	__acquires(&sk->sk_lock.slock)
3072{
3073	DEFINE_WAIT(wait);
3074
3075	for (;;) {
3076		prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait,
3077					TASK_UNINTERRUPTIBLE);
3078		spin_unlock_bh(&sk->sk_lock.slock);
3079		schedule();
3080		spin_lock_bh(&sk->sk_lock.slock);
3081		if (!sock_owned_by_user(sk))
3082			break;
3083	}
3084	finish_wait(&sk->sk_lock.wq, &wait);
3085}
3086
3087void __release_sock(struct sock *sk)
3088	__releases(&sk->sk_lock.slock)
3089	__acquires(&sk->sk_lock.slock)
3090{
3091	struct sk_buff *skb, *next;
3092
3093	while ((skb = sk->sk_backlog.head) != NULL) {
3094		sk->sk_backlog.head = sk->sk_backlog.tail = NULL;
3095
3096		spin_unlock_bh(&sk->sk_lock.slock);
3097
3098		do {
3099			next = skb->next;
3100			prefetch(next);
3101			DEBUG_NET_WARN_ON_ONCE(skb_dst_is_noref(skb));
3102			skb_mark_not_on_list(skb);
3103			sk_backlog_rcv(sk, skb);
3104
3105			cond_resched();
3106
3107			skb = next;
3108		} while (skb != NULL);
3109
3110		spin_lock_bh(&sk->sk_lock.slock);
3111	}
3112
3113	/*
3114	 * Doing the zeroing here guarantee we can not loop forever
3115	 * while a wild producer attempts to flood us.
3116	 */
3117	sk->sk_backlog.len = 0;
3118}
3119
3120void __sk_flush_backlog(struct sock *sk)
3121{
3122	spin_lock_bh(&sk->sk_lock.slock);
3123	__release_sock(sk);
3124
3125	if (sk->sk_prot->release_cb)
3126		INDIRECT_CALL_INET_1(sk->sk_prot->release_cb,
3127				     tcp_release_cb, sk);
3128
3129	spin_unlock_bh(&sk->sk_lock.slock);
3130}
3131EXPORT_SYMBOL_GPL(__sk_flush_backlog);
3132
3133/**
3134 * sk_wait_data - wait for data to arrive at sk_receive_queue
3135 * @sk:    sock to wait on
3136 * @timeo: for how long
3137 * @skb:   last skb seen on sk_receive_queue
3138 *
3139 * Now socket state including sk->sk_err is changed only under lock,
3140 * hence we may omit checks after joining wait queue.
3141 * We check receive queue before schedule() only as optimization;
3142 * it is very likely that release_sock() added new data.
3143 */
3144int sk_wait_data(struct sock *sk, long *timeo, const struct sk_buff *skb)
3145{
3146	DEFINE_WAIT_FUNC(wait, woken_wake_function);
3147	int rc;
3148
3149	add_wait_queue(sk_sleep(sk), &wait);
3150	sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
3151	rc = sk_wait_event(sk, timeo, skb_peek_tail(&sk->sk_receive_queue) != skb, &wait);
3152	sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
3153	remove_wait_queue(sk_sleep(sk), &wait);
3154	return rc;
3155}
3156EXPORT_SYMBOL(sk_wait_data);
3157
3158/**
3159 *	__sk_mem_raise_allocated - increase memory_allocated
3160 *	@sk: socket
3161 *	@size: memory size to allocate
3162 *	@amt: pages to allocate
3163 *	@kind: allocation type
3164 *
3165 *	Similar to __sk_mem_schedule(), but does not update sk_forward_alloc.
3166 *
3167 *	Unlike the globally shared limits among the sockets under same protocol,
3168 *	consuming the budget of a memcg won't have direct effect on other ones.
3169 *	So be optimistic about memcg's tolerance, and leave the callers to decide
3170 *	whether or not to raise allocated through sk_under_memory_pressure() or
3171 *	its variants.
3172 */
3173int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)
3174{
3175	struct mem_cgroup *memcg = mem_cgroup_sockets_enabled ? sk->sk_memcg : NULL;
3176	struct proto *prot = sk->sk_prot;
3177	bool charged = false;
3178	long allocated;
3179
3180	sk_memory_allocated_add(sk, amt);
3181	allocated = sk_memory_allocated(sk);
3182
3183	if (memcg) {
3184		if (!mem_cgroup_charge_skmem(memcg, amt, gfp_memcg_charge()))
3185			goto suppress_allocation;
3186		charged = true;
3187	}
3188
3189	/* Under limit. */
3190	if (allocated <= sk_prot_mem_limits(sk, 0)) {
3191		sk_leave_memory_pressure(sk);
3192		return 1;
3193	}
3194
3195	/* Under pressure. */
3196	if (allocated > sk_prot_mem_limits(sk, 1))
3197		sk_enter_memory_pressure(sk);
3198
3199	/* Over hard limit. */
3200	if (allocated > sk_prot_mem_limits(sk, 2))
3201		goto suppress_allocation;
3202
3203	/* Guarantee minimum buffer size under pressure (either global
3204	 * or memcg) to make sure features described in RFC 7323 (TCP
3205	 * Extensions for High Performance) work properly.
3206	 *
3207	 * This rule does NOT stand when exceeds global or memcg's hard
3208	 * limit, or else a DoS attack can be taken place by spawning
3209	 * lots of sockets whose usage are under minimum buffer size.
3210	 */
3211	if (kind == SK_MEM_RECV) {
3212		if (atomic_read(&sk->sk_rmem_alloc) < sk_get_rmem0(sk, prot))
3213			return 1;
3214
3215	} else { /* SK_MEM_SEND */
3216		int wmem0 = sk_get_wmem0(sk, prot);
3217
3218		if (sk->sk_type == SOCK_STREAM) {
3219			if (sk->sk_wmem_queued < wmem0)
3220				return 1;
3221		} else if (refcount_read(&sk->sk_wmem_alloc) < wmem0) {
3222				return 1;
3223		}
3224	}
3225
3226	if (sk_has_memory_pressure(sk)) {
3227		u64 alloc;
3228
3229		/* The following 'average' heuristic is within the
3230		 * scope of global accounting, so it only makes
3231		 * sense for global memory pressure.
3232		 */
3233		if (!sk_under_global_memory_pressure(sk))
3234			return 1;
3235
3236		/* Try to be fair among all the sockets under global
3237		 * pressure by allowing the ones that below average
3238		 * usage to raise.
3239		 */
3240		alloc = sk_sockets_allocated_read_positive(sk);
3241		if (sk_prot_mem_limits(sk, 2) > alloc *
3242		    sk_mem_pages(sk->sk_wmem_queued +
3243				 atomic_read(&sk->sk_rmem_alloc) +
3244				 sk->sk_forward_alloc))
3245			return 1;
3246	}
3247
3248suppress_allocation:
3249
3250	if (kind == SK_MEM_SEND && sk->sk_type == SOCK_STREAM) {
3251		sk_stream_moderate_sndbuf(sk);
3252
3253		/* Fail only if socket is _under_ its sndbuf.
3254		 * In this case we cannot block, so that we have to fail.
3255		 */
3256		if (sk->sk_wmem_queued + size >= sk->sk_sndbuf) {
3257			/* Force charge with __GFP_NOFAIL */
3258			if (memcg && !charged) {
3259				mem_cgroup_charge_skmem(memcg, amt,
3260					gfp_memcg_charge() | __GFP_NOFAIL);
3261			}
3262			return 1;
3263		}
3264	}
3265
3266	if (kind == SK_MEM_SEND || (kind == SK_MEM_RECV && charged))
3267		trace_sock_exceed_buf_limit(sk, prot, allocated, kind);
3268
3269	sk_memory_allocated_sub(sk, amt);
3270
3271	if (charged)
3272		mem_cgroup_uncharge_skmem(memcg, amt);
3273
3274	return 0;
3275}
 
3276
3277/**
3278 *	__sk_mem_schedule - increase sk_forward_alloc and memory_allocated
3279 *	@sk: socket
3280 *	@size: memory size to allocate
3281 *	@kind: allocation type
3282 *
3283 *	If kind is SK_MEM_SEND, it means wmem allocation. Otherwise it means
3284 *	rmem allocation. This function assumes that protocols which have
3285 *	memory_pressure use sk_wmem_queued as write buffer accounting.
3286 */
3287int __sk_mem_schedule(struct sock *sk, int size, int kind)
3288{
3289	int ret, amt = sk_mem_pages(size);
3290
3291	sk_forward_alloc_add(sk, amt << PAGE_SHIFT);
3292	ret = __sk_mem_raise_allocated(sk, size, amt, kind);
3293	if (!ret)
3294		sk_forward_alloc_add(sk, -(amt << PAGE_SHIFT));
3295	return ret;
3296}
3297EXPORT_SYMBOL(__sk_mem_schedule);
3298
3299/**
3300 *	__sk_mem_reduce_allocated - reclaim memory_allocated
3301 *	@sk: socket
3302 *	@amount: number of quanta
3303 *
3304 *	Similar to __sk_mem_reclaim(), but does not update sk_forward_alloc
3305 */
3306void __sk_mem_reduce_allocated(struct sock *sk, int amount)
3307{
3308	sk_memory_allocated_sub(sk, amount);
3309
3310	if (mem_cgroup_sockets_enabled && sk->sk_memcg)
3311		mem_cgroup_uncharge_skmem(sk->sk_memcg, amount);
3312
3313	if (sk_under_global_memory_pressure(sk) &&
3314	    (sk_memory_allocated(sk) < sk_prot_mem_limits(sk, 0)))
3315		sk_leave_memory_pressure(sk);
3316}
 
3317
3318/**
3319 *	__sk_mem_reclaim - reclaim sk_forward_alloc and memory_allocated
3320 *	@sk: socket
3321 *	@amount: number of bytes (rounded down to a PAGE_SIZE multiple)
3322 */
3323void __sk_mem_reclaim(struct sock *sk, int amount)
3324{
3325	amount >>= PAGE_SHIFT;
3326	sk_forward_alloc_add(sk, -(amount << PAGE_SHIFT));
3327	__sk_mem_reduce_allocated(sk, amount);
3328}
3329EXPORT_SYMBOL(__sk_mem_reclaim);
3330
3331int sk_set_peek_off(struct sock *sk, int val)
3332{
3333	WRITE_ONCE(sk->sk_peek_off, val);
3334	return 0;
3335}
3336EXPORT_SYMBOL_GPL(sk_set_peek_off);
3337
3338/*
3339 * Set of default routines for initialising struct proto_ops when
3340 * the protocol does not support a particular function. In certain
3341 * cases where it makes no sense for a protocol to have a "do nothing"
3342 * function, some default processing is provided.
3343 */
3344
3345int sock_no_bind(struct socket *sock, struct sockaddr *saddr, int len)
3346{
3347	return -EOPNOTSUPP;
3348}
3349EXPORT_SYMBOL(sock_no_bind);
3350
3351int sock_no_connect(struct socket *sock, struct sockaddr *saddr,
3352		    int len, int flags)
3353{
3354	return -EOPNOTSUPP;
3355}
3356EXPORT_SYMBOL(sock_no_connect);
3357
3358int sock_no_socketpair(struct socket *sock1, struct socket *sock2)
3359{
3360	return -EOPNOTSUPP;
3361}
3362EXPORT_SYMBOL(sock_no_socketpair);
3363
3364int sock_no_accept(struct socket *sock, struct socket *newsock,
3365		   struct proto_accept_arg *arg)
3366{
3367	return -EOPNOTSUPP;
3368}
3369EXPORT_SYMBOL(sock_no_accept);
3370
3371int sock_no_getname(struct socket *sock, struct sockaddr *saddr,
3372		    int peer)
3373{
3374	return -EOPNOTSUPP;
3375}
3376EXPORT_SYMBOL(sock_no_getname);
3377
3378int sock_no_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
3379{
3380	return -EOPNOTSUPP;
3381}
3382EXPORT_SYMBOL(sock_no_ioctl);
3383
3384int sock_no_listen(struct socket *sock, int backlog)
3385{
3386	return -EOPNOTSUPP;
3387}
3388EXPORT_SYMBOL(sock_no_listen);
3389
3390int sock_no_shutdown(struct socket *sock, int how)
3391{
3392	return -EOPNOTSUPP;
3393}
3394EXPORT_SYMBOL(sock_no_shutdown);
3395
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3396int sock_no_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
3397{
3398	return -EOPNOTSUPP;
3399}
3400EXPORT_SYMBOL(sock_no_sendmsg);
3401
3402int sock_no_sendmsg_locked(struct sock *sk, struct msghdr *m, size_t len)
3403{
3404	return -EOPNOTSUPP;
3405}
3406EXPORT_SYMBOL(sock_no_sendmsg_locked);
3407
3408int sock_no_recvmsg(struct socket *sock, struct msghdr *m, size_t len,
3409		    int flags)
3410{
3411	return -EOPNOTSUPP;
3412}
3413EXPORT_SYMBOL(sock_no_recvmsg);
3414
3415int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
3416{
3417	/* Mirror missing mmap method error code */
3418	return -ENODEV;
3419}
3420EXPORT_SYMBOL(sock_no_mmap);
3421
3422/*
3423 * When a file is received (via SCM_RIGHTS, etc), we must bump the
3424 * various sock-based usage counts.
3425 */
3426void __receive_sock(struct file *file)
3427{
3428	struct socket *sock;
 
 
 
 
 
 
 
 
 
 
3429
3430	sock = sock_from_file(file);
3431	if (sock) {
3432		sock_update_netprioidx(&sock->sk->sk_cgrp_data);
3433		sock_update_classid(&sock->sk->sk_cgrp_data);
3434	}
 
 
 
 
 
 
 
 
3435}
 
3436
3437/*
3438 *	Default Socket Callbacks
3439 */
3440
3441static void sock_def_wakeup(struct sock *sk)
3442{
3443	struct socket_wq *wq;
3444
3445	rcu_read_lock();
3446	wq = rcu_dereference(sk->sk_wq);
3447	if (skwq_has_sleeper(wq))
3448		wake_up_interruptible_all(&wq->wait);
3449	rcu_read_unlock();
3450}
3451
3452static void sock_def_error_report(struct sock *sk)
3453{
3454	struct socket_wq *wq;
3455
3456	rcu_read_lock();
3457	wq = rcu_dereference(sk->sk_wq);
3458	if (skwq_has_sleeper(wq))
3459		wake_up_interruptible_poll(&wq->wait, EPOLLERR);
3460	sk_wake_async_rcu(sk, SOCK_WAKE_IO, POLL_ERR);
3461	rcu_read_unlock();
3462}
3463
3464void sock_def_readable(struct sock *sk)
3465{
3466	struct socket_wq *wq;
3467
3468	trace_sk_data_ready(sk);
3469
3470	rcu_read_lock();
3471	wq = rcu_dereference(sk->sk_wq);
3472	if (skwq_has_sleeper(wq))
3473		wake_up_interruptible_sync_poll(&wq->wait, EPOLLIN | EPOLLPRI |
3474						EPOLLRDNORM | EPOLLRDBAND);
3475	sk_wake_async_rcu(sk, SOCK_WAKE_WAITD, POLL_IN);
3476	rcu_read_unlock();
3477}
3478
3479static void sock_def_write_space(struct sock *sk)
3480{
3481	struct socket_wq *wq;
3482
3483	rcu_read_lock();
3484
3485	/* Do not wake up a writer until he can make "significant"
3486	 * progress.  --DaveM
3487	 */
3488	if (sock_writeable(sk)) {
3489		wq = rcu_dereference(sk->sk_wq);
3490		if (skwq_has_sleeper(wq))
3491			wake_up_interruptible_sync_poll(&wq->wait, EPOLLOUT |
3492						EPOLLWRNORM | EPOLLWRBAND);
3493
3494		/* Should agree with poll, otherwise some programs break */
3495		sk_wake_async_rcu(sk, SOCK_WAKE_SPACE, POLL_OUT);
 
3496	}
3497
3498	rcu_read_unlock();
3499}
3500
3501/* An optimised version of sock_def_write_space(), should only be called
3502 * for SOCK_RCU_FREE sockets under RCU read section and after putting
3503 * ->sk_wmem_alloc.
3504 */
3505static void sock_def_write_space_wfree(struct sock *sk)
3506{
3507	/* Do not wake up a writer until he can make "significant"
3508	 * progress.  --DaveM
3509	 */
3510	if (sock_writeable(sk)) {
3511		struct socket_wq *wq = rcu_dereference(sk->sk_wq);
3512
3513		/* rely on refcount_sub from sock_wfree() */
3514		smp_mb__after_atomic();
3515		if (wq && waitqueue_active(&wq->wait))
3516			wake_up_interruptible_sync_poll(&wq->wait, EPOLLOUT |
3517						EPOLLWRNORM | EPOLLWRBAND);
3518
3519		/* Should agree with poll, otherwise some programs break */
3520		sk_wake_async_rcu(sk, SOCK_WAKE_SPACE, POLL_OUT);
3521	}
3522}
3523
3524static void sock_def_destruct(struct sock *sk)
3525{
3526}
3527
3528void sk_send_sigurg(struct sock *sk)
3529{
3530	if (sk->sk_socket && sk->sk_socket->file)
3531		if (send_sigurg(sk->sk_socket->file))
3532			sk_wake_async(sk, SOCK_WAKE_URG, POLL_PRI);
3533}
3534EXPORT_SYMBOL(sk_send_sigurg);
3535
3536void sk_reset_timer(struct sock *sk, struct timer_list* timer,
3537		    unsigned long expires)
3538{
3539	if (!mod_timer(timer, expires))
3540		sock_hold(sk);
3541}
3542EXPORT_SYMBOL(sk_reset_timer);
3543
3544void sk_stop_timer(struct sock *sk, struct timer_list* timer)
3545{
3546	if (del_timer(timer))
3547		__sock_put(sk);
3548}
3549EXPORT_SYMBOL(sk_stop_timer);
3550
3551void sk_stop_timer_sync(struct sock *sk, struct timer_list *timer)
3552{
3553	if (del_timer_sync(timer))
3554		__sock_put(sk);
3555}
3556EXPORT_SYMBOL(sk_stop_timer_sync);
3557
3558void sock_init_data_uid(struct socket *sock, struct sock *sk, kuid_t uid)
3559{
3560	sk_init_common(sk);
3561	sk->sk_send_head	=	NULL;
3562
3563	timer_setup(&sk->sk_timer, NULL, 0);
3564
3565	sk->sk_allocation	=	GFP_KERNEL;
3566	sk->sk_rcvbuf		=	READ_ONCE(sysctl_rmem_default);
3567	sk->sk_sndbuf		=	READ_ONCE(sysctl_wmem_default);
3568	sk->sk_state		=	TCP_CLOSE;
3569	sk->sk_use_task_frag	=	true;
3570	sk_set_socket(sk, sock);
3571
3572	sock_set_flag(sk, SOCK_ZAPPED);
3573
3574	if (sock) {
3575		sk->sk_type	=	sock->type;
3576		RCU_INIT_POINTER(sk->sk_wq, &sock->wq);
3577		sock->sk	=	sk;
 
3578	} else {
3579		RCU_INIT_POINTER(sk->sk_wq, NULL);
 
3580	}
3581	sk->sk_uid	=	uid;
 
 
 
 
 
 
 
 
 
 
 
3582
3583	sk->sk_state_change	=	sock_def_wakeup;
3584	sk->sk_data_ready	=	sock_def_readable;
3585	sk->sk_write_space	=	sock_def_write_space;
3586	sk->sk_error_report	=	sock_def_error_report;
3587	sk->sk_destruct		=	sock_def_destruct;
3588
3589	sk->sk_frag.page	=	NULL;
3590	sk->sk_frag.offset	=	0;
3591	sk->sk_peek_off		=	-1;
3592
3593	sk->sk_peer_pid 	=	NULL;
3594	sk->sk_peer_cred	=	NULL;
3595	spin_lock_init(&sk->sk_peer_lock);
3596
3597	sk->sk_write_pending	=	0;
3598	sk->sk_rcvlowat		=	1;
3599	sk->sk_rcvtimeo		=	MAX_SCHEDULE_TIMEOUT;
3600	sk->sk_sndtimeo		=	MAX_SCHEDULE_TIMEOUT;
3601
3602	sk->sk_stamp = SK_DEFAULT_STAMP;
3603#if BITS_PER_LONG==32
3604	seqlock_init(&sk->sk_stamp_seq);
3605#endif
3606	atomic_set(&sk->sk_zckey, 0);
3607
3608#ifdef CONFIG_NET_RX_BUSY_POLL
3609	sk->sk_napi_id		=	0;
3610	sk->sk_ll_usec		=	READ_ONCE(sysctl_net_busy_read);
3611#endif
3612
3613	sk->sk_max_pacing_rate = ~0UL;
3614	sk->sk_pacing_rate = ~0UL;
3615	WRITE_ONCE(sk->sk_pacing_shift, 10);
3616	sk->sk_incoming_cpu = -1;
3617
3618	sk_rx_queue_clear(sk);
3619	/*
3620	 * Before updating sk_refcnt, we must commit prior changes to memory
3621	 * (Documentation/RCU/rculist_nulls.rst for details)
3622	 */
3623	smp_wmb();
3624	refcount_set(&sk->sk_refcnt, 1);
3625	atomic_set(&sk->sk_drops, 0);
3626}
3627EXPORT_SYMBOL(sock_init_data_uid);
3628
3629void sock_init_data(struct socket *sock, struct sock *sk)
3630{
3631	kuid_t uid = sock ?
3632		SOCK_INODE(sock)->i_uid :
3633		make_kuid(sock_net(sk)->user_ns, 0);
3634
3635	sock_init_data_uid(sock, sk, uid);
3636}
3637EXPORT_SYMBOL(sock_init_data);
3638
3639void lock_sock_nested(struct sock *sk, int subclass)
3640{
3641	/* The sk_lock has mutex_lock() semantics here. */
3642	mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
3643
3644	might_sleep();
3645	spin_lock_bh(&sk->sk_lock.slock);
3646	if (sock_owned_by_user_nocheck(sk))
3647		__lock_sock(sk);
3648	sk->sk_lock.owned = 1;
3649	spin_unlock_bh(&sk->sk_lock.slock);
 
 
 
 
 
3650}
3651EXPORT_SYMBOL(lock_sock_nested);
3652
3653void release_sock(struct sock *sk)
3654{
3655	spin_lock_bh(&sk->sk_lock.slock);
3656	if (sk->sk_backlog.tail)
3657		__release_sock(sk);
3658
 
 
 
3659	if (sk->sk_prot->release_cb)
3660		INDIRECT_CALL_INET_1(sk->sk_prot->release_cb,
3661				     tcp_release_cb, sk);
3662
3663	sock_release_ownership(sk);
3664	if (waitqueue_active(&sk->sk_lock.wq))
3665		wake_up(&sk->sk_lock.wq);
3666	spin_unlock_bh(&sk->sk_lock.slock);
3667}
3668EXPORT_SYMBOL(release_sock);
3669
3670bool __lock_sock_fast(struct sock *sk) __acquires(&sk->sk_lock.slock)
 
 
 
 
 
 
 
 
 
 
 
 
 
3671{
3672	might_sleep();
3673	spin_lock_bh(&sk->sk_lock.slock);
3674
3675	if (!sock_owned_by_user_nocheck(sk)) {
3676		/*
3677		 * Fast path return with bottom halves disabled and
3678		 * sock::sk_lock.slock held.
3679		 *
3680		 * The 'mutex' is not contended and holding
3681		 * sock::sk_lock.slock prevents all other lockers to
3682		 * proceed so the corresponding unlock_sock_fast() can
3683		 * avoid the slow path of release_sock() completely and
3684		 * just release slock.
3685		 *
3686		 * From a semantical POV this is equivalent to 'acquiring'
3687		 * the 'mutex', hence the corresponding lockdep
3688		 * mutex_release() has to happen in the fast path of
3689		 * unlock_sock_fast().
3690		 */
3691		return false;
3692	}
3693
3694	__lock_sock(sk);
3695	sk->sk_lock.owned = 1;
3696	__acquire(&sk->sk_lock.slock);
3697	spin_unlock_bh(&sk->sk_lock.slock);
 
 
 
 
3698	return true;
3699}
3700EXPORT_SYMBOL(__lock_sock_fast);
3701
3702int sock_gettstamp(struct socket *sock, void __user *userstamp,
3703		   bool timeval, bool time32)
3704{
3705	struct sock *sk = sock->sk;
3706	struct timespec64 ts;
3707
3708	sock_enable_timestamp(sk, SOCK_TIMESTAMP);
3709	ts = ktime_to_timespec64(sock_read_timestamp(sk));
3710	if (ts.tv_sec == -1)
3711		return -ENOENT;
3712	if (ts.tv_sec == 0) {
3713		ktime_t kt = ktime_get_real();
3714		sock_write_timestamp(sk, kt);
3715		ts = ktime_to_timespec64(kt);
3716	}
3717
3718	if (timeval)
3719		ts.tv_nsec /= 1000;
3720
3721#ifdef CONFIG_COMPAT_32BIT_TIME
3722	if (time32)
3723		return put_old_timespec32(&ts, userstamp);
3724#endif
3725#ifdef CONFIG_SPARC64
3726	/* beware of padding in sparc64 timeval */
3727	if (timeval && !in_compat_syscall()) {
3728		struct __kernel_old_timeval __user tv = {
3729			.tv_sec = ts.tv_sec,
3730			.tv_usec = ts.tv_nsec,
3731		};
3732		if (copy_to_user(userstamp, &tv, sizeof(tv)))
3733			return -EFAULT;
3734		return 0;
3735	}
3736#endif
3737	return put_timespec64(&ts, userstamp);
3738}
3739EXPORT_SYMBOL(sock_gettstamp);
3740
3741void sock_enable_timestamp(struct sock *sk, enum sock_flags flag)
3742{
3743	if (!sock_flag(sk, flag)) {
3744		unsigned long previous_flags = sk->sk_flags;
3745
3746		sock_set_flag(sk, flag);
3747		/*
3748		 * we just set one of the two flags which require net
3749		 * time stamping, but time stamping might have been on
3750		 * already because of the other one
3751		 */
3752		if (sock_needs_netstamp(sk) &&
3753		    !(previous_flags & SK_FLAGS_TIMESTAMP))
3754			net_enable_timestamp();
3755	}
3756}
3757
3758int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
3759		       int level, int type)
3760{
3761	struct sock_exterr_skb *serr;
3762	struct sk_buff *skb;
3763	int copied, err;
3764
3765	err = -EAGAIN;
3766	skb = sock_dequeue_err_skb(sk);
3767	if (skb == NULL)
3768		goto out;
3769
3770	copied = skb->len;
3771	if (copied > len) {
3772		msg->msg_flags |= MSG_TRUNC;
3773		copied = len;
3774	}
3775	err = skb_copy_datagram_msg(skb, 0, msg, copied);
3776	if (err)
3777		goto out_free_skb;
3778
3779	sock_recv_timestamp(msg, sk, skb);
3780
3781	serr = SKB_EXT_ERR(skb);
3782	put_cmsg(msg, level, type, sizeof(serr->ee), &serr->ee);
3783
3784	msg->msg_flags |= MSG_ERRQUEUE;
3785	err = copied;
3786
3787out_free_skb:
3788	kfree_skb(skb);
3789out:
3790	return err;
3791}
3792EXPORT_SYMBOL(sock_recv_errqueue);
3793
3794/*
3795 *	Get a socket option on an socket.
3796 *
3797 *	FIX: POSIX 1003.1g is very ambiguous here. It states that
3798 *	asynchronous errors should be reported by getsockopt. We assume
3799 *	this means if you specify SO_ERROR (otherwise what is the point of it).
3800 */
3801int sock_common_getsockopt(struct socket *sock, int level, int optname,
3802			   char __user *optval, int __user *optlen)
3803{
3804	struct sock *sk = sock->sk;
3805
3806	/* IPV6_ADDRFORM can change sk->sk_prot under us. */
3807	return READ_ONCE(sk->sk_prot)->getsockopt(sk, level, optname, optval, optlen);
3808}
3809EXPORT_SYMBOL(sock_common_getsockopt);
3810
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3811int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
3812			int flags)
3813{
3814	struct sock *sk = sock->sk;
3815	int addr_len = 0;
3816	int err;
3817
3818	err = sk->sk_prot->recvmsg(sk, msg, size, flags, &addr_len);
 
3819	if (err >= 0)
3820		msg->msg_namelen = addr_len;
3821	return err;
3822}
3823EXPORT_SYMBOL(sock_common_recvmsg);
3824
3825/*
3826 *	Set socket options on an inet socket.
3827 */
3828int sock_common_setsockopt(struct socket *sock, int level, int optname,
3829			   sockptr_t optval, unsigned int optlen)
3830{
3831	struct sock *sk = sock->sk;
3832
3833	/* IPV6_ADDRFORM can change sk->sk_prot under us. */
3834	return READ_ONCE(sk->sk_prot)->setsockopt(sk, level, optname, optval, optlen);
3835}
3836EXPORT_SYMBOL(sock_common_setsockopt);
3837
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3838void sk_common_release(struct sock *sk)
3839{
3840	if (sk->sk_prot->destroy)
3841		sk->sk_prot->destroy(sk);
3842
3843	/*
3844	 * Observation: when sk_common_release is called, processes have
3845	 * no access to socket. But net still has.
3846	 * Step one, detach it from networking:
3847	 *
3848	 * A. Remove from hash tables.
3849	 */
3850
3851	sk->sk_prot->unhash(sk);
3852
3853	/*
3854	 * In this point socket cannot receive new packets, but it is possible
3855	 * that some packets are in flight because some CPU runs receiver and
3856	 * did hash table lookup before we unhashed socket. They will achieve
3857	 * receive queue and will be purged by socket destructor.
3858	 *
3859	 * Also we still have packets pending on receive queue and probably,
3860	 * our own packets waiting in device queues. sock_destroy will drain
3861	 * receive queue, but transmitted packets will delay socket destruction
3862	 * until the last reference will be released.
3863	 */
3864
3865	sock_orphan(sk);
3866
3867	xfrm_sk_free_policy(sk);
3868
 
 
3869	sock_put(sk);
3870}
3871EXPORT_SYMBOL(sk_common_release);
3872
3873void sk_get_meminfo(const struct sock *sk, u32 *mem)
3874{
3875	memset(mem, 0, sizeof(*mem) * SK_MEMINFO_VARS);
3876
3877	mem[SK_MEMINFO_RMEM_ALLOC] = sk_rmem_alloc_get(sk);
3878	mem[SK_MEMINFO_RCVBUF] = READ_ONCE(sk->sk_rcvbuf);
3879	mem[SK_MEMINFO_WMEM_ALLOC] = sk_wmem_alloc_get(sk);
3880	mem[SK_MEMINFO_SNDBUF] = READ_ONCE(sk->sk_sndbuf);
3881	mem[SK_MEMINFO_FWD_ALLOC] = sk_forward_alloc_get(sk);
3882	mem[SK_MEMINFO_WMEM_QUEUED] = READ_ONCE(sk->sk_wmem_queued);
3883	mem[SK_MEMINFO_OPTMEM] = atomic_read(&sk->sk_omem_alloc);
3884	mem[SK_MEMINFO_BACKLOG] = READ_ONCE(sk->sk_backlog.len);
3885	mem[SK_MEMINFO_DROPS] = atomic_read(&sk->sk_drops);
3886}
3887
3888#ifdef CONFIG_PROC_FS
 
 
 
 
 
3889static DECLARE_BITMAP(proto_inuse_idx, PROTO_INUSE_NR);
3890
 
 
 
 
 
 
3891int sock_prot_inuse_get(struct net *net, struct proto *prot)
3892{
3893	int cpu, idx = prot->inuse_idx;
3894	int res = 0;
3895
3896	for_each_possible_cpu(cpu)
3897		res += per_cpu_ptr(net->core.prot_inuse, cpu)->val[idx];
3898
3899	return res >= 0 ? res : 0;
3900}
3901EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
3902
 
 
 
 
 
3903int sock_inuse_get(struct net *net)
3904{
3905	int cpu, res = 0;
3906
3907	for_each_possible_cpu(cpu)
3908		res += per_cpu_ptr(net->core.prot_inuse, cpu)->all;
3909
3910	return res;
3911}
3912
3913EXPORT_SYMBOL_GPL(sock_inuse_get);
3914
3915static int __net_init sock_inuse_init_net(struct net *net)
3916{
3917	net->core.prot_inuse = alloc_percpu(struct prot_inuse);
3918	if (net->core.prot_inuse == NULL)
3919		return -ENOMEM;
 
 
 
 
 
3920	return 0;
 
 
 
 
3921}
3922
3923static void __net_exit sock_inuse_exit_net(struct net *net)
3924{
3925	free_percpu(net->core.prot_inuse);
 
3926}
3927
3928static struct pernet_operations net_inuse_ops = {
3929	.init = sock_inuse_init_net,
3930	.exit = sock_inuse_exit_net,
3931};
3932
3933static __init int net_inuse_init(void)
3934{
3935	if (register_pernet_subsys(&net_inuse_ops))
3936		panic("Cannot initialize net inuse counters");
3937
3938	return 0;
3939}
3940
3941core_initcall(net_inuse_init);
3942
3943static int assign_proto_idx(struct proto *prot)
3944{
3945	prot->inuse_idx = find_first_zero_bit(proto_inuse_idx, PROTO_INUSE_NR);
3946
3947	if (unlikely(prot->inuse_idx == PROTO_INUSE_NR - 1)) {
3948		pr_err("PROTO_INUSE_NR exhausted\n");
3949		return -ENOSPC;
3950	}
3951
3952	set_bit(prot->inuse_idx, proto_inuse_idx);
3953	return 0;
3954}
3955
3956static void release_proto_idx(struct proto *prot)
3957{
3958	if (prot->inuse_idx != PROTO_INUSE_NR - 1)
3959		clear_bit(prot->inuse_idx, proto_inuse_idx);
3960}
3961#else
3962static inline int assign_proto_idx(struct proto *prot)
3963{
3964	return 0;
3965}
3966
3967static inline void release_proto_idx(struct proto *prot)
3968{
3969}
3970
3971#endif
3972
3973static void tw_prot_cleanup(struct timewait_sock_ops *twsk_prot)
3974{
3975	if (!twsk_prot)
3976		return;
3977	kfree(twsk_prot->twsk_slab_name);
3978	twsk_prot->twsk_slab_name = NULL;
3979	kmem_cache_destroy(twsk_prot->twsk_slab);
3980	twsk_prot->twsk_slab = NULL;
3981}
3982
3983static int tw_prot_init(const struct proto *prot)
3984{
3985	struct timewait_sock_ops *twsk_prot = prot->twsk_prot;
3986
3987	if (!twsk_prot)
3988		return 0;
3989
3990	twsk_prot->twsk_slab_name = kasprintf(GFP_KERNEL, "tw_sock_%s",
3991					      prot->name);
3992	if (!twsk_prot->twsk_slab_name)
3993		return -ENOMEM;
3994
3995	twsk_prot->twsk_slab =
3996		kmem_cache_create(twsk_prot->twsk_slab_name,
3997				  twsk_prot->twsk_obj_size, 0,
3998				  SLAB_ACCOUNT | prot->slab_flags,
3999				  NULL);
4000	if (!twsk_prot->twsk_slab) {
4001		pr_crit("%s: Can't create timewait sock SLAB cache!\n",
4002			prot->name);
4003		return -ENOMEM;
4004	}
4005
4006	return 0;
4007}
 
4008
4009static void req_prot_cleanup(struct request_sock_ops *rsk_prot)
4010{
4011	if (!rsk_prot)
4012		return;
4013	kfree(rsk_prot->slab_name);
4014	rsk_prot->slab_name = NULL;
4015	kmem_cache_destroy(rsk_prot->slab);
4016	rsk_prot->slab = NULL;
4017}
4018
4019static int req_prot_init(const struct proto *prot)
4020{
4021	struct request_sock_ops *rsk_prot = prot->rsk_prot;
4022
4023	if (!rsk_prot)
4024		return 0;
4025
4026	rsk_prot->slab_name = kasprintf(GFP_KERNEL, "request_sock_%s",
4027					prot->name);
4028	if (!rsk_prot->slab_name)
4029		return -ENOMEM;
4030
4031	rsk_prot->slab = kmem_cache_create(rsk_prot->slab_name,
4032					   rsk_prot->obj_size, 0,
4033					   SLAB_ACCOUNT | prot->slab_flags,
4034					   NULL);
4035
4036	if (!rsk_prot->slab) {
4037		pr_crit("%s: Can't create request sock SLAB cache!\n",
4038			prot->name);
4039		return -ENOMEM;
4040	}
4041	return 0;
4042}
4043
4044int proto_register(struct proto *prot, int alloc_slab)
4045{
4046	int ret = -ENOBUFS;
4047
4048	if (prot->memory_allocated && !prot->sysctl_mem) {
4049		pr_err("%s: missing sysctl_mem\n", prot->name);
4050		return -EINVAL;
4051	}
4052	if (prot->memory_allocated && !prot->per_cpu_fw_alloc) {
4053		pr_err("%s: missing per_cpu_fw_alloc\n", prot->name);
4054		return -EINVAL;
4055	}
4056	if (alloc_slab) {
4057		prot->slab = kmem_cache_create_usercopy(prot->name,
4058					prot->obj_size, 0,
4059					SLAB_HWCACHE_ALIGN | SLAB_ACCOUNT |
4060					prot->slab_flags,
4061					prot->useroffset, prot->usersize,
4062					NULL);
4063
4064		if (prot->slab == NULL) {
4065			pr_crit("%s: Can't create sock SLAB cache!\n",
4066				prot->name);
4067			goto out;
4068		}
4069
4070		if (req_prot_init(prot))
4071			goto out_free_request_sock_slab;
4072
4073		if (tw_prot_init(prot))
4074			goto out_free_timewait_sock_slab;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4075	}
4076
4077	mutex_lock(&proto_list_mutex);
4078	ret = assign_proto_idx(prot);
4079	if (ret) {
4080		mutex_unlock(&proto_list_mutex);
4081		goto out_free_timewait_sock_slab;
4082	}
4083	list_add(&prot->node, &proto_list);
4084	mutex_unlock(&proto_list_mutex);
4085	return ret;
4086
4087out_free_timewait_sock_slab:
4088	if (alloc_slab)
4089		tw_prot_cleanup(prot->twsk_prot);
4090out_free_request_sock_slab:
4091	if (alloc_slab) {
4092		req_prot_cleanup(prot->rsk_prot);
4093
4094		kmem_cache_destroy(prot->slab);
4095		prot->slab = NULL;
4096	}
4097out:
4098	return ret;
4099}
4100EXPORT_SYMBOL(proto_register);
4101
4102void proto_unregister(struct proto *prot)
4103{
4104	mutex_lock(&proto_list_mutex);
4105	release_proto_idx(prot);
4106	list_del(&prot->node);
4107	mutex_unlock(&proto_list_mutex);
4108
4109	kmem_cache_destroy(prot->slab);
4110	prot->slab = NULL;
4111
4112	req_prot_cleanup(prot->rsk_prot);
4113	tw_prot_cleanup(prot->twsk_prot);
 
 
 
 
 
4114}
4115EXPORT_SYMBOL(proto_unregister);
4116
4117int sock_load_diag_module(int family, int protocol)
4118{
4119	if (!protocol) {
4120		if (!sock_is_registered(family))
4121			return -ENOENT;
4122
4123		return request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
4124				      NETLINK_SOCK_DIAG, family);
4125	}
4126
4127#ifdef CONFIG_INET
4128	if (family == AF_INET &&
4129	    protocol != IPPROTO_RAW &&
4130	    protocol < MAX_INET_PROTOS &&
4131	    !rcu_access_pointer(inet_protos[protocol]))
4132		return -ENOENT;
4133#endif
4134
4135	return request_module("net-pf-%d-proto-%d-type-%d-%d", PF_NETLINK,
4136			      NETLINK_SOCK_DIAG, family, protocol);
4137}
4138EXPORT_SYMBOL(sock_load_diag_module);
4139
4140#ifdef CONFIG_PROC_FS
4141static void *proto_seq_start(struct seq_file *seq, loff_t *pos)
4142	__acquires(proto_list_mutex)
4143{
4144	mutex_lock(&proto_list_mutex);
4145	return seq_list_start_head(&proto_list, *pos);
4146}
4147
4148static void *proto_seq_next(struct seq_file *seq, void *v, loff_t *pos)
4149{
4150	return seq_list_next(v, &proto_list, pos);
4151}
4152
4153static void proto_seq_stop(struct seq_file *seq, void *v)
4154	__releases(proto_list_mutex)
4155{
4156	mutex_unlock(&proto_list_mutex);
4157}
4158
4159static char proto_method_implemented(const void *method)
4160{
4161	return method == NULL ? 'n' : 'y';
4162}
4163static long sock_prot_memory_allocated(struct proto *proto)
4164{
4165	return proto->memory_allocated != NULL ? proto_memory_allocated(proto) : -1L;
4166}
4167
4168static const char *sock_prot_memory_pressure(struct proto *proto)
4169{
4170	return proto->memory_pressure != NULL ?
4171	proto_memory_pressure(proto) ? "yes" : "no" : "NI";
4172}
4173
4174static void proto_seq_printf(struct seq_file *seq, struct proto *proto)
4175{
4176
4177	seq_printf(seq, "%-9s %4u %6d  %6ld   %-3s %6u   %-3s  %-10s "
4178			"%2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c %2c\n",
4179		   proto->name,
4180		   proto->obj_size,
4181		   sock_prot_inuse_get(seq_file_net(seq), proto),
4182		   sock_prot_memory_allocated(proto),
4183		   sock_prot_memory_pressure(proto),
4184		   proto->max_header,
4185		   proto->slab == NULL ? "no" : "yes",
4186		   module_name(proto->owner),
4187		   proto_method_implemented(proto->close),
4188		   proto_method_implemented(proto->connect),
4189		   proto_method_implemented(proto->disconnect),
4190		   proto_method_implemented(proto->accept),
4191		   proto_method_implemented(proto->ioctl),
4192		   proto_method_implemented(proto->init),
4193		   proto_method_implemented(proto->destroy),
4194		   proto_method_implemented(proto->shutdown),
4195		   proto_method_implemented(proto->setsockopt),
4196		   proto_method_implemented(proto->getsockopt),
4197		   proto_method_implemented(proto->sendmsg),
4198		   proto_method_implemented(proto->recvmsg),
 
4199		   proto_method_implemented(proto->bind),
4200		   proto_method_implemented(proto->backlog_rcv),
4201		   proto_method_implemented(proto->hash),
4202		   proto_method_implemented(proto->unhash),
4203		   proto_method_implemented(proto->get_port),
4204		   proto_method_implemented(proto->enter_memory_pressure));
4205}
4206
4207static int proto_seq_show(struct seq_file *seq, void *v)
4208{
4209	if (v == &proto_list)
4210		seq_printf(seq, "%-9s %-4s %-8s %-6s %-5s %-7s %-4s %-10s %s",
4211			   "protocol",
4212			   "size",
4213			   "sockets",
4214			   "memory",
4215			   "press",
4216			   "maxhdr",
4217			   "slab",
4218			   "module",
4219			   "cl co di ac io in de sh ss gs se re bi br ha uh gp em\n");
4220	else
4221		proto_seq_printf(seq, list_entry(v, struct proto, node));
4222	return 0;
4223}
4224
4225static const struct seq_operations proto_seq_ops = {
4226	.start  = proto_seq_start,
4227	.next   = proto_seq_next,
4228	.stop   = proto_seq_stop,
4229	.show   = proto_seq_show,
4230};
4231
4232static __net_init int proto_init_net(struct net *net)
4233{
4234	if (!proc_create_net("protocols", 0444, net->proc_net, &proto_seq_ops,
4235			sizeof(struct seq_net_private)))
4236		return -ENOMEM;
4237
4238	return 0;
4239}
4240
4241static __net_exit void proto_exit_net(struct net *net)
4242{
4243	remove_proc_entry("protocols", net->proc_net);
4244}
4245
4246
4247static __net_initdata struct pernet_operations proto_net_ops = {
4248	.init = proto_init_net,
4249	.exit = proto_exit_net,
4250};
4251
4252static int __init proto_init(void)
4253{
4254	return register_pernet_subsys(&proto_net_ops);
4255}
4256
4257subsys_initcall(proto_init);
4258
4259#endif /* PROC_FS */
4260
4261#ifdef CONFIG_NET_RX_BUSY_POLL
4262bool sk_busy_loop_end(void *p, unsigned long start_time)
4263{
4264	struct sock *sk = p;
4265
4266	if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
4267		return true;
4268
4269	if (sk_is_udp(sk) &&
4270	    !skb_queue_empty_lockless(&udp_sk(sk)->reader_queue))
4271		return true;
4272
4273	return sk_busy_loop_timeout(sk, start_time);
4274}
4275EXPORT_SYMBOL(sk_busy_loop_end);
4276#endif /* CONFIG_NET_RX_BUSY_POLL */
4277
4278int sock_bind_add(struct sock *sk, struct sockaddr *addr, int addr_len)
4279{
4280	if (!sk->sk_prot->bind_add)
4281		return -EOPNOTSUPP;
4282	return sk->sk_prot->bind_add(sk, addr, addr_len);
4283}
4284EXPORT_SYMBOL(sock_bind_add);
4285
4286/* Copy 'size' bytes from userspace and return `size` back to userspace */
4287int sock_ioctl_inout(struct sock *sk, unsigned int cmd,
4288		     void __user *arg, void *karg, size_t size)
4289{
4290	int ret;
4291
4292	if (copy_from_user(karg, arg, size))
4293		return -EFAULT;
4294
4295	ret = READ_ONCE(sk->sk_prot)->ioctl(sk, cmd, karg);
4296	if (ret)
4297		return ret;
4298
4299	if (copy_to_user(arg, karg, size))
4300		return -EFAULT;
4301
4302	return 0;
4303}
4304EXPORT_SYMBOL(sock_ioctl_inout);
4305
4306/* This is the most common ioctl prep function, where the result (4 bytes) is
4307 * copied back to userspace if the ioctl() returns successfully. No input is
4308 * copied from userspace as input argument.
4309 */
4310static int sock_ioctl_out(struct sock *sk, unsigned int cmd, void __user *arg)
4311{
4312	int ret, karg = 0;
4313
4314	ret = READ_ONCE(sk->sk_prot)->ioctl(sk, cmd, &karg);
4315	if (ret)
4316		return ret;
4317
4318	return put_user(karg, (int __user *)arg);
4319}
4320
4321/* A wrapper around sock ioctls, which copies the data from userspace
4322 * (depending on the protocol/ioctl), and copies back the result to userspace.
4323 * The main motivation for this function is to pass kernel memory to the
4324 * protocol ioctl callbacks, instead of userspace memory.
4325 */
4326int sk_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
4327{
4328	int rc = 1;
4329
4330	if (sk->sk_type == SOCK_RAW && sk->sk_family == AF_INET)
4331		rc = ipmr_sk_ioctl(sk, cmd, arg);
4332	else if (sk->sk_type == SOCK_RAW && sk->sk_family == AF_INET6)
4333		rc = ip6mr_sk_ioctl(sk, cmd, arg);
4334	else if (sk_is_phonet(sk))
4335		rc = phonet_sk_ioctl(sk, cmd, arg);
4336
4337	/* If ioctl was processed, returns its value */
4338	if (rc <= 0)
4339		return rc;
4340
4341	/* Otherwise call the default handler */
4342	return sock_ioctl_out(sk, cmd, arg);
4343}
4344EXPORT_SYMBOL(sk_ioctl);
4345
4346static int __init sock_struct_check(void)
4347{
4348	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rx, sk_drops);
4349	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rx, sk_peek_off);
4350	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rx, sk_error_queue);
4351	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rx, sk_receive_queue);
4352	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rx, sk_backlog);
4353
4354	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_rx_dst);
4355	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_rx_dst_ifindex);
4356	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_rx_dst_cookie);
4357	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_rcvbuf);
4358	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_filter);
4359	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_wq);
4360	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_data_ready);
4361	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_rcvtimeo);
4362	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_rcvlowat);
4363
4364	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rxtx, sk_err);
4365	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rxtx, sk_socket);
4366	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rxtx, sk_memcg);
4367
4368	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rxtx, sk_lock);
4369	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rxtx, sk_reserved_mem);
4370	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rxtx, sk_forward_alloc);
4371	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rxtx, sk_tsflags);
4372
4373	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_omem_alloc);
4374	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_omem_alloc);
4375	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_sndbuf);
4376	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_wmem_queued);
4377	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_wmem_alloc);
4378	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_tsq_flags);
4379	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_send_head);
4380	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_write_queue);
4381	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_write_pending);
4382	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_dst_pending_confirm);
4383	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_pacing_status);
4384	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_frag);
4385	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_timer);
4386	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_pacing_rate);
4387	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_zckey);
4388	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_tx, sk_tskey);
4389
4390	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_max_pacing_rate);
4391	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_sndtimeo);
4392	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_priority);
4393	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_mark);
4394	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_dst_cache);
4395	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_route_caps);
4396	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_gso_type);
4397	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_gso_max_size);
4398	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_allocation);
4399	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_txhash);
4400	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_gso_max_segs);
4401	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_pacing_shift);
4402	CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_tx, sk_use_task_frag);
4403	return 0;
4404}
4405
4406core_initcall(sock_struct_check);
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 */