hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/include/linux/skbuff.h
....@@ -1,14 +1,10 @@
1
+/* SPDX-License-Identifier: GPL-2.0-or-later */
12 /*
23 * Definitions for the 'struct sk_buff' memory handlers.
34 *
45 * Authors:
56 * Alan Cox, <gw4pts@gw4pts.ampr.org>
67 * Florian La Roche, <rzsfl@rz.uni-sb.de>
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU General Public License
10
- * as published by the Free Software Foundation; either version
11
- * 2 of the License, or (at your option) any later version.
128 */
139
1410 #ifndef _LINUX_SKBUFF_H
....@@ -18,6 +14,7 @@
1814 #include <linux/compiler.h>
1915 #include <linux/time.h>
2016 #include <linux/bug.h>
17
+#include <linux/bvec.h>
2118 #include <linux/cache.h>
2219 #include <linux/rbtree.h>
2320 #include <linux/socket.h>
....@@ -40,6 +37,11 @@
4037 #include <linux/in6.h>
4138 #include <linux/if_packet.h>
4239 #include <net/flow.h>
40
+#if IS_ENABLED(CONFIG_NF_CONNTRACK)
41
+#include <linux/netfilter/nf_conntrack_common.h>
42
+#endif
43
+#include <linux/android_kabi.h>
44
+#include <linux/android_vendor.h>
4345
4446 /* The interface for checksum offload between the stack and networking drivers
4547 * is as follows...
....@@ -47,8 +49,8 @@
4749 * A. IP checksum related features
4850 *
4951 * Drivers advertise checksum offload capabilities in the features of a device.
50
- * From the stack's point of view these are capabilities offered by the driver,
51
- * a driver typically only advertises features that it is capable of offloading
52
+ * From the stack's point of view these are capabilities offered by the driver.
53
+ * A driver typically only advertises features that it is capable of offloading
5254 * to its device.
5355 *
5456 * The checksum related features are:
....@@ -63,7 +65,7 @@
6365 * TCP or UDP packets over IPv4. These are specifically
6466 * unencapsulated packets of the form IPv4|TCP or
6567 * IPv4|UDP where the Protocol field in the IPv4 header
66
- * is TCP or UDP. The IPv4 header may contain IP options
68
+ * is TCP or UDP. The IPv4 header may contain IP options.
6769 * This feature cannot be set in features for a device
6870 * with NETIF_F_HW_CSUM also set. This feature is being
6971 * DEPRECATED (see below).
....@@ -71,7 +73,7 @@
7173 * NETIF_F_IPV6_CSUM - Driver (device) is only able to checksum plain
7274 * TCP or UDP packets over IPv6. These are specifically
7375 * unencapsulated packets of the form IPv6|TCP or
74
- * IPv4|UDP where the Next Header field in the IPv6
76
+ * IPv6|UDP where the Next Header field in the IPv6
7577 * header is either TCP or UDP. IPv6 extension headers
7678 * are not supported with this feature. This feature
7779 * cannot be set in features for a device with
....@@ -79,13 +81,13 @@
7981 * DEPRECATED (see below).
8082 *
8183 * NETIF_F_RXCSUM - Driver (device) performs receive checksum offload.
82
- * This flag is used only used to disable the RX checksum
84
+ * This flag is only used to disable the RX checksum
8385 * feature for a device. The stack will accept receive
8486 * checksum indication in packets received on a device
8587 * regardless of whether NETIF_F_RXCSUM is set.
8688 *
8789 * B. Checksumming of received packets by device. Indication of checksum
88
- * verification is in set skb->ip_summed. Possible values are:
90
+ * verification is set in skb->ip_summed. Possible values are:
8991 *
9092 * CHECKSUM_NONE:
9193 *
....@@ -115,16 +117,16 @@
115117 * the packet minus one that have been verified as CHECKSUM_UNNECESSARY.
116118 * For instance if a device receives an IPv6->UDP->GRE->IPv4->TCP packet
117119 * and a device is able to verify the checksums for UDP (possibly zero),
118
- * GRE (checksum flag is set), and TCP-- skb->csum_level would be set to
120
+ * GRE (checksum flag is set) and TCP, skb->csum_level would be set to
119121 * two. If the device were only able to verify the UDP checksum and not
120
- * GRE, either because it doesn't support GRE checksum of because GRE
122
+ * GRE, either because it doesn't support GRE checksum or because GRE
121123 * checksum is bad, skb->csum_level would be set to zero (TCP checksum is
122124 * not considered in this case).
123125 *
124126 * CHECKSUM_COMPLETE:
125127 *
126128 * This is the most generic way. The device supplied checksum of the _whole_
127
- * packet as seen by netif_rx() and fills out in skb->csum. Meaning, the
129
+ * packet as seen by netif_rx() and fills in skb->csum. This means the
128130 * hardware doesn't need to parse L3/L4 headers to implement this.
129131 *
130132 * Notes:
....@@ -153,8 +155,8 @@
153155 * from skb->csum_start up to the end, and to record/write the checksum at
154156 * offset skb->csum_start + skb->csum_offset. A driver may verify that the
155157 * csum_start and csum_offset values are valid values given the length and
156
- * offset of the packet, however they should not attempt to validate that the
157
- * checksum refers to a legitimate transport layer checksum-- it is the
158
+ * offset of the packet, but it should not attempt to validate that the
159
+ * checksum refers to a legitimate transport layer checksum -- it is the
158160 * purview of the stack to validate that csum_start and csum_offset are set
159161 * correctly.
160162 *
....@@ -178,18 +180,18 @@
178180 *
179181 * CHECKSUM_UNNECESSARY:
180182 *
181
- * This has the same meaning on as CHECKSUM_NONE for checksum offload on
183
+ * This has the same meaning as CHECKSUM_NONE for checksum offload on
182184 * output.
183185 *
184186 * CHECKSUM_COMPLETE:
185187 * Not used in checksum output. If a driver observes a packet with this value
186
- * set in skbuff, if should treat as CHECKSUM_NONE being set.
188
+ * set in skbuff, it should treat the packet as if CHECKSUM_NONE were set.
187189 *
188190 * D. Non-IP checksum (CRC) offloads
189191 *
190192 * NETIF_F_SCTP_CRC - This feature indicates that a device is capable of
191193 * offloading the SCTP CRC in a packet. To perform this offload the stack
192
- * will set set csum_start and csum_offset accordingly, set ip_summed to
194
+ * will set csum_start and csum_offset accordingly, set ip_summed to
193195 * CHECKSUM_PARTIAL and set csum_not_inet to 1, to provide an indication in
194196 * the skbuff that the CHECKSUM_PARTIAL refers to CRC32c.
195197 * A driver that supports both IP checksum offload and SCTP CRC32c offload
....@@ -200,10 +202,10 @@
200202 * NETIF_F_FCOE_CRC - This feature indicates that a device is capable of
201203 * offloading the FCOE CRC in a packet. To perform this offload the stack
202204 * will set ip_summed to CHECKSUM_PARTIAL and set csum_start and csum_offset
203
- * accordingly. Note the there is no indication in the skbuff that the
204
- * CHECKSUM_PARTIAL refers to an FCOE checksum, a driver that supports
205
+ * accordingly. Note that there is no indication in the skbuff that the
206
+ * CHECKSUM_PARTIAL refers to an FCOE checksum, so a driver that supports
205207 * both IP checksum offload and FCOE CRC offload must verify which offload
206
- * is configured for a packet presumably by inspecting packet headers.
208
+ * is configured for a packet, presumably by inspecting packet headers.
207209 *
208210 * E. Checksumming on output with GSO.
209211 *
....@@ -211,9 +213,9 @@
211213 * is implied by the SKB_GSO_* flags in gso_type. Most obviously, if the
212214 * gso_type is SKB_GSO_TCPV4 or SKB_GSO_TCPV6, TCP checksum offload as
213215 * part of the GSO operation is implied. If a checksum is being offloaded
214
- * with GSO then ip_summed is CHECKSUM_PARTIAL, csum_start and csum_offset
215
- * are set to refer to the outermost checksum being offload (two offloaded
216
- * checksums are possible with UDP encapsulation).
216
+ * with GSO then ip_summed is CHECKSUM_PARTIAL, and both csum_start and
217
+ * csum_offset are set to refer to the outermost checksum being offloaded
218
+ * (two offloaded checksums are possible with UDP encapsulation).
217219 */
218220
219221 /* Don't change this without changing skb_csum_unnecessary! */
....@@ -238,21 +240,18 @@
238240 SKB_DATA_ALIGN(sizeof(struct sk_buff)) + \
239241 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
240242
243
+struct ahash_request;
241244 struct net_device;
242245 struct scatterlist;
243246 struct pipe_inode_info;
244247 struct iov_iter;
245248 struct napi_struct;
249
+struct bpf_prog;
250
+union bpf_attr;
251
+struct skb_ext;
246252
247
-#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
248
-struct nf_conntrack {
249
- atomic_t use;
250
-};
251
-#endif
252
-#include <linux/android_kabi.h>
253
-
253
+#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
254254 struct nf_bridge_info {
255
- refcount_t use;
256255 enum {
257256 BRNF_PROTO_UNCHANGED,
258257 BRNF_PROTO_8021Q,
....@@ -278,6 +277,18 @@
278277 char neigh_header[8];
279278 };
280279 };
280
+#endif
281
+
282
+#if IS_ENABLED(CONFIG_NET_TC_SKB_EXT)
283
+/* Chain in tc_skb_ext will be used to share the tc chain with
284
+ * ovs recirc_id. It will be set to the current chain by tc
285
+ * and read by ovs to recirc_id.
286
+ */
287
+struct tc_skb_ext {
288
+ __u32 chain;
289
+ __u16 mru;
290
+};
291
+#endif
281292
282293 struct sk_buff_head {
283294 /* These two members must be first. */
....@@ -286,6 +297,7 @@
286297
287298 __u32 qlen;
288299 spinlock_t lock;
300
+ raw_spinlock_t raw_lock;
289301 };
290302
291303 struct sk_buff;
....@@ -309,41 +321,51 @@
309321 */
310322 #define GSO_BY_FRAGS 0xFFFF
311323
312
-typedef struct skb_frag_struct skb_frag_t;
324
+typedef struct bio_vec skb_frag_t;
313325
314
-struct skb_frag_struct {
315
- struct {
316
- struct page *p;
317
- } page;
318
-#if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536)
319
- __u32 page_offset;
320
- __u32 size;
321
-#else
322
- __u16 page_offset;
323
- __u16 size;
324
-#endif
325
-};
326
-
326
+/**
327
+ * skb_frag_size() - Returns the size of a skb fragment
328
+ * @frag: skb fragment
329
+ */
327330 static inline unsigned int skb_frag_size(const skb_frag_t *frag)
328331 {
329
- return frag->size;
332
+ return frag->bv_len;
330333 }
331334
335
+/**
336
+ * skb_frag_size_set() - Sets the size of a skb fragment
337
+ * @frag: skb fragment
338
+ * @size: size of fragment
339
+ */
332340 static inline void skb_frag_size_set(skb_frag_t *frag, unsigned int size)
333341 {
334
- frag->size = size;
342
+ frag->bv_len = size;
335343 }
336344
345
+/**
346
+ * skb_frag_size_add() - Increments the size of a skb fragment by @delta
347
+ * @frag: skb fragment
348
+ * @delta: value to add
349
+ */
337350 static inline void skb_frag_size_add(skb_frag_t *frag, int delta)
338351 {
339
- frag->size += delta;
352
+ frag->bv_len += delta;
340353 }
341354
355
+/**
356
+ * skb_frag_size_sub() - Decrements the size of a skb fragment by @delta
357
+ * @frag: skb fragment
358
+ * @delta: value to subtract
359
+ */
342360 static inline void skb_frag_size_sub(skb_frag_t *frag, int delta)
343361 {
344
- frag->size -= delta;
362
+ frag->bv_len -= delta;
345363 }
346364
365
+/**
366
+ * skb_frag_must_loop - Test if %p is a high memory page
367
+ * @p: fragment's page
368
+ */
347369 static inline bool skb_frag_must_loop(struct page *p)
348370 {
349371 #if defined(CONFIG_HIGHMEM)
....@@ -357,7 +379,7 @@
357379 * skb_frag_foreach_page - loop over pages in a fragment
358380 *
359381 * @f: skb frag to operate on
360
- * @f_off: offset from start of f->page.p
382
+ * @f_off: offset from start of f->bv_page
361383 * @f_len: length from f_off to loop over
362384 * @p: (temp var) current page
363385 * @p_off: (temp var) offset from start of current page,
....@@ -478,10 +500,11 @@
478500 }
479501
480502 void sock_zerocopy_put(struct ubuf_info *uarg);
481
-void sock_zerocopy_put_abort(struct ubuf_info *uarg);
503
+void sock_zerocopy_put_abort(struct ubuf_info *uarg, bool have_uref);
482504
483505 void sock_zerocopy_callback(struct ubuf_info *uarg, bool success);
484506
507
+int skb_zerocopy_iter_dgram(struct sk_buff *skb, struct msghdr *msg, int len);
485508 int skb_zerocopy_iter_stream(struct sock *sk, struct sk_buff *skb,
486509 struct msghdr *msg, int len,
487510 struct ubuf_info *uarg);
....@@ -510,6 +533,8 @@
510533 /* Intermediate layers must ensure that destructor_arg
511534 * remains valid until skb destructor */
512535 void * destructor_arg;
536
+
537
+ ANDROID_OEM_DATA_ARRAY(1, 3);
513538
514539 /* must be last field, see pskb_expand_head() */
515540 skb_frag_t frags[MAX_SKB_FRAGS];
....@@ -574,6 +599,8 @@
574599 SKB_GSO_UDP = 1 << 16,
575600
576601 SKB_GSO_UDP_L4 = 1 << 17,
602
+
603
+ SKB_GSO_FRAGLIST = 1 << 18,
577604 };
578605
579606 #if BITS_PER_LONG > 32
....@@ -586,14 +613,20 @@
586613 typedef unsigned char *sk_buff_data_t;
587614 #endif
588615
589
-/**
616
+/**
590617 * struct sk_buff - socket buffer
591618 * @next: Next buffer in list
592619 * @prev: Previous buffer in list
593620 * @tstamp: Time we arrived/left
621
+ * @skb_mstamp_ns: (aka @tstamp) earliest departure time; start point
622
+ * for retransmit timer
594623 * @rbnode: RB tree node, alternative to next/prev for netem/tcp
624
+ * @list: queue head
595625 * @sk: Socket we are owned by
626
+ * @ip_defrag_offset: (aka @sk) alternate use of @sk, used in
627
+ * fragmentation management
596628 * @dev: Device we arrived on/are leaving by
629
+ * @dev_scratch: (aka @dev) alternate use of @dev when @dev would be %NULL
597630 * @cb: Control buffer. Free for use by every layer. Put private vars here
598631 * @_skb_refdst: destination entry (with norefcount bit)
599632 * @sp: the security path, used for xfrm
....@@ -612,10 +645,15 @@
612645 * @pkt_type: Packet class
613646 * @fclone: skbuff clone status
614647 * @ipvs_property: skbuff is owned by ipvs
648
+ * @inner_protocol_type: whether the inner protocol is
649
+ * ENCAP_TYPE_ETHER or ENCAP_TYPE_IPPROTO
650
+ * @remcsum_offload: remote checksum offload is enabled
651
+ * @offload_fwd_mark: Packet was L2-forwarded in hardware
652
+ * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware
615653 * @tc_skip_classify: do not classify packet. set by IFB device
616654 * @tc_at_ingress: used within tc_classify to distinguish in/egress
617
- * @tc_redirected: packet was redirected by a tc action
618
- * @tc_from_ingress: if tc_redirected, tc_at_ingress at time of redirect
655
+ * @redirected: packet was redirected by packet classifier
656
+ * @from_ingress: packet was redirected from the ingress path
619657 * @peeked: this packet has been seen already, so stats have been
620658 * done for it, don't do them again
621659 * @nf_trace: netfilter packet trace flag
....@@ -628,8 +666,10 @@
628666 * @tc_index: Traffic control index
629667 * @hash: the packet hash
630668 * @queue_mapping: Queue mapping for multiqueue devices
631
- * @xmit_more: More SKBs are pending for this queue
669
+ * @head_frag: skb was allocated from page fragments,
670
+ * not allocated by kmalloc() or vmalloc().
632671 * @pfmemalloc: skbuff was allocated from PFMEMALLOC reserves
672
+ * @active_extensions: active extensions (skb_ext_id types)
633673 * @ndisc_nodetype: router type (from link layer)
634674 * @ooo_okay: allow the mapping of a socket to a queue to be changed
635675 * @l4_hash: indicate hash is a canonical 4-tuple hash over transport
....@@ -638,15 +678,29 @@
638678 * @wifi_acked_valid: wifi_acked was set
639679 * @wifi_acked: whether frame was acked on wifi or not
640680 * @no_fcs: Request NIC to treat last 4 bytes as Ethernet FCS
681
+ * @encapsulation: indicates the inner headers in the skbuff are valid
682
+ * @encap_hdr_csum: software checksum is needed
683
+ * @csum_valid: checksum is already valid
641684 * @csum_not_inet: use CRC32c to resolve CHECKSUM_PARTIAL
685
+ * @csum_complete_sw: checksum was completed by software
686
+ * @csum_level: indicates the number of consecutive checksums found in
687
+ * the packet minus one that have been verified as
688
+ * CHECKSUM_UNNECESSARY (max 3)
689
+ * @scm_io_uring: SKB holds io_uring registered files
642690 * @dst_pending_confirm: need to confirm neighbour
643691 * @decrypted: Decrypted SKB
644
- * @napi_id: id of the NAPI struct this skb came from
692
+ * @napi_id: id of the NAPI struct this skb came from
693
+ * @sender_cpu: (aka @napi_id) source CPU in XPS
645694 * @secmark: security marking
646695 * @mark: Generic packet mark
696
+ * @reserved_tailroom: (aka @mark) number of bytes of free space available
697
+ * at the tail of an sk_buff
698
+ * @vlan_present: VLAN tag is present
647699 * @vlan_proto: vlan encapsulation protocol
648700 * @vlan_tci: vlan tag control information
649701 * @inner_protocol: Protocol (encapsulation)
702
+ * @inner_ipproto: (aka @inner_protocol) stores ipproto when
703
+ * skb->inner_protocol_type == ENCAP_TYPE_IPPROTO;
650704 * @inner_transport_header: Inner transport layer header (encapsulation)
651705 * @inner_network_header: Network layer header (encapsulation)
652706 * @inner_mac_header: Link layer header (encapsulation)
....@@ -659,6 +713,7 @@
659713 * @data: Data head pointer
660714 * @truesize: Buffer size
661715 * @users: User count - see {datagram,tcp}.c
716
+ * @extensions: allocated extensions, valid if active_extensions is nonzero
662717 */
663718
664719 struct sk_buff {
....@@ -688,7 +743,7 @@
688743
689744 union {
690745 ktime_t tstamp;
691
- u64 skb_mstamp;
746
+ u64 skb_mstamp_ns; /* earliest departure time */
692747 };
693748 /*
694749 * This is the control buffer. It is free to use for every
....@@ -706,13 +761,9 @@
706761 struct list_head tcp_tsorted_anchor;
707762 };
708763
709
-#ifdef CONFIG_XFRM
710
- struct sec_path *sp;
711
-#endif
712764 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
713765 unsigned long _nfct;
714766 #endif
715
- struct nf_bridge_info *nf_bridge;
716767 unsigned int len,
717768 data_len;
718769 __u16 mac_len,
....@@ -731,15 +782,18 @@
731782 #endif
732783 #define CLONED_OFFSET() offsetof(struct sk_buff, __cloned_offset)
733784
785
+ /* private: */
734786 __u8 __cloned_offset[0];
787
+ /* public: */
735788 __u8 cloned:1,
736789 nohdr:1,
737790 fclone:2,
738791 peeked:1,
739792 head_frag:1,
740
- xmit_more:1,
741793 pfmemalloc:1;
742
-
794
+#ifdef CONFIG_SKB_EXTENSIONS
795
+ __u8 active_extensions;
796
+#endif
743797 /* fields enclosed in headers_start/headers_end are copied
744798 * using a single memcpy() in __copy_skb_header()
745799 */
....@@ -755,7 +809,9 @@
755809 #endif
756810 #define PKT_TYPE_OFFSET() offsetof(struct sk_buff, __pkt_type_offset)
757811
812
+ /* private: */
758813 __u8 __pkt_type_offset[0];
814
+ /* public: */
759815 __u8 pkt_type:3;
760816 __u8 ignore_df:1;
761817 __u8 nf_trace:1;
....@@ -772,6 +828,16 @@
772828 __u8 encap_hdr_csum:1;
773829 __u8 csum_valid:1;
774830
831
+#ifdef __BIG_ENDIAN_BITFIELD
832
+#define PKT_VLAN_PRESENT_BIT 7
833
+#else
834
+#define PKT_VLAN_PRESENT_BIT 0
835
+#endif
836
+#define PKT_VLAN_PRESENT_OFFSET() offsetof(struct sk_buff, __pkt_vlan_present_offset)
837
+ /* private: */
838
+ __u8 __pkt_vlan_present_offset[0];
839
+ /* public: */
840
+ __u8 vlan_present:1;
775841 __u8 csum_complete_sw:1;
776842 __u8 csum_level:2;
777843 __u8 csum_not_inet:1;
....@@ -779,19 +845,21 @@
779845 #ifdef CONFIG_IPV6_NDISC_NODETYPE
780846 __u8 ndisc_nodetype:2;
781847 #endif
782
- __u8 ipvs_property:1;
783848
849
+ __u8 ipvs_property:1;
784850 __u8 inner_protocol_type:1;
785851 __u8 remcsum_offload:1;
786852 #ifdef CONFIG_NET_SWITCHDEV
787853 __u8 offload_fwd_mark:1;
788
- __u8 offload_mr_fwd_mark:1;
854
+ __u8 offload_l3_fwd_mark:1;
789855 #endif
790856 #ifdef CONFIG_NET_CLS_ACT
791857 __u8 tc_skip_classify:1;
792858 __u8 tc_at_ingress:1;
793
- __u8 tc_redirected:1;
794
- __u8 tc_from_ingress:1;
859
+#endif
860
+#ifdef CONFIG_NET_REDIRECT
861
+ __u8 redirected:1;
862
+ __u8 from_ingress:1;
795863 #endif
796864 #ifdef CONFIG_TLS_DEVICE
797865 __u8 decrypted:1;
....@@ -846,7 +914,21 @@
846914 __u32 headers_end[0];
847915 /* public: */
848916
849
- ANDROID_KABI_RESERVE(1);
917
+ /* Android KABI preservation.
918
+ *
919
+ * "open coded" version of ANDROID_KABI_USE() to pack more
920
+ * fields/variables into the space that we have.
921
+ *
922
+ * scm_io_uring is from 04df9719df18 ("io_uring/af_unix: defer
923
+ * registered files gc to io_uring release")
924
+ */
925
+ _ANDROID_KABI_REPLACE(_ANDROID_KABI_RESERVE(1),
926
+ struct {
927
+ __u8 scm_io_uring:1;
928
+ __u8 android_kabi_reserved1_padding1;
929
+ __u16 android_kabi_reserved1_padding2;
930
+ __u32 android_kabi_reserved1_padding3;
931
+ });
850932 ANDROID_KABI_RESERVE(2);
851933
852934 /* These elements must be at the end, see alloc_skb() for details. */
....@@ -856,6 +938,11 @@
856938 *data;
857939 unsigned int truesize;
858940 refcount_t users;
941
+
942
+#ifdef CONFIG_SKB_EXTENSIONS
943
+ /* only useable after checking ->active_extensions != 0 */
944
+ struct skb_ext *extensions;
945
+#endif
859946 };
860947
861948 #ifdef __KERNEL__
....@@ -867,7 +954,10 @@
867954 #define SKB_ALLOC_RX 0x02
868955 #define SKB_ALLOC_NAPI 0x04
869956
870
-/* Returns true if the skb was allocated from PFMEMALLOC reserves */
957
+/**
958
+ * skb_pfmemalloc - Test if the skb was allocated from PFMEMALLOC reserves
959
+ * @skb: buffer
960
+ */
871961 static inline bool skb_pfmemalloc(const struct sk_buff *skb)
872962 {
873963 return unlikely(skb->pfmemalloc);
....@@ -880,7 +970,6 @@
880970 #define SKB_DST_NOREF 1UL
881971 #define SKB_DST_PTRMASK ~(SKB_DST_NOREF)
882972
883
-#define SKB_NFCT_PTRMASK ~(7UL)
884973 /**
885974 * skb_dst - returns skb dst_entry
886975 * @skb: buffer
....@@ -889,7 +978,7 @@
889978 */
890979 static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
891980 {
892
- /* If refdst was not refcounted, check we still are in a
981
+ /* If refdst was not refcounted, check we still are in a
893982 * rcu_read_lock section
894983 */
895984 WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) &&
....@@ -936,6 +1025,10 @@
9361025 return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb);
9371026 }
9381027
1028
+/**
1029
+ * skb_rtable - Returns the skb &rtable
1030
+ * @skb: buffer
1031
+ */
9391032 static inline struct rtable *skb_rtable(const struct sk_buff *skb)
9401033 {
9411034 return (struct rtable *)skb_dst(skb);
....@@ -950,6 +1043,10 @@
9501043 return ptype <= PACKET_OTHERHOST;
9511044 }
9521045
1046
+/**
1047
+ * skb_napi_id - Returns the skb's NAPI id
1048
+ * @skb: buffer
1049
+ */
9531050 static inline unsigned int skb_napi_id(const struct sk_buff *skb)
9541051 {
9551052 #ifdef CONFIG_NET_RX_BUSY_POLL
....@@ -959,7 +1056,12 @@
9591056 #endif
9601057 }
9611058
962
-/* decrement the reference count and return true if we can free the skb */
1059
+/**
1060
+ * skb_unref - decrement the skb's reference count
1061
+ * @skb: buffer
1062
+ *
1063
+ * Returns true if we can free the skb.
1064
+ */
9631065 static inline bool skb_unref(struct sk_buff *skb)
9641066 {
9651067 if (unlikely(!skb))
....@@ -975,8 +1077,18 @@
9751077 void skb_release_head_state(struct sk_buff *skb);
9761078 void kfree_skb(struct sk_buff *skb);
9771079 void kfree_skb_list(struct sk_buff *segs);
1080
+void skb_dump(const char *level, const struct sk_buff *skb, bool full_pkt);
9781081 void skb_tx_error(struct sk_buff *skb);
1082
+
1083
+#ifdef CONFIG_TRACEPOINTS
9791084 void consume_skb(struct sk_buff *skb);
1085
+#else
1086
+static inline void consume_skb(struct sk_buff *skb)
1087
+{
1088
+ return kfree_skb(skb);
1089
+}
1090
+#endif
1091
+
9801092 void __consume_stateless_skb(struct sk_buff *skb);
9811093 void __kfree_skb(struct sk_buff *skb);
9821094 extern struct kmem_cache *skbuff_head_cache;
....@@ -989,6 +1101,16 @@
9891101 int node);
9901102 struct sk_buff *__build_skb(void *data, unsigned int frag_size);
9911103 struct sk_buff *build_skb(void *data, unsigned int frag_size);
1104
+struct sk_buff *build_skb_around(struct sk_buff *skb,
1105
+ void *data, unsigned int frag_size);
1106
+
1107
+/**
1108
+ * alloc_skb - allocate a network buffer
1109
+ * @size: size to allocate
1110
+ * @priority: allocation mask
1111
+ *
1112
+ * This function is a convenient wrapper around __alloc_skb().
1113
+ */
9921114 static inline struct sk_buff *alloc_skb(unsigned int size,
9931115 gfp_t priority)
9941116 {
....@@ -1000,6 +1122,7 @@
10001122 int max_page_order,
10011123 int *errcode,
10021124 gfp_t gfp_mask);
1125
+struct sk_buff *alloc_skb_for_msg(struct sk_buff *first);
10031126
10041127 /* Layout of fast clones : [skb1][skb2][fclone_ref] */
10051128 struct sk_buff_fclones {
....@@ -1031,6 +1154,13 @@
10311154 fclones->skb2.sk == sk;
10321155 }
10331156
1157
+/**
1158
+ * alloc_skb_fclone - allocate a network buffer from fclone cache
1159
+ * @size: size to allocate
1160
+ * @priority: allocation mask
1161
+ *
1162
+ * This function is a convenient wrapper around __alloc_skb().
1163
+ */
10341164 static inline struct sk_buff *alloc_skb_fclone(unsigned int size,
10351165 gfp_t priority)
10361166 {
....@@ -1079,11 +1209,6 @@
10791209 return __skb_pad(skb, pad, true);
10801210 }
10811211 #define dev_kfree_skb(a) consume_skb(a)
1082
-
1083
-int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
1084
- int getfrag(void *from, char *to, int offset,
1085
- int len, int odd, struct sk_buff *skb),
1086
- void *from, int length);
10871212
10881213 int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
10891214 int offset, size_t size);
....@@ -1192,7 +1317,12 @@
11921317 const struct flow_dissector_key *key,
11931318 unsigned int key_count);
11941319
1195
-bool __skb_flow_dissect(const struct sk_buff *skb,
1320
+struct bpf_flow_dissector;
1321
+bool bpf_flow_dissect(struct bpf_prog *prog, struct bpf_flow_dissector *ctx,
1322
+ __be16 proto, int nhoff, int hlen, unsigned int flags);
1323
+
1324
+bool __skb_flow_dissect(const struct net *net,
1325
+ const struct sk_buff *skb,
11961326 struct flow_dissector *flow_dissector,
11971327 void *target_container,
11981328 void *data, __be16 proto, int nhoff, int hlen,
....@@ -1202,8 +1332,8 @@
12021332 struct flow_dissector *flow_dissector,
12031333 void *target_container, unsigned int flags)
12041334 {
1205
- return __skb_flow_dissect(skb, flow_dissector, target_container,
1206
- NULL, 0, 0, 0, flags);
1335
+ return __skb_flow_dissect(NULL, skb, flow_dissector,
1336
+ target_container, NULL, 0, 0, 0, flags);
12071337 }
12081338
12091339 static inline bool skb_flow_dissect_flow_keys(const struct sk_buff *skb,
....@@ -1211,25 +1341,44 @@
12111341 unsigned int flags)
12121342 {
12131343 memset(flow, 0, sizeof(*flow));
1214
- return __skb_flow_dissect(skb, &flow_keys_dissector, flow,
1215
- NULL, 0, 0, 0, flags);
1344
+ return __skb_flow_dissect(NULL, skb, &flow_keys_dissector,
1345
+ flow, NULL, 0, 0, 0, flags);
12161346 }
12171347
12181348 static inline bool
1219
-skb_flow_dissect_flow_keys_basic(const struct sk_buff *skb,
1349
+skb_flow_dissect_flow_keys_basic(const struct net *net,
1350
+ const struct sk_buff *skb,
12201351 struct flow_keys_basic *flow, void *data,
12211352 __be16 proto, int nhoff, int hlen,
12221353 unsigned int flags)
12231354 {
12241355 memset(flow, 0, sizeof(*flow));
1225
- return __skb_flow_dissect(skb, &flow_keys_basic_dissector, flow,
1356
+ return __skb_flow_dissect(net, skb, &flow_keys_basic_dissector, flow,
12261357 data, proto, nhoff, hlen, flags);
12271358 }
12281359
1360
+void skb_flow_dissect_meta(const struct sk_buff *skb,
1361
+ struct flow_dissector *flow_dissector,
1362
+ void *target_container);
1363
+
1364
+/* Gets a skb connection tracking info, ctinfo map should be a
1365
+ * map of mapsize to translate enum ip_conntrack_info states
1366
+ * to user states.
1367
+ */
1368
+void
1369
+skb_flow_dissect_ct(const struct sk_buff *skb,
1370
+ struct flow_dissector *flow_dissector,
1371
+ void *target_container,
1372
+ u16 *ctinfo_map,
1373
+ size_t mapsize);
12291374 void
12301375 skb_flow_dissect_tunnel_info(const struct sk_buff *skb,
12311376 struct flow_dissector *flow_dissector,
12321377 void *target_container);
1378
+
1379
+void skb_flow_dissect_hash(const struct sk_buff *skb,
1380
+ struct flow_dissector *flow_dissector,
1381
+ void *target_container);
12331382
12341383 static inline __u32 skb_get_hash(struct sk_buff *skb)
12351384 {
....@@ -1266,6 +1415,14 @@
12661415 to->l4_hash = from->l4_hash;
12671416 };
12681417
1418
+static inline void skb_copy_decrypted(struct sk_buff *to,
1419
+ const struct sk_buff *from)
1420
+{
1421
+#ifdef CONFIG_TLS_DEVICE
1422
+ to->decrypted = from->decrypted;
1423
+#endif
1424
+}
1425
+
12691426 #ifdef NET_SKBUFF_DATA_USES_OFFSET
12701427 static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
12711428 {
....@@ -1276,6 +1433,11 @@
12761433 {
12771434 return skb->end;
12781435 }
1436
+
1437
+static inline void skb_set_end_offset(struct sk_buff *skb, unsigned int offset)
1438
+{
1439
+ skb->end = offset;
1440
+}
12791441 #else
12801442 static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
12811443 {
....@@ -1285,6 +1447,11 @@
12851447 static inline unsigned int skb_end_offset(const struct sk_buff *skb)
12861448 {
12871449 return skb->end - skb->head;
1450
+}
1451
+
1452
+static inline void skb_set_end_offset(struct sk_buff *skb, unsigned int offset)
1453
+{
1454
+ skb->end = skb->head + offset;
12881455 }
12891456 #endif
12901457
....@@ -1303,10 +1470,14 @@
13031470 return is_zcopy ? skb_uarg(skb) : NULL;
13041471 }
13051472
1306
-static inline void skb_zcopy_set(struct sk_buff *skb, struct ubuf_info *uarg)
1473
+static inline void skb_zcopy_set(struct sk_buff *skb, struct ubuf_info *uarg,
1474
+ bool *have_ref)
13071475 {
13081476 if (skb && uarg && !skb_zcopy(skb)) {
1309
- sock_zerocopy_get(uarg);
1477
+ if (unlikely(have_ref && *have_ref))
1478
+ *have_ref = false;
1479
+ else
1480
+ sock_zerocopy_get(uarg);
13101481 skb_shinfo(skb)->destructor_arg = uarg;
13111482 skb_shinfo(skb)->tx_flags |= SKBTX_ZEROCOPY_FRAG;
13121483 }
....@@ -1353,7 +1524,7 @@
13531524 struct ubuf_info *uarg = skb_zcopy(skb);
13541525
13551526 if (uarg) {
1356
- sock_zerocopy_put_abort(uarg);
1527
+ sock_zerocopy_put_abort(uarg, false);
13571528 skb_shinfo(skb)->tx_flags &= ~SKBTX_ZEROCOPY_FRAG;
13581529 }
13591530 }
....@@ -1501,6 +1672,22 @@
15011672 return 0;
15021673 }
15031674
1675
+/* This variant of skb_unclone() makes sure skb->truesize
1676
+ * and skb_end_offset() are not changed, whenever a new skb->head is needed.
1677
+ *
1678
+ * Indeed there is no guarantee that ksize(kmalloc(X)) == ksize(kmalloc(X))
1679
+ * when various debugging features are in place.
1680
+ */
1681
+int __skb_unclone_keeptruesize(struct sk_buff *skb, gfp_t pri);
1682
+static inline int skb_unclone_keeptruesize(struct sk_buff *skb, gfp_t pri)
1683
+{
1684
+ might_sleep_if(gfpflags_allow_blocking(pri));
1685
+
1686
+ if (skb_cloned(skb))
1687
+ return __skb_unclone_keeptruesize(skb, pri);
1688
+ return 0;
1689
+}
1690
+
15041691 /**
15051692 * skb_header_cloned - is the header a clone
15061693 * @skb: buffer to check
....@@ -1641,6 +1828,17 @@
16411828 }
16421829
16431830 /**
1831
+ * __skb_peek - peek at the head of a non-empty &sk_buff_head
1832
+ * @list_: list to peek at
1833
+ *
1834
+ * Like skb_peek(), but the caller knows that the list is not empty.
1835
+ */
1836
+static inline struct sk_buff *__skb_peek(const struct sk_buff_head *list_)
1837
+{
1838
+ return list_->next;
1839
+}
1840
+
1841
+/**
16441842 * skb_peek_next - peek skb following the given one from a queue
16451843 * @skb: skb to start from
16461844 * @list_: list to peek at
....@@ -1735,6 +1933,12 @@
17351933 __skb_queue_head_init(list);
17361934 }
17371935
1936
+static inline void skb_queue_head_init_raw(struct sk_buff_head *list)
1937
+{
1938
+ raw_spin_lock_init(&list->raw_lock);
1939
+ __skb_queue_head_init(list);
1940
+}
1941
+
17381942 static inline void skb_queue_head_init_class(struct sk_buff_head *list,
17391943 struct lock_class_key *class)
17401944 {
....@@ -1748,8 +1952,6 @@
17481952 * The "__skb_xxxx()" functions are the non-atomic ones that
17491953 * can only be called with interrupts disabled.
17501954 */
1751
-void skb_insert(struct sk_buff *old, struct sk_buff *newsk,
1752
- struct sk_buff_head *list);
17531955 static inline void __skb_insert(struct sk_buff *newsk,
17541956 struct sk_buff *prev, struct sk_buff *next,
17551957 struct sk_buff_head *list)
....@@ -1879,12 +2081,12 @@
18792081 *
18802082 * A buffer cannot be placed on two lists at the same time.
18812083 */
1882
-void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk);
18832084 static inline void __skb_queue_head(struct sk_buff_head *list,
18842085 struct sk_buff *newsk)
18852086 {
18862087 __skb_queue_after(list, (struct sk_buff *)list, newsk);
18872088 }
2089
+void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk);
18882090
18892091 /**
18902092 * __skb_queue_tail - queue a buffer at the list tail
....@@ -1896,12 +2098,12 @@
18962098 *
18972099 * A buffer cannot be placed on two lists at the same time.
18982100 */
1899
-void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
19002101 static inline void __skb_queue_tail(struct sk_buff_head *list,
19012102 struct sk_buff *newsk)
19022103 {
19032104 __skb_queue_before(list, (struct sk_buff *)list, newsk);
19042105 }
2106
+void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
19052107
19062108 /*
19072109 * remove sk_buff from list. _Must_ be called atomically, and with
....@@ -1928,7 +2130,6 @@
19282130 * so must be used with appropriate locks held only. The head item is
19292131 * returned or %NULL if the list is empty.
19302132 */
1931
-struct sk_buff *skb_dequeue(struct sk_buff_head *list);
19322133 static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
19332134 {
19342135 struct sk_buff *skb = skb_peek(list);
....@@ -1936,6 +2137,7 @@
19362137 __skb_unlink(skb, list);
19372138 return skb;
19382139 }
2140
+struct sk_buff *skb_dequeue(struct sk_buff_head *list);
19392141
19402142 /**
19412143 * __skb_dequeue_tail - remove from the tail of the queue
....@@ -1945,7 +2147,6 @@
19452147 * so must be used with appropriate locks held only. The tail item is
19462148 * returned or %NULL if the list is empty.
19472149 */
1948
-struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list);
19492150 static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list)
19502151 {
19512152 struct sk_buff *skb = skb_peek_tail(list);
....@@ -1953,6 +2154,7 @@
19532154 __skb_unlink(skb, list);
19542155 return skb;
19552156 }
2157
+struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list);
19562158
19572159
19582160 static inline bool skb_is_nonlinear(const struct sk_buff *skb)
....@@ -2002,8 +2204,8 @@
20022204 * that not all callers have unique ownership of the page but rely
20032205 * on page_is_pfmemalloc doing the right thing(tm).
20042206 */
2005
- frag->page.p = page;
2006
- frag->page_offset = off;
2207
+ frag->bv_page = page;
2208
+ frag->bv_offset = off;
20072209 skb_frag_size_set(frag, size);
20082210
20092211 page = compound_head(page);
....@@ -2038,8 +2240,6 @@
20382240 void skb_coalesce_rx_frag(struct sk_buff *skb, int i, int size,
20392241 unsigned int truesize);
20402242
2041
-#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags)
2042
-#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frag_list(skb))
20432243 #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb))
20442244
20452245 #ifdef NET_SKBUFF_DATA_USES_OFFSET
....@@ -2076,6 +2276,14 @@
20762276 }
20772277
20782278 #endif /* NET_SKBUFF_DATA_USES_OFFSET */
2279
+
2280
+static inline void skb_assert_len(struct sk_buff *skb)
2281
+{
2282
+#ifdef CONFIG_DEBUG_NET
2283
+ if (WARN_ONCE(!skb->len, "%s\n", __func__))
2284
+ DO_ONCE_LITE(skb_dump, KERN_ERR, skb, false);
2285
+#endif /* CONFIG_DEBUG_NET */
2286
+}
20792287
20802288 /*
20812289 * Add data to an sk_buff
....@@ -2174,12 +2382,12 @@
21742382 return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len);
21752383 }
21762384
2177
-static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len)
2385
+static inline bool pskb_may_pull(struct sk_buff *skb, unsigned int len)
21782386 {
21792387 if (likely(len <= skb_headlen(skb)))
2180
- return 1;
2388
+ return true;
21812389 if (unlikely(len > skb->len))
2182
- return 0;
2390
+ return false;
21832391 return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
21842392 }
21852393
....@@ -2403,6 +2611,11 @@
24032611 return skb->mac_header != (typeof(skb->mac_header))~0U;
24042612 }
24052613
2614
+static inline void skb_unset_mac_header(struct sk_buff *skb)
2615
+{
2616
+ skb->mac_header = (typeof(skb->mac_header))~0U;
2617
+}
2618
+
24062619 static inline void skb_reset_mac_header(struct sk_buff *skb)
24072620 {
24082621 skb->mac_header = skb->data - skb->head;
....@@ -2419,18 +2632,16 @@
24192632 skb->mac_header = skb->network_header;
24202633 }
24212634
2422
-static inline void skb_probe_transport_header(struct sk_buff *skb,
2423
- const int offset_hint)
2635
+static inline void skb_probe_transport_header(struct sk_buff *skb)
24242636 {
24252637 struct flow_keys_basic keys;
24262638
24272639 if (skb_transport_header_was_set(skb))
24282640 return;
24292641
2430
- if (skb_flow_dissect_flow_keys_basic(skb, &keys, NULL, 0, 0, 0, 0))
2642
+ if (skb_flow_dissect_flow_keys_basic(NULL, skb, &keys,
2643
+ NULL, 0, 0, 0, 0))
24312644 skb_set_transport_header(skb, keys.control.thoff);
2432
- else if (offset_hint >= 0)
2433
- skb_set_transport_header(skb, offset_hint);
24342645 }
24352646
24362647 static inline void skb_mac_header_rebuild(struct sk_buff *skb)
....@@ -2524,7 +2735,7 @@
25242735 *
25252736 * Using max(32, L1_CACHE_BYTES) makes sense (especially with RPS)
25262737 * to reduce average number of cache lines per packet.
2527
- * get_rps_cpus() for example only access one 64 bytes aligned block :
2738
+ * get_rps_cpu() for example only access one 64 bytes aligned block :
25282739 * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
25292740 */
25302741 #ifndef NET_SKB_PAD
....@@ -2535,10 +2746,8 @@
25352746
25362747 static inline void __skb_set_length(struct sk_buff *skb, unsigned int len)
25372748 {
2538
- if (unlikely(skb_is_nonlinear(skb))) {
2539
- WARN_ON(1);
2749
+ if (WARN_ON(skb_is_nonlinear(skb)))
25402750 return;
2541
- }
25422751 skb->len = len;
25432752 skb_set_tail_pointer(skb, len);
25442753 }
....@@ -2646,13 +2855,13 @@
26462855 * the list and one reference dropped. This function does not take the
26472856 * list lock and the caller must hold the relevant locks to use it.
26482857 */
2649
-void skb_queue_purge(struct sk_buff_head *list);
26502858 static inline void __skb_queue_purge(struct sk_buff_head *list)
26512859 {
26522860 struct sk_buff *skb;
26532861 while ((skb = __skb_dequeue(list)) != NULL)
26542862 kfree_skb(skb);
26552863 }
2864
+void skb_queue_purge(struct sk_buff_head *list);
26562865
26572866 unsigned int skb_rbtree_purge(struct rb_root *root);
26582867
....@@ -2794,7 +3003,38 @@
27943003 */
27953004 static inline unsigned int skb_frag_off(const skb_frag_t *frag)
27963005 {
2797
- return frag->page_offset;
3006
+ return frag->bv_offset;
3007
+}
3008
+
3009
+/**
3010
+ * skb_frag_off_add() - Increments the offset of a skb fragment by @delta
3011
+ * @frag: skb fragment
3012
+ * @delta: value to add
3013
+ */
3014
+static inline void skb_frag_off_add(skb_frag_t *frag, int delta)
3015
+{
3016
+ frag->bv_offset += delta;
3017
+}
3018
+
3019
+/**
3020
+ * skb_frag_off_set() - Sets the offset of a skb fragment
3021
+ * @frag: skb fragment
3022
+ * @offset: offset of fragment
3023
+ */
3024
+static inline void skb_frag_off_set(skb_frag_t *frag, unsigned int offset)
3025
+{
3026
+ frag->bv_offset = offset;
3027
+}
3028
+
3029
+/**
3030
+ * skb_frag_off_copy() - Sets the offset of a skb fragment from another fragment
3031
+ * @fragto: skb fragment where offset is set
3032
+ * @fragfrom: skb fragment offset is copied from
3033
+ */
3034
+static inline void skb_frag_off_copy(skb_frag_t *fragto,
3035
+ const skb_frag_t *fragfrom)
3036
+{
3037
+ fragto->bv_offset = fragfrom->bv_offset;
27983038 }
27993039
28003040 /**
....@@ -2805,7 +3045,7 @@
28053045 */
28063046 static inline struct page *skb_frag_page(const skb_frag_t *frag)
28073047 {
2808
- return frag->page.p;
3048
+ return frag->bv_page;
28093049 }
28103050
28113051 /**
....@@ -2863,7 +3103,7 @@
28633103 */
28643104 static inline void *skb_frag_address(const skb_frag_t *frag)
28653105 {
2866
- return page_address(skb_frag_page(frag)) + frag->page_offset;
3106
+ return page_address(skb_frag_page(frag)) + skb_frag_off(frag);
28673107 }
28683108
28693109 /**
....@@ -2879,7 +3119,18 @@
28793119 if (unlikely(!ptr))
28803120 return NULL;
28813121
2882
- return ptr + frag->page_offset;
3122
+ return ptr + skb_frag_off(frag);
3123
+}
3124
+
3125
+/**
3126
+ * skb_frag_page_copy() - sets the page in a fragment from another fragment
3127
+ * @fragto: skb fragment where page is set
3128
+ * @fragfrom: skb fragment page is copied from
3129
+ */
3130
+static inline void skb_frag_page_copy(skb_frag_t *fragto,
3131
+ const skb_frag_t *fragfrom)
3132
+{
3133
+ fragto->bv_page = fragfrom->bv_page;
28833134 }
28843135
28853136 /**
....@@ -2891,7 +3142,7 @@
28913142 */
28923143 static inline void __skb_frag_set_page(skb_frag_t *frag, struct page *page)
28933144 {
2894
- frag->page.p = page;
3145
+ frag->bv_page = page;
28953146 }
28963147
28973148 /**
....@@ -2927,7 +3178,7 @@
29273178 enum dma_data_direction dir)
29283179 {
29293180 return dma_map_page(dev, skb_frag_page(frag),
2930
- frag->page_offset + offset, size, dir);
3181
+ skb_frag_off(frag) + offset, size, dir);
29313182 }
29323183
29333184 static inline struct sk_buff *pskb_copy(struct sk_buff *skb,
....@@ -3030,7 +3281,7 @@
30303281 }
30313282
30323283 /**
3033
- * skb_put_padto - increase size and pad an skbuff up to a minimal size
3284
+ * __skb_put_padto - increase size and pad an skbuff up to a minimal size
30343285 * @skb: buffer to pad
30353286 * @len: minimal length
30363287 * @free_on_error: free buffer on error
....@@ -3095,10 +3346,10 @@
30953346 if (skb_zcopy(skb))
30963347 return false;
30973348 if (i) {
3098
- const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i - 1];
3349
+ const skb_frag_t *frag = &skb_shinfo(skb)->frags[i - 1];
30993350
31003351 return page == skb_frag_page(frag) &&
3101
- off == frag->page_offset + skb_frag_size(frag);
3352
+ off == skb_frag_off(frag) + skb_frag_size(frag);
31023353 }
31033354 return false;
31043355 }
....@@ -3317,24 +3568,21 @@
33173568 for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next)
33183569
33193570
3320
-int __skb_wait_for_more_packets(struct sock *sk, int *err, long *timeo_p,
3571
+int __skb_wait_for_more_packets(struct sock *sk, struct sk_buff_head *queue,
3572
+ int *err, long *timeo_p,
33213573 const struct sk_buff *skb);
33223574 struct sk_buff *__skb_try_recv_from_queue(struct sock *sk,
33233575 struct sk_buff_head *queue,
33243576 unsigned int flags,
3325
- void (*destructor)(struct sock *sk,
3326
- struct sk_buff *skb),
3327
- int *peeked, int *off, int *err,
3577
+ int *off, int *err,
33283578 struct sk_buff **last);
3329
-struct sk_buff *__skb_try_recv_datagram(struct sock *sk, unsigned flags,
3330
- void (*destructor)(struct sock *sk,
3331
- struct sk_buff *skb),
3332
- int *peeked, int *off, int *err,
3579
+struct sk_buff *__skb_try_recv_datagram(struct sock *sk,
3580
+ struct sk_buff_head *queue,
3581
+ unsigned int flags, int *off, int *err,
33333582 struct sk_buff **last);
3334
-struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
3335
- void (*destructor)(struct sock *sk,
3336
- struct sk_buff *skb),
3337
- int *peeked, int *off, int *err);
3583
+struct sk_buff *__skb_recv_datagram(struct sock *sk,
3584
+ struct sk_buff_head *sk_queue,
3585
+ unsigned int flags, int *off, int *err);
33383586 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
33393587 int *err);
33403588 __poll_t datagram_poll(struct file *file, struct socket *sock,
....@@ -3348,6 +3596,9 @@
33483596 }
33493597 int skb_copy_and_csum_datagram_msg(struct sk_buff *skb, int hlen,
33503598 struct msghdr *msg);
3599
+int skb_copy_and_hash_datagram_iter(const struct sk_buff *skb, int offset,
3600
+ struct iov_iter *to, int len,
3601
+ struct ahash_request *hash);
33513602 int skb_copy_datagram_from_iter(struct sk_buff *skb, int offset,
33523603 struct iov_iter *from, int len);
33533604 int zerocopy_sg_from_iter(struct sk_buff *skb, struct iov_iter *frm);
....@@ -3362,13 +3613,12 @@
33623613 int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
33633614 int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
33643615 __wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
3365
- int len, __wsum csum);
3616
+ int len);
33663617 int skb_splice_bits(struct sk_buff *skb, struct sock *sk, unsigned int offset,
33673618 struct pipe_inode_info *pipe, unsigned int len,
33683619 unsigned int flags);
33693620 int skb_send_sock_locked(struct sock *sk, struct sk_buff *skb, int offset,
33703621 int len);
3371
-int skb_send_sock(struct sock *sk, struct sk_buff *skb, int offset, int len);
33723622 void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
33733623 unsigned int skb_zerocopy_headlen(const struct sk_buff *from);
33743624 int skb_zerocopy(struct sk_buff *to, struct sk_buff *from,
....@@ -3379,11 +3629,22 @@
33793629 bool skb_gso_validate_network_len(const struct sk_buff *skb, unsigned int mtu);
33803630 bool skb_gso_validate_mac_len(const struct sk_buff *skb, unsigned int len);
33813631 struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);
3632
+struct sk_buff *skb_segment_list(struct sk_buff *skb, netdev_features_t features,
3633
+ unsigned int offset);
33823634 struct sk_buff *skb_vlan_untag(struct sk_buff *skb);
33833635 int skb_ensure_writable(struct sk_buff *skb, int write_len);
33843636 int __skb_vlan_pop(struct sk_buff *skb, u16 *vlan_tci);
33853637 int skb_vlan_pop(struct sk_buff *skb);
33863638 int skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci);
3639
+int skb_eth_pop(struct sk_buff *skb);
3640
+int skb_eth_push(struct sk_buff *skb, const unsigned char *dst,
3641
+ const unsigned char *src);
3642
+int skb_mpls_push(struct sk_buff *skb, __be32 mpls_lse, __be16 mpls_proto,
3643
+ int mac_len, bool ethernet);
3644
+int skb_mpls_pop(struct sk_buff *skb, __be16 next_proto, int mac_len,
3645
+ bool ethernet);
3646
+int skb_mpls_update_lse(struct sk_buff *skb, __be32 mpls_lse);
3647
+int skb_mpls_dec_ttl(struct sk_buff *skb);
33873648 struct sk_buff *pskb_extract(struct sk_buff *skb, int off, int to_copy,
33883649 gfp_t gfp);
33893650
....@@ -3487,22 +3748,43 @@
34873748 /**
34883749 * skb_get_timestamp - get timestamp from a skb
34893750 * @skb: skb to get stamp from
3490
- * @stamp: pointer to struct timeval to store stamp in
3751
+ * @stamp: pointer to struct __kernel_old_timeval to store stamp in
34913752 *
34923753 * Timestamps are stored in the skb as offsets to a base timestamp.
34933754 * This function converts the offset back to a struct timeval and stores
34943755 * it in stamp.
34953756 */
34963757 static inline void skb_get_timestamp(const struct sk_buff *skb,
3497
- struct timeval *stamp)
3758
+ struct __kernel_old_timeval *stamp)
34983759 {
3499
- *stamp = ktime_to_timeval(skb->tstamp);
3760
+ *stamp = ns_to_kernel_old_timeval(skb->tstamp);
3761
+}
3762
+
3763
+static inline void skb_get_new_timestamp(const struct sk_buff *skb,
3764
+ struct __kernel_sock_timeval *stamp)
3765
+{
3766
+ struct timespec64 ts = ktime_to_timespec64(skb->tstamp);
3767
+
3768
+ stamp->tv_sec = ts.tv_sec;
3769
+ stamp->tv_usec = ts.tv_nsec / 1000;
35003770 }
35013771
35023772 static inline void skb_get_timestampns(const struct sk_buff *skb,
3503
- struct timespec *stamp)
3773
+ struct __kernel_old_timespec *stamp)
35043774 {
3505
- *stamp = ktime_to_timespec(skb->tstamp);
3775
+ struct timespec64 ts = ktime_to_timespec64(skb->tstamp);
3776
+
3777
+ stamp->tv_sec = ts.tv_sec;
3778
+ stamp->tv_nsec = ts.tv_nsec;
3779
+}
3780
+
3781
+static inline void skb_get_new_timestampns(const struct sk_buff *skb,
3782
+ struct __kernel_timespec *stamp)
3783
+{
3784
+ struct timespec64 ts = ktime_to_timespec64(skb->tstamp);
3785
+
3786
+ stamp->tv_sec = ts.tv_sec;
3787
+ stamp->tv_nsec = ts.tv_nsec;
35063788 }
35073789
35083790 static inline void __net_timestamp(struct sk_buff *skb)
....@@ -3544,13 +3826,19 @@
35443826 #define __it(x, op) (x -= sizeof(u##op))
35453827 #define __it_diff(a, b, op) (*(u##op *)__it(a, op)) ^ (*(u##op *)__it(b, op))
35463828 case 32: diffs |= __it_diff(a, b, 64);
3829
+ fallthrough;
35473830 case 24: diffs |= __it_diff(a, b, 64);
3831
+ fallthrough;
35483832 case 16: diffs |= __it_diff(a, b, 64);
3833
+ fallthrough;
35493834 case 8: diffs |= __it_diff(a, b, 64);
35503835 break;
35513836 case 28: diffs |= __it_diff(a, b, 64);
3837
+ fallthrough;
35523838 case 20: diffs |= __it_diff(a, b, 64);
3839
+ fallthrough;
35533840 case 12: diffs |= __it_diff(a, b, 64);
3841
+ fallthrough;
35543842 case 4: diffs |= __it_diff(a, b, 32);
35553843 break;
35563844 }
....@@ -3611,7 +3899,7 @@
36113899 * must call this function to return the skb back to the stack with a
36123900 * timestamp.
36133901 *
3614
- * @skb: clone of the the original outgoing packet
3902
+ * @skb: clone of the original outgoing packet
36153903 * @hwtstamps: hardware time stamps
36163904 *
36173905 */
....@@ -3714,6 +4002,14 @@
37144002 skb->csum_level++;
37154003 } else if (skb->ip_summed == CHECKSUM_NONE) {
37164004 skb->ip_summed = CHECKSUM_UNNECESSARY;
4005
+ skb->csum_level = 0;
4006
+ }
4007
+}
4008
+
4009
+static inline void __skb_reset_checksum_unnecessary(struct sk_buff *skb)
4010
+{
4011
+ if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
4012
+ skb->ip_summed = CHECKSUM_NONE;
37174013 skb->csum_level = 0;
37184014 }
37194015 }
....@@ -3833,18 +4129,16 @@
38334129 return (skb->ip_summed == CHECKSUM_NONE && skb->csum_valid);
38344130 }
38354131
3836
-static inline void __skb_checksum_convert(struct sk_buff *skb,
3837
- __sum16 check, __wsum pseudo)
4132
+static inline void __skb_checksum_convert(struct sk_buff *skb, __wsum pseudo)
38384133 {
38394134 skb->csum = ~pseudo;
38404135 skb->ip_summed = CHECKSUM_COMPLETE;
38414136 }
38424137
3843
-#define skb_checksum_try_convert(skb, proto, check, compute_pseudo) \
4138
+#define skb_checksum_try_convert(skb, proto, compute_pseudo) \
38444139 do { \
38454140 if (__skb_checksum_convert_check(skb)) \
3846
- __skb_checksum_convert(skb, check, \
3847
- compute_pseudo(skb, proto)); \
4141
+ __skb_checksum_convert(skb, compute_pseudo(skb, proto)); \
38484142 } while (0)
38494143
38504144 static inline void skb_remcsum_adjust_partial(struct sk_buff *skb, void *ptr,
....@@ -3884,47 +4178,151 @@
38844178 static inline struct nf_conntrack *skb_nfct(const struct sk_buff *skb)
38854179 {
38864180 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
3887
- return (void *)(skb->_nfct & SKB_NFCT_PTRMASK);
4181
+ return (void *)(skb->_nfct & NFCT_PTRMASK);
38884182 #else
38894183 return NULL;
38904184 #endif
38914185 }
38924186
3893
-#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
3894
-void nf_conntrack_destroy(struct nf_conntrack *nfct);
3895
-static inline void nf_conntrack_put(struct nf_conntrack *nfct)
4187
+static inline unsigned long skb_get_nfct(const struct sk_buff *skb)
38964188 {
3897
- if (nfct && atomic_dec_and_test(&nfct->use))
3898
- nf_conntrack_destroy(nfct);
3899
-}
3900
-static inline void nf_conntrack_get(struct nf_conntrack *nfct)
3901
-{
3902
- if (nfct)
3903
- atomic_inc(&nfct->use);
3904
-}
4189
+#if IS_ENABLED(CONFIG_NF_CONNTRACK)
4190
+ return skb->_nfct;
4191
+#else
4192
+ return 0UL;
39054193 #endif
4194
+}
4195
+
4196
+static inline void skb_set_nfct(struct sk_buff *skb, unsigned long nfct)
4197
+{
4198
+#if IS_ENABLED(CONFIG_NF_CONNTRACK)
4199
+ skb->_nfct = nfct;
4200
+#endif
4201
+}
4202
+
4203
+#ifdef CONFIG_SKB_EXTENSIONS
4204
+enum skb_ext_id {
39064205 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3907
-static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge)
4206
+ SKB_EXT_BRIDGE_NF,
4207
+#endif
4208
+#ifdef CONFIG_XFRM
4209
+ SKB_EXT_SEC_PATH,
4210
+#endif
4211
+#if IS_ENABLED(CONFIG_NET_TC_SKB_EXT)
4212
+ TC_SKB_EXT,
4213
+#endif
4214
+#if IS_ENABLED(CONFIG_MPTCP)
4215
+ SKB_EXT_MPTCP,
4216
+#endif
4217
+#if IS_ENABLED(CONFIG_KCOV)
4218
+ SKB_EXT_KCOV_HANDLE,
4219
+#endif
4220
+ SKB_EXT_NUM, /* must be last */
4221
+};
4222
+
4223
+/**
4224
+ * struct skb_ext - sk_buff extensions
4225
+ * @refcnt: 1 on allocation, deallocated on 0
4226
+ * @offset: offset to add to @data to obtain extension address
4227
+ * @chunks: size currently allocated, stored in SKB_EXT_ALIGN_SHIFT units
4228
+ * @data: start of extension data, variable sized
4229
+ *
4230
+ * Note: offsets/lengths are stored in chunks of 8 bytes, this allows
4231
+ * to use 'u8' types while allowing up to 2kb worth of extension data.
4232
+ */
4233
+struct skb_ext {
4234
+ refcount_t refcnt;
4235
+ u8 offset[SKB_EXT_NUM]; /* in chunks of 8 bytes */
4236
+ u8 chunks; /* same */
4237
+ char data[] __aligned(8);
4238
+};
4239
+
4240
+struct skb_ext *__skb_ext_alloc(gfp_t flags);
4241
+void *__skb_ext_set(struct sk_buff *skb, enum skb_ext_id id,
4242
+ struct skb_ext *ext);
4243
+void *skb_ext_add(struct sk_buff *skb, enum skb_ext_id id);
4244
+void __skb_ext_del(struct sk_buff *skb, enum skb_ext_id id);
4245
+void __skb_ext_put(struct skb_ext *ext);
4246
+
4247
+static inline void skb_ext_put(struct sk_buff *skb)
39084248 {
3909
- if (nf_bridge && refcount_dec_and_test(&nf_bridge->use))
3910
- kfree(nf_bridge);
4249
+ if (skb->active_extensions)
4250
+ __skb_ext_put(skb->extensions);
39114251 }
3912
-static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge)
4252
+
4253
+static inline void __skb_ext_copy(struct sk_buff *dst,
4254
+ const struct sk_buff *src)
39134255 {
3914
- if (nf_bridge)
3915
- refcount_inc(&nf_bridge->use);
4256
+ dst->active_extensions = src->active_extensions;
4257
+
4258
+ if (src->active_extensions) {
4259
+ struct skb_ext *ext = src->extensions;
4260
+
4261
+ refcount_inc(&ext->refcnt);
4262
+ dst->extensions = ext;
4263
+ }
39164264 }
3917
-#endif /* CONFIG_BRIDGE_NETFILTER */
3918
-static inline void nf_reset(struct sk_buff *skb)
4265
+
4266
+static inline void skb_ext_copy(struct sk_buff *dst, const struct sk_buff *src)
4267
+{
4268
+ skb_ext_put(dst);
4269
+ __skb_ext_copy(dst, src);
4270
+}
4271
+
4272
+static inline bool __skb_ext_exist(const struct skb_ext *ext, enum skb_ext_id i)
4273
+{
4274
+ return !!ext->offset[i];
4275
+}
4276
+
4277
+static inline bool skb_ext_exist(const struct sk_buff *skb, enum skb_ext_id id)
4278
+{
4279
+ return skb->active_extensions & (1 << id);
4280
+}
4281
+
4282
+static inline void skb_ext_del(struct sk_buff *skb, enum skb_ext_id id)
4283
+{
4284
+ if (skb_ext_exist(skb, id))
4285
+ __skb_ext_del(skb, id);
4286
+}
4287
+
4288
+static inline void *skb_ext_find(const struct sk_buff *skb, enum skb_ext_id id)
4289
+{
4290
+ if (skb_ext_exist(skb, id)) {
4291
+ struct skb_ext *ext = skb->extensions;
4292
+
4293
+ return (void *)ext + (ext->offset[id] << 3);
4294
+ }
4295
+
4296
+ return NULL;
4297
+}
4298
+
4299
+static inline void skb_ext_reset(struct sk_buff *skb)
4300
+{
4301
+ if (unlikely(skb->active_extensions)) {
4302
+ __skb_ext_put(skb->extensions);
4303
+ skb->active_extensions = 0;
4304
+ }
4305
+}
4306
+
4307
+static inline bool skb_has_extensions(struct sk_buff *skb)
4308
+{
4309
+ return unlikely(skb->active_extensions);
4310
+}
4311
+#else
4312
+static inline void skb_ext_put(struct sk_buff *skb) {}
4313
+static inline void skb_ext_reset(struct sk_buff *skb) {}
4314
+static inline void skb_ext_del(struct sk_buff *skb, int unused) {}
4315
+static inline void __skb_ext_copy(struct sk_buff *d, const struct sk_buff *s) {}
4316
+static inline void skb_ext_copy(struct sk_buff *dst, const struct sk_buff *s) {}
4317
+static inline bool skb_has_extensions(struct sk_buff *skb) { return false; }
4318
+#endif /* CONFIG_SKB_EXTENSIONS */
4319
+
4320
+static inline void nf_reset_ct(struct sk_buff *skb)
39194321 {
39204322 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
39214323 nf_conntrack_put(skb_nfct(skb));
39224324 skb->_nfct = 0;
39234325 #endif
3924
-#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3925
- nf_bridge_put(skb->nf_bridge);
3926
-#endif
3927
- skb->nf_bridge = NULL;
39284326 }
39294327
39304328 static inline void nf_reset_trace(struct sk_buff *skb)
....@@ -3941,17 +4339,13 @@
39414339 #endif
39424340 }
39434341
3944
-/* Note: This doesn't put any conntrack and bridge info in dst. */
4342
+/* Note: This doesn't put any conntrack info in dst. */
39454343 static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
39464344 bool copy)
39474345 {
39484346 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
39494347 dst->_nfct = src->_nfct;
39504348 nf_conntrack_get(skb_nfct(src));
3951
-#endif
3952
-#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3953
- dst->nf_bridge = src->nf_bridge;
3954
- nf_bridge_get(src->nf_bridge);
39554349 #endif
39564350 #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || defined(CONFIG_NF_TABLES)
39574351 if (copy)
....@@ -3963,9 +4357,6 @@
39634357 {
39644358 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
39654359 nf_conntrack_put(skb_nfct(dst));
3966
-#endif
3967
-#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3968
- nf_bridge_put(dst->nf_bridge);
39694360 #endif
39704361 __nf_copy(dst, src, true);
39714362 }
....@@ -3988,12 +4379,19 @@
39884379 { }
39894380 #endif
39904381
4382
+static inline int secpath_exists(const struct sk_buff *skb)
4383
+{
4384
+#ifdef CONFIG_XFRM
4385
+ return skb_ext_exist(skb, SKB_EXT_SEC_PATH);
4386
+#else
4387
+ return 0;
4388
+#endif
4389
+}
4390
+
39914391 static inline bool skb_irq_freeable(const struct sk_buff *skb)
39924392 {
39934393 return !skb->destructor &&
3994
-#if IS_ENABLED(CONFIG_XFRM)
3995
- !skb->sp &&
3996
-#endif
4394
+ !secpath_exists(skb) &&
39974395 !skb_nfct(skb) &&
39984396 !skb->_skb_refdst &&
39994397 !skb_has_frag_list(skb);
....@@ -4039,10 +4437,10 @@
40394437 return skb->dst_pending_confirm != 0;
40404438 }
40414439
4042
-static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
4440
+static inline struct sec_path *skb_sec_path(const struct sk_buff *skb)
40434441 {
40444442 #ifdef CONFIG_XFRM
4045
- return skb->sp;
4443
+ return skb_ext_find(skb, SKB_EXT_SEC_PATH);
40464444 #else
40474445 return NULL;
40484446 #endif
....@@ -4063,8 +4461,8 @@
40634461 __wsum csum;
40644462 __u16 csum_start;
40654463 };
4066
-#define SKB_SGO_CB_OFFSET 32
4067
-#define SKB_GSO_CB(skb) ((struct skb_gso_cb *)((skb)->cb + SKB_SGO_CB_OFFSET))
4464
+#define SKB_GSO_CB_OFFSET 32
4465
+#define SKB_GSO_CB(skb) ((struct skb_gso_cb *)((skb)->cb + SKB_GSO_CB_OFFSET))
40684466
40694467 static inline int skb_tnl_header_len(const struct sk_buff *inner_skb)
40704468 {
....@@ -4225,7 +4623,7 @@
42254623 /* Local Checksum Offload.
42264624 * Compute outer checksum based on the assumption that the
42274625 * inner checksum will be offloaded later.
4228
- * See Documentation/networking/checksum-offloads.txt for
4626
+ * See Documentation/networking/checksum-offloads.rst for
42294627 * explanation of how this works.
42304628 * Fill in outer checksum adjustment (e.g. with sum of outer
42314629 * pseudo-header) before calling.
....@@ -4247,5 +4645,61 @@
42474645 return csum_partial(l4_hdr, csum_start - l4_hdr, partial);
42484646 }
42494647
4648
+static inline bool skb_is_redirected(const struct sk_buff *skb)
4649
+{
4650
+#ifdef CONFIG_NET_REDIRECT
4651
+ return skb->redirected;
4652
+#else
4653
+ return false;
4654
+#endif
4655
+}
4656
+
4657
+static inline void skb_set_redirected(struct sk_buff *skb, bool from_ingress)
4658
+{
4659
+#ifdef CONFIG_NET_REDIRECT
4660
+ skb->redirected = 1;
4661
+ skb->from_ingress = from_ingress;
4662
+ if (skb->from_ingress)
4663
+ skb->tstamp = 0;
4664
+#endif
4665
+}
4666
+
4667
+static inline void skb_reset_redirect(struct sk_buff *skb)
4668
+{
4669
+#ifdef CONFIG_NET_REDIRECT
4670
+ skb->redirected = 0;
4671
+#endif
4672
+}
4673
+
4674
+#if IS_ENABLED(CONFIG_KCOV) && IS_ENABLED(CONFIG_SKB_EXTENSIONS)
4675
+static inline void skb_set_kcov_handle(struct sk_buff *skb,
4676
+ const u64 kcov_handle)
4677
+{
4678
+ /* Do not allocate skb extensions only to set kcov_handle to zero
4679
+ * (as it is zero by default). However, if the extensions are
4680
+ * already allocated, update kcov_handle anyway since
4681
+ * skb_set_kcov_handle can be called to zero a previously set
4682
+ * value.
4683
+ */
4684
+ if (skb_has_extensions(skb) || kcov_handle) {
4685
+ u64 *kcov_handle_ptr = skb_ext_add(skb, SKB_EXT_KCOV_HANDLE);
4686
+
4687
+ if (kcov_handle_ptr)
4688
+ *kcov_handle_ptr = kcov_handle;
4689
+ }
4690
+}
4691
+
4692
+static inline u64 skb_get_kcov_handle(struct sk_buff *skb)
4693
+{
4694
+ u64 *kcov_handle = skb_ext_find(skb, SKB_EXT_KCOV_HANDLE);
4695
+
4696
+ return kcov_handle ? *kcov_handle : 0;
4697
+}
4698
+#else
4699
+static inline void skb_set_kcov_handle(struct sk_buff *skb,
4700
+ const u64 kcov_handle) { }
4701
+static inline u64 skb_get_kcov_handle(struct sk_buff *skb) { return 0; }
4702
+#endif /* CONFIG_KCOV && CONFIG_SKB_EXTENSIONS */
4703
+
42504704 #endif /* __KERNEL__ */
42514705 #endif /* _LINUX_SKBUFF_H */