hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
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. */
....@@ -310,41 +321,51 @@
310321 */
311322 #define GSO_BY_FRAGS 0xFFFF
312323
313
-typedef struct skb_frag_struct skb_frag_t;
324
+typedef struct bio_vec skb_frag_t;
314325
315
-struct skb_frag_struct {
316
- struct {
317
- struct page *p;
318
- } page;
319
-#if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536)
320
- __u32 page_offset;
321
- __u32 size;
322
-#else
323
- __u16 page_offset;
324
- __u16 size;
325
-#endif
326
-};
327
-
326
+/**
327
+ * skb_frag_size() - Returns the size of a skb fragment
328
+ * @frag: skb fragment
329
+ */
328330 static inline unsigned int skb_frag_size(const skb_frag_t *frag)
329331 {
330
- return frag->size;
332
+ return frag->bv_len;
331333 }
332334
335
+/**
336
+ * skb_frag_size_set() - Sets the size of a skb fragment
337
+ * @frag: skb fragment
338
+ * @size: size of fragment
339
+ */
333340 static inline void skb_frag_size_set(skb_frag_t *frag, unsigned int size)
334341 {
335
- frag->size = size;
342
+ frag->bv_len = size;
336343 }
337344
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
+ */
338350 static inline void skb_frag_size_add(skb_frag_t *frag, int delta)
339351 {
340
- frag->size += delta;
352
+ frag->bv_len += delta;
341353 }
342354
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
+ */
343360 static inline void skb_frag_size_sub(skb_frag_t *frag, int delta)
344361 {
345
- frag->size -= delta;
362
+ frag->bv_len -= delta;
346363 }
347364
365
+/**
366
+ * skb_frag_must_loop - Test if %p is a high memory page
367
+ * @p: fragment's page
368
+ */
348369 static inline bool skb_frag_must_loop(struct page *p)
349370 {
350371 #if defined(CONFIG_HIGHMEM)
....@@ -358,7 +379,7 @@
358379 * skb_frag_foreach_page - loop over pages in a fragment
359380 *
360381 * @f: skb frag to operate on
361
- * @f_off: offset from start of f->page.p
382
+ * @f_off: offset from start of f->bv_page
362383 * @f_len: length from f_off to loop over
363384 * @p: (temp var) current page
364385 * @p_off: (temp var) offset from start of current page,
....@@ -479,10 +500,11 @@
479500 }
480501
481502 void sock_zerocopy_put(struct ubuf_info *uarg);
482
-void sock_zerocopy_put_abort(struct ubuf_info *uarg);
503
+void sock_zerocopy_put_abort(struct ubuf_info *uarg, bool have_uref);
483504
484505 void sock_zerocopy_callback(struct ubuf_info *uarg, bool success);
485506
507
+int skb_zerocopy_iter_dgram(struct sk_buff *skb, struct msghdr *msg, int len);
486508 int skb_zerocopy_iter_stream(struct sock *sk, struct sk_buff *skb,
487509 struct msghdr *msg, int len,
488510 struct ubuf_info *uarg);
....@@ -511,6 +533,8 @@
511533 /* Intermediate layers must ensure that destructor_arg
512534 * remains valid until skb destructor */
513535 void * destructor_arg;
536
+
537
+ ANDROID_OEM_DATA_ARRAY(1, 3);
514538
515539 /* must be last field, see pskb_expand_head() */
516540 skb_frag_t frags[MAX_SKB_FRAGS];
....@@ -575,6 +599,8 @@
575599 SKB_GSO_UDP = 1 << 16,
576600
577601 SKB_GSO_UDP_L4 = 1 << 17,
602
+
603
+ SKB_GSO_FRAGLIST = 1 << 18,
578604 };
579605
580606 #if BITS_PER_LONG > 32
....@@ -587,14 +613,20 @@
587613 typedef unsigned char *sk_buff_data_t;
588614 #endif
589615
590
-/**
616
+/**
591617 * struct sk_buff - socket buffer
592618 * @next: Next buffer in list
593619 * @prev: Previous buffer in list
594620 * @tstamp: Time we arrived/left
621
+ * @skb_mstamp_ns: (aka @tstamp) earliest departure time; start point
622
+ * for retransmit timer
595623 * @rbnode: RB tree node, alternative to next/prev for netem/tcp
624
+ * @list: queue head
596625 * @sk: Socket we are owned by
626
+ * @ip_defrag_offset: (aka @sk) alternate use of @sk, used in
627
+ * fragmentation management
597628 * @dev: Device we arrived on/are leaving by
629
+ * @dev_scratch: (aka @dev) alternate use of @dev when @dev would be %NULL
598630 * @cb: Control buffer. Free for use by every layer. Put private vars here
599631 * @_skb_refdst: destination entry (with norefcount bit)
600632 * @sp: the security path, used for xfrm
....@@ -613,10 +645,15 @@
613645 * @pkt_type: Packet class
614646 * @fclone: skbuff clone status
615647 * @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
616653 * @tc_skip_classify: do not classify packet. set by IFB device
617654 * @tc_at_ingress: used within tc_classify to distinguish in/egress
618
- * @tc_redirected: packet was redirected by a tc action
619
- * @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
620657 * @peeked: this packet has been seen already, so stats have been
621658 * done for it, don't do them again
622659 * @nf_trace: netfilter packet trace flag
....@@ -629,8 +666,10 @@
629666 * @tc_index: Traffic control index
630667 * @hash: the packet hash
631668 * @queue_mapping: Queue mapping for multiqueue devices
632
- * @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().
633671 * @pfmemalloc: skbuff was allocated from PFMEMALLOC reserves
672
+ * @active_extensions: active extensions (skb_ext_id types)
634673 * @ndisc_nodetype: router type (from link layer)
635674 * @ooo_okay: allow the mapping of a socket to a queue to be changed
636675 * @l4_hash: indicate hash is a canonical 4-tuple hash over transport
....@@ -639,15 +678,29 @@
639678 * @wifi_acked_valid: wifi_acked was set
640679 * @wifi_acked: whether frame was acked on wifi or not
641680 * @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
642684 * @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
643690 * @dst_pending_confirm: need to confirm neighbour
644691 * @decrypted: Decrypted SKB
645
- * @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
646694 * @secmark: security marking
647695 * @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
648699 * @vlan_proto: vlan encapsulation protocol
649700 * @vlan_tci: vlan tag control information
650701 * @inner_protocol: Protocol (encapsulation)
702
+ * @inner_ipproto: (aka @inner_protocol) stores ipproto when
703
+ * skb->inner_protocol_type == ENCAP_TYPE_IPPROTO;
651704 * @inner_transport_header: Inner transport layer header (encapsulation)
652705 * @inner_network_header: Network layer header (encapsulation)
653706 * @inner_mac_header: Link layer header (encapsulation)
....@@ -660,6 +713,7 @@
660713 * @data: Data head pointer
661714 * @truesize: Buffer size
662715 * @users: User count - see {datagram,tcp}.c
716
+ * @extensions: allocated extensions, valid if active_extensions is nonzero
663717 */
664718
665719 struct sk_buff {
....@@ -689,7 +743,7 @@
689743
690744 union {
691745 ktime_t tstamp;
692
- u64 skb_mstamp;
746
+ u64 skb_mstamp_ns; /* earliest departure time */
693747 };
694748 /*
695749 * This is the control buffer. It is free to use for every
....@@ -707,13 +761,9 @@
707761 struct list_head tcp_tsorted_anchor;
708762 };
709763
710
-#ifdef CONFIG_XFRM
711
- struct sec_path *sp;
712
-#endif
713764 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
714765 unsigned long _nfct;
715766 #endif
716
- struct nf_bridge_info *nf_bridge;
717767 unsigned int len,
718768 data_len;
719769 __u16 mac_len,
....@@ -732,15 +782,18 @@
732782 #endif
733783 #define CLONED_OFFSET() offsetof(struct sk_buff, __cloned_offset)
734784
785
+ /* private: */
735786 __u8 __cloned_offset[0];
787
+ /* public: */
736788 __u8 cloned:1,
737789 nohdr:1,
738790 fclone:2,
739791 peeked:1,
740792 head_frag:1,
741
- xmit_more:1,
742793 pfmemalloc:1;
743
-
794
+#ifdef CONFIG_SKB_EXTENSIONS
795
+ __u8 active_extensions;
796
+#endif
744797 /* fields enclosed in headers_start/headers_end are copied
745798 * using a single memcpy() in __copy_skb_header()
746799 */
....@@ -756,7 +809,9 @@
756809 #endif
757810 #define PKT_TYPE_OFFSET() offsetof(struct sk_buff, __pkt_type_offset)
758811
812
+ /* private: */
759813 __u8 __pkt_type_offset[0];
814
+ /* public: */
760815 __u8 pkt_type:3;
761816 __u8 ignore_df:1;
762817 __u8 nf_trace:1;
....@@ -773,6 +828,16 @@
773828 __u8 encap_hdr_csum:1;
774829 __u8 csum_valid:1;
775830
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;
776841 __u8 csum_complete_sw:1;
777842 __u8 csum_level:2;
778843 __u8 csum_not_inet:1;
....@@ -780,19 +845,21 @@
780845 #ifdef CONFIG_IPV6_NDISC_NODETYPE
781846 __u8 ndisc_nodetype:2;
782847 #endif
783
- __u8 ipvs_property:1;
784848
849
+ __u8 ipvs_property:1;
785850 __u8 inner_protocol_type:1;
786851 __u8 remcsum_offload:1;
787852 #ifdef CONFIG_NET_SWITCHDEV
788853 __u8 offload_fwd_mark:1;
789
- __u8 offload_mr_fwd_mark:1;
854
+ __u8 offload_l3_fwd_mark:1;
790855 #endif
791856 #ifdef CONFIG_NET_CLS_ACT
792857 __u8 tc_skip_classify:1;
793858 __u8 tc_at_ingress:1;
794
- __u8 tc_redirected:1;
795
- __u8 tc_from_ingress:1;
859
+#endif
860
+#ifdef CONFIG_NET_REDIRECT
861
+ __u8 redirected:1;
862
+ __u8 from_ingress:1;
796863 #endif
797864 #ifdef CONFIG_TLS_DEVICE
798865 __u8 decrypted:1;
....@@ -847,7 +914,21 @@
847914 __u32 headers_end[0];
848915 /* public: */
849916
850
- 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
+ });
851932 ANDROID_KABI_RESERVE(2);
852933
853934 /* These elements must be at the end, see alloc_skb() for details. */
....@@ -857,6 +938,11 @@
857938 *data;
858939 unsigned int truesize;
859940 refcount_t users;
941
+
942
+#ifdef CONFIG_SKB_EXTENSIONS
943
+ /* only useable after checking ->active_extensions != 0 */
944
+ struct skb_ext *extensions;
945
+#endif
860946 };
861947
862948 #ifdef __KERNEL__
....@@ -868,7 +954,10 @@
868954 #define SKB_ALLOC_RX 0x02
869955 #define SKB_ALLOC_NAPI 0x04
870956
871
-/* 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
+ */
872961 static inline bool skb_pfmemalloc(const struct sk_buff *skb)
873962 {
874963 return unlikely(skb->pfmemalloc);
....@@ -881,7 +970,6 @@
881970 #define SKB_DST_NOREF 1UL
882971 #define SKB_DST_PTRMASK ~(SKB_DST_NOREF)
883972
884
-#define SKB_NFCT_PTRMASK ~(7UL)
885973 /**
886974 * skb_dst - returns skb dst_entry
887975 * @skb: buffer
....@@ -890,7 +978,7 @@
890978 */
891979 static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
892980 {
893
- /* If refdst was not refcounted, check we still are in a
981
+ /* If refdst was not refcounted, check we still are in a
894982 * rcu_read_lock section
895983 */
896984 WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) &&
....@@ -937,6 +1025,10 @@
9371025 return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb);
9381026 }
9391027
1028
+/**
1029
+ * skb_rtable - Returns the skb &rtable
1030
+ * @skb: buffer
1031
+ */
9401032 static inline struct rtable *skb_rtable(const struct sk_buff *skb)
9411033 {
9421034 return (struct rtable *)skb_dst(skb);
....@@ -951,6 +1043,10 @@
9511043 return ptype <= PACKET_OTHERHOST;
9521044 }
9531045
1046
+/**
1047
+ * skb_napi_id - Returns the skb's NAPI id
1048
+ * @skb: buffer
1049
+ */
9541050 static inline unsigned int skb_napi_id(const struct sk_buff *skb)
9551051 {
9561052 #ifdef CONFIG_NET_RX_BUSY_POLL
....@@ -960,7 +1056,12 @@
9601056 #endif
9611057 }
9621058
963
-/* 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
+ */
9641065 static inline bool skb_unref(struct sk_buff *skb)
9651066 {
9661067 if (unlikely(!skb))
....@@ -976,8 +1077,18 @@
9761077 void skb_release_head_state(struct sk_buff *skb);
9771078 void kfree_skb(struct sk_buff *skb);
9781079 void kfree_skb_list(struct sk_buff *segs);
1080
+void skb_dump(const char *level, const struct sk_buff *skb, bool full_pkt);
9791081 void skb_tx_error(struct sk_buff *skb);
1082
+
1083
+#ifdef CONFIG_TRACEPOINTS
9801084 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
+
9811092 void __consume_stateless_skb(struct sk_buff *skb);
9821093 void __kfree_skb(struct sk_buff *skb);
9831094 extern struct kmem_cache *skbuff_head_cache;
....@@ -990,6 +1101,16 @@
9901101 int node);
9911102 struct sk_buff *__build_skb(void *data, unsigned int frag_size);
9921103 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
+ */
9931114 static inline struct sk_buff *alloc_skb(unsigned int size,
9941115 gfp_t priority)
9951116 {
....@@ -1001,6 +1122,7 @@
10011122 int max_page_order,
10021123 int *errcode,
10031124 gfp_t gfp_mask);
1125
+struct sk_buff *alloc_skb_for_msg(struct sk_buff *first);
10041126
10051127 /* Layout of fast clones : [skb1][skb2][fclone_ref] */
10061128 struct sk_buff_fclones {
....@@ -1032,6 +1154,13 @@
10321154 fclones->skb2.sk == sk;
10331155 }
10341156
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
+ */
10351164 static inline struct sk_buff *alloc_skb_fclone(unsigned int size,
10361165 gfp_t priority)
10371166 {
....@@ -1080,11 +1209,6 @@
10801209 return __skb_pad(skb, pad, true);
10811210 }
10821211 #define dev_kfree_skb(a) consume_skb(a)
1083
-
1084
-int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
1085
- int getfrag(void *from, char *to, int offset,
1086
- int len, int odd, struct sk_buff *skb),
1087
- void *from, int length);
10881212
10891213 int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
10901214 int offset, size_t size);
....@@ -1193,7 +1317,12 @@
11931317 const struct flow_dissector_key *key,
11941318 unsigned int key_count);
11951319
1196
-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,
11971326 struct flow_dissector *flow_dissector,
11981327 void *target_container,
11991328 void *data, __be16 proto, int nhoff, int hlen,
....@@ -1203,8 +1332,8 @@
12031332 struct flow_dissector *flow_dissector,
12041333 void *target_container, unsigned int flags)
12051334 {
1206
- return __skb_flow_dissect(skb, flow_dissector, target_container,
1207
- NULL, 0, 0, 0, flags);
1335
+ return __skb_flow_dissect(NULL, skb, flow_dissector,
1336
+ target_container, NULL, 0, 0, 0, flags);
12081337 }
12091338
12101339 static inline bool skb_flow_dissect_flow_keys(const struct sk_buff *skb,
....@@ -1212,25 +1341,44 @@
12121341 unsigned int flags)
12131342 {
12141343 memset(flow, 0, sizeof(*flow));
1215
- return __skb_flow_dissect(skb, &flow_keys_dissector, flow,
1216
- NULL, 0, 0, 0, flags);
1344
+ return __skb_flow_dissect(NULL, skb, &flow_keys_dissector,
1345
+ flow, NULL, 0, 0, 0, flags);
12171346 }
12181347
12191348 static inline bool
1220
-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,
12211351 struct flow_keys_basic *flow, void *data,
12221352 __be16 proto, int nhoff, int hlen,
12231353 unsigned int flags)
12241354 {
12251355 memset(flow, 0, sizeof(*flow));
1226
- return __skb_flow_dissect(skb, &flow_keys_basic_dissector, flow,
1356
+ return __skb_flow_dissect(net, skb, &flow_keys_basic_dissector, flow,
12271357 data, proto, nhoff, hlen, flags);
12281358 }
12291359
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);
12301374 void
12311375 skb_flow_dissect_tunnel_info(const struct sk_buff *skb,
12321376 struct flow_dissector *flow_dissector,
12331377 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);
12341382
12351383 static inline __u32 skb_get_hash(struct sk_buff *skb)
12361384 {
....@@ -1267,6 +1415,14 @@
12671415 to->l4_hash = from->l4_hash;
12681416 };
12691417
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
+
12701426 #ifdef NET_SKBUFF_DATA_USES_OFFSET
12711427 static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
12721428 {
....@@ -1277,6 +1433,11 @@
12771433 {
12781434 return skb->end;
12791435 }
1436
+
1437
+static inline void skb_set_end_offset(struct sk_buff *skb, unsigned int offset)
1438
+{
1439
+ skb->end = offset;
1440
+}
12801441 #else
12811442 static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
12821443 {
....@@ -1286,6 +1447,11 @@
12861447 static inline unsigned int skb_end_offset(const struct sk_buff *skb)
12871448 {
12881449 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;
12891455 }
12901456 #endif
12911457
....@@ -1304,10 +1470,14 @@
13041470 return is_zcopy ? skb_uarg(skb) : NULL;
13051471 }
13061472
1307
-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)
13081475 {
13091476 if (skb && uarg && !skb_zcopy(skb)) {
1310
- sock_zerocopy_get(uarg);
1477
+ if (unlikely(have_ref && *have_ref))
1478
+ *have_ref = false;
1479
+ else
1480
+ sock_zerocopy_get(uarg);
13111481 skb_shinfo(skb)->destructor_arg = uarg;
13121482 skb_shinfo(skb)->tx_flags |= SKBTX_ZEROCOPY_FRAG;
13131483 }
....@@ -1354,7 +1524,7 @@
13541524 struct ubuf_info *uarg = skb_zcopy(skb);
13551525
13561526 if (uarg) {
1357
- sock_zerocopy_put_abort(uarg);
1527
+ sock_zerocopy_put_abort(uarg, false);
13581528 skb_shinfo(skb)->tx_flags &= ~SKBTX_ZEROCOPY_FRAG;
13591529 }
13601530 }
....@@ -1502,6 +1672,22 @@
15021672 return 0;
15031673 }
15041674
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
+
15051691 /**
15061692 * skb_header_cloned - is the header a clone
15071693 * @skb: buffer to check
....@@ -1642,6 +1828,17 @@
16421828 }
16431829
16441830 /**
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
+/**
16451842 * skb_peek_next - peek skb following the given one from a queue
16461843 * @skb: skb to start from
16471844 * @list_: list to peek at
....@@ -1755,8 +1952,6 @@
17551952 * The "__skb_xxxx()" functions are the non-atomic ones that
17561953 * can only be called with interrupts disabled.
17571954 */
1758
-void skb_insert(struct sk_buff *old, struct sk_buff *newsk,
1759
- struct sk_buff_head *list);
17601955 static inline void __skb_insert(struct sk_buff *newsk,
17611956 struct sk_buff *prev, struct sk_buff *next,
17621957 struct sk_buff_head *list)
....@@ -1886,12 +2081,12 @@
18862081 *
18872082 * A buffer cannot be placed on two lists at the same time.
18882083 */
1889
-void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk);
18902084 static inline void __skb_queue_head(struct sk_buff_head *list,
18912085 struct sk_buff *newsk)
18922086 {
18932087 __skb_queue_after(list, (struct sk_buff *)list, newsk);
18942088 }
2089
+void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk);
18952090
18962091 /**
18972092 * __skb_queue_tail - queue a buffer at the list tail
....@@ -1903,12 +2098,12 @@
19032098 *
19042099 * A buffer cannot be placed on two lists at the same time.
19052100 */
1906
-void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
19072101 static inline void __skb_queue_tail(struct sk_buff_head *list,
19082102 struct sk_buff *newsk)
19092103 {
19102104 __skb_queue_before(list, (struct sk_buff *)list, newsk);
19112105 }
2106
+void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
19122107
19132108 /*
19142109 * remove sk_buff from list. _Must_ be called atomically, and with
....@@ -1935,7 +2130,6 @@
19352130 * so must be used with appropriate locks held only. The head item is
19362131 * returned or %NULL if the list is empty.
19372132 */
1938
-struct sk_buff *skb_dequeue(struct sk_buff_head *list);
19392133 static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
19402134 {
19412135 struct sk_buff *skb = skb_peek(list);
....@@ -1943,6 +2137,7 @@
19432137 __skb_unlink(skb, list);
19442138 return skb;
19452139 }
2140
+struct sk_buff *skb_dequeue(struct sk_buff_head *list);
19462141
19472142 /**
19482143 * __skb_dequeue_tail - remove from the tail of the queue
....@@ -1952,7 +2147,6 @@
19522147 * so must be used with appropriate locks held only. The tail item is
19532148 * returned or %NULL if the list is empty.
19542149 */
1955
-struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list);
19562150 static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list)
19572151 {
19582152 struct sk_buff *skb = skb_peek_tail(list);
....@@ -1960,6 +2154,7 @@
19602154 __skb_unlink(skb, list);
19612155 return skb;
19622156 }
2157
+struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list);
19632158
19642159
19652160 static inline bool skb_is_nonlinear(const struct sk_buff *skb)
....@@ -2009,8 +2204,8 @@
20092204 * that not all callers have unique ownership of the page but rely
20102205 * on page_is_pfmemalloc doing the right thing(tm).
20112206 */
2012
- frag->page.p = page;
2013
- frag->page_offset = off;
2207
+ frag->bv_page = page;
2208
+ frag->bv_offset = off;
20142209 skb_frag_size_set(frag, size);
20152210
20162211 page = compound_head(page);
....@@ -2045,8 +2240,6 @@
20452240 void skb_coalesce_rx_frag(struct sk_buff *skb, int i, int size,
20462241 unsigned int truesize);
20472242
2048
-#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags)
2049
-#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frag_list(skb))
20502243 #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb))
20512244
20522245 #ifdef NET_SKBUFF_DATA_USES_OFFSET
....@@ -2083,6 +2276,14 @@
20832276 }
20842277
20852278 #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
+}
20862287
20872288 /*
20882289 * Add data to an sk_buff
....@@ -2181,12 +2382,12 @@
21812382 return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len);
21822383 }
21832384
2184
-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)
21852386 {
21862387 if (likely(len <= skb_headlen(skb)))
2187
- return 1;
2388
+ return true;
21882389 if (unlikely(len > skb->len))
2189
- return 0;
2390
+ return false;
21902391 return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
21912392 }
21922393
....@@ -2410,6 +2611,11 @@
24102611 return skb->mac_header != (typeof(skb->mac_header))~0U;
24112612 }
24122613
2614
+static inline void skb_unset_mac_header(struct sk_buff *skb)
2615
+{
2616
+ skb->mac_header = (typeof(skb->mac_header))~0U;
2617
+}
2618
+
24132619 static inline void skb_reset_mac_header(struct sk_buff *skb)
24142620 {
24152621 skb->mac_header = skb->data - skb->head;
....@@ -2426,18 +2632,16 @@
24262632 skb->mac_header = skb->network_header;
24272633 }
24282634
2429
-static inline void skb_probe_transport_header(struct sk_buff *skb,
2430
- const int offset_hint)
2635
+static inline void skb_probe_transport_header(struct sk_buff *skb)
24312636 {
24322637 struct flow_keys_basic keys;
24332638
24342639 if (skb_transport_header_was_set(skb))
24352640 return;
24362641
2437
- 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))
24382644 skb_set_transport_header(skb, keys.control.thoff);
2439
- else if (offset_hint >= 0)
2440
- skb_set_transport_header(skb, offset_hint);
24412645 }
24422646
24432647 static inline void skb_mac_header_rebuild(struct sk_buff *skb)
....@@ -2531,7 +2735,7 @@
25312735 *
25322736 * Using max(32, L1_CACHE_BYTES) makes sense (especially with RPS)
25332737 * to reduce average number of cache lines per packet.
2534
- * 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 :
25352739 * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
25362740 */
25372741 #ifndef NET_SKB_PAD
....@@ -2542,10 +2746,8 @@
25422746
25432747 static inline void __skb_set_length(struct sk_buff *skb, unsigned int len)
25442748 {
2545
- if (unlikely(skb_is_nonlinear(skb))) {
2546
- WARN_ON(1);
2749
+ if (WARN_ON(skb_is_nonlinear(skb)))
25472750 return;
2548
- }
25492751 skb->len = len;
25502752 skb_set_tail_pointer(skb, len);
25512753 }
....@@ -2653,13 +2855,13 @@
26532855 * the list and one reference dropped. This function does not take the
26542856 * list lock and the caller must hold the relevant locks to use it.
26552857 */
2656
-void skb_queue_purge(struct sk_buff_head *list);
26572858 static inline void __skb_queue_purge(struct sk_buff_head *list)
26582859 {
26592860 struct sk_buff *skb;
26602861 while ((skb = __skb_dequeue(list)) != NULL)
26612862 kfree_skb(skb);
26622863 }
2864
+void skb_queue_purge(struct sk_buff_head *list);
26632865
26642866 unsigned int skb_rbtree_purge(struct rb_root *root);
26652867
....@@ -2801,7 +3003,38 @@
28013003 */
28023004 static inline unsigned int skb_frag_off(const skb_frag_t *frag)
28033005 {
2804
- 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;
28053038 }
28063039
28073040 /**
....@@ -2812,7 +3045,7 @@
28123045 */
28133046 static inline struct page *skb_frag_page(const skb_frag_t *frag)
28143047 {
2815
- return frag->page.p;
3048
+ return frag->bv_page;
28163049 }
28173050
28183051 /**
....@@ -2870,7 +3103,7 @@
28703103 */
28713104 static inline void *skb_frag_address(const skb_frag_t *frag)
28723105 {
2873
- return page_address(skb_frag_page(frag)) + frag->page_offset;
3106
+ return page_address(skb_frag_page(frag)) + skb_frag_off(frag);
28743107 }
28753108
28763109 /**
....@@ -2886,7 +3119,18 @@
28863119 if (unlikely(!ptr))
28873120 return NULL;
28883121
2889
- 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;
28903134 }
28913135
28923136 /**
....@@ -2898,7 +3142,7 @@
28983142 */
28993143 static inline void __skb_frag_set_page(skb_frag_t *frag, struct page *page)
29003144 {
2901
- frag->page.p = page;
3145
+ frag->bv_page = page;
29023146 }
29033147
29043148 /**
....@@ -2934,7 +3178,7 @@
29343178 enum dma_data_direction dir)
29353179 {
29363180 return dma_map_page(dev, skb_frag_page(frag),
2937
- frag->page_offset + offset, size, dir);
3181
+ skb_frag_off(frag) + offset, size, dir);
29383182 }
29393183
29403184 static inline struct sk_buff *pskb_copy(struct sk_buff *skb,
....@@ -3037,7 +3281,7 @@
30373281 }
30383282
30393283 /**
3040
- * 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
30413285 * @skb: buffer to pad
30423286 * @len: minimal length
30433287 * @free_on_error: free buffer on error
....@@ -3102,10 +3346,10 @@
31023346 if (skb_zcopy(skb))
31033347 return false;
31043348 if (i) {
3105
- const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i - 1];
3349
+ const skb_frag_t *frag = &skb_shinfo(skb)->frags[i - 1];
31063350
31073351 return page == skb_frag_page(frag) &&
3108
- off == frag->page_offset + skb_frag_size(frag);
3352
+ off == skb_frag_off(frag) + skb_frag_size(frag);
31093353 }
31103354 return false;
31113355 }
....@@ -3324,24 +3568,21 @@
33243568 for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next)
33253569
33263570
3327
-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,
33283573 const struct sk_buff *skb);
33293574 struct sk_buff *__skb_try_recv_from_queue(struct sock *sk,
33303575 struct sk_buff_head *queue,
33313576 unsigned int flags,
3332
- void (*destructor)(struct sock *sk,
3333
- struct sk_buff *skb),
3334
- int *peeked, int *off, int *err,
3577
+ int *off, int *err,
33353578 struct sk_buff **last);
3336
-struct sk_buff *__skb_try_recv_datagram(struct sock *sk, unsigned flags,
3337
- void (*destructor)(struct sock *sk,
3338
- struct sk_buff *skb),
3339
- 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,
33403582 struct sk_buff **last);
3341
-struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
3342
- void (*destructor)(struct sock *sk,
3343
- struct sk_buff *skb),
3344
- 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);
33453586 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
33463587 int *err);
33473588 __poll_t datagram_poll(struct file *file, struct socket *sock,
....@@ -3355,6 +3596,9 @@
33553596 }
33563597 int skb_copy_and_csum_datagram_msg(struct sk_buff *skb, int hlen,
33573598 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);
33583602 int skb_copy_datagram_from_iter(struct sk_buff *skb, int offset,
33593603 struct iov_iter *from, int len);
33603604 int zerocopy_sg_from_iter(struct sk_buff *skb, struct iov_iter *frm);
....@@ -3369,13 +3613,12 @@
33693613 int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
33703614 int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
33713615 __wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
3372
- int len, __wsum csum);
3616
+ int len);
33733617 int skb_splice_bits(struct sk_buff *skb, struct sock *sk, unsigned int offset,
33743618 struct pipe_inode_info *pipe, unsigned int len,
33753619 unsigned int flags);
33763620 int skb_send_sock_locked(struct sock *sk, struct sk_buff *skb, int offset,
33773621 int len);
3378
-int skb_send_sock(struct sock *sk, struct sk_buff *skb, int offset, int len);
33793622 void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
33803623 unsigned int skb_zerocopy_headlen(const struct sk_buff *from);
33813624 int skb_zerocopy(struct sk_buff *to, struct sk_buff *from,
....@@ -3386,11 +3629,22 @@
33863629 bool skb_gso_validate_network_len(const struct sk_buff *skb, unsigned int mtu);
33873630 bool skb_gso_validate_mac_len(const struct sk_buff *skb, unsigned int len);
33883631 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);
33893634 struct sk_buff *skb_vlan_untag(struct sk_buff *skb);
33903635 int skb_ensure_writable(struct sk_buff *skb, int write_len);
33913636 int __skb_vlan_pop(struct sk_buff *skb, u16 *vlan_tci);
33923637 int skb_vlan_pop(struct sk_buff *skb);
33933638 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);
33943648 struct sk_buff *pskb_extract(struct sk_buff *skb, int off, int to_copy,
33953649 gfp_t gfp);
33963650
....@@ -3494,22 +3748,43 @@
34943748 /**
34953749 * skb_get_timestamp - get timestamp from a skb
34963750 * @skb: skb to get stamp from
3497
- * @stamp: pointer to struct timeval to store stamp in
3751
+ * @stamp: pointer to struct __kernel_old_timeval to store stamp in
34983752 *
34993753 * Timestamps are stored in the skb as offsets to a base timestamp.
35003754 * This function converts the offset back to a struct timeval and stores
35013755 * it in stamp.
35023756 */
35033757 static inline void skb_get_timestamp(const struct sk_buff *skb,
3504
- struct timeval *stamp)
3758
+ struct __kernel_old_timeval *stamp)
35053759 {
3506
- *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;
35073770 }
35083771
35093772 static inline void skb_get_timestampns(const struct sk_buff *skb,
3510
- struct timespec *stamp)
3773
+ struct __kernel_old_timespec *stamp)
35113774 {
3512
- *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;
35133788 }
35143789
35153790 static inline void __net_timestamp(struct sk_buff *skb)
....@@ -3551,13 +3826,19 @@
35513826 #define __it(x, op) (x -= sizeof(u##op))
35523827 #define __it_diff(a, b, op) (*(u##op *)__it(a, op)) ^ (*(u##op *)__it(b, op))
35533828 case 32: diffs |= __it_diff(a, b, 64);
3829
+ fallthrough;
35543830 case 24: diffs |= __it_diff(a, b, 64);
3831
+ fallthrough;
35553832 case 16: diffs |= __it_diff(a, b, 64);
3833
+ fallthrough;
35563834 case 8: diffs |= __it_diff(a, b, 64);
35573835 break;
35583836 case 28: diffs |= __it_diff(a, b, 64);
3837
+ fallthrough;
35593838 case 20: diffs |= __it_diff(a, b, 64);
3839
+ fallthrough;
35603840 case 12: diffs |= __it_diff(a, b, 64);
3841
+ fallthrough;
35613842 case 4: diffs |= __it_diff(a, b, 32);
35623843 break;
35633844 }
....@@ -3618,7 +3899,7 @@
36183899 * must call this function to return the skb back to the stack with a
36193900 * timestamp.
36203901 *
3621
- * @skb: clone of the the original outgoing packet
3902
+ * @skb: clone of the original outgoing packet
36223903 * @hwtstamps: hardware time stamps
36233904 *
36243905 */
....@@ -3721,6 +4002,14 @@
37214002 skb->csum_level++;
37224003 } else if (skb->ip_summed == CHECKSUM_NONE) {
37234004 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;
37244013 skb->csum_level = 0;
37254014 }
37264015 }
....@@ -3840,18 +4129,16 @@
38404129 return (skb->ip_summed == CHECKSUM_NONE && skb->csum_valid);
38414130 }
38424131
3843
-static inline void __skb_checksum_convert(struct sk_buff *skb,
3844
- __sum16 check, __wsum pseudo)
4132
+static inline void __skb_checksum_convert(struct sk_buff *skb, __wsum pseudo)
38454133 {
38464134 skb->csum = ~pseudo;
38474135 skb->ip_summed = CHECKSUM_COMPLETE;
38484136 }
38494137
3850
-#define skb_checksum_try_convert(skb, proto, check, compute_pseudo) \
4138
+#define skb_checksum_try_convert(skb, proto, compute_pseudo) \
38514139 do { \
38524140 if (__skb_checksum_convert_check(skb)) \
3853
- __skb_checksum_convert(skb, check, \
3854
- compute_pseudo(skb, proto)); \
4141
+ __skb_checksum_convert(skb, compute_pseudo(skb, proto)); \
38554142 } while (0)
38564143
38574144 static inline void skb_remcsum_adjust_partial(struct sk_buff *skb, void *ptr,
....@@ -3891,47 +4178,151 @@
38914178 static inline struct nf_conntrack *skb_nfct(const struct sk_buff *skb)
38924179 {
38934180 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
3894
- return (void *)(skb->_nfct & SKB_NFCT_PTRMASK);
4181
+ return (void *)(skb->_nfct & NFCT_PTRMASK);
38954182 #else
38964183 return NULL;
38974184 #endif
38984185 }
38994186
3900
-#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
3901
-void nf_conntrack_destroy(struct nf_conntrack *nfct);
3902
-static inline void nf_conntrack_put(struct nf_conntrack *nfct)
4187
+static inline unsigned long skb_get_nfct(const struct sk_buff *skb)
39034188 {
3904
- if (nfct && atomic_dec_and_test(&nfct->use))
3905
- nf_conntrack_destroy(nfct);
3906
-}
3907
-static inline void nf_conntrack_get(struct nf_conntrack *nfct)
3908
-{
3909
- if (nfct)
3910
- atomic_inc(&nfct->use);
3911
-}
4189
+#if IS_ENABLED(CONFIG_NF_CONNTRACK)
4190
+ return skb->_nfct;
4191
+#else
4192
+ return 0UL;
39124193 #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 {
39134205 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3914
-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)
39154248 {
3916
- if (nf_bridge && refcount_dec_and_test(&nf_bridge->use))
3917
- kfree(nf_bridge);
4249
+ if (skb->active_extensions)
4250
+ __skb_ext_put(skb->extensions);
39184251 }
3919
-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)
39204255 {
3921
- if (nf_bridge)
3922
- 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
+ }
39234264 }
3924
-#endif /* CONFIG_BRIDGE_NETFILTER */
3925
-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)
39264321 {
39274322 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
39284323 nf_conntrack_put(skb_nfct(skb));
39294324 skb->_nfct = 0;
39304325 #endif
3931
-#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3932
- nf_bridge_put(skb->nf_bridge);
3933
-#endif
3934
- skb->nf_bridge = NULL;
39354326 }
39364327
39374328 static inline void nf_reset_trace(struct sk_buff *skb)
....@@ -3948,17 +4339,13 @@
39484339 #endif
39494340 }
39504341
3951
-/* Note: This doesn't put any conntrack and bridge info in dst. */
4342
+/* Note: This doesn't put any conntrack info in dst. */
39524343 static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
39534344 bool copy)
39544345 {
39554346 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
39564347 dst->_nfct = src->_nfct;
39574348 nf_conntrack_get(skb_nfct(src));
3958
-#endif
3959
-#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3960
- dst->nf_bridge = src->nf_bridge;
3961
- nf_bridge_get(src->nf_bridge);
39624349 #endif
39634350 #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || defined(CONFIG_NF_TABLES)
39644351 if (copy)
....@@ -3970,9 +4357,6 @@
39704357 {
39714358 #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
39724359 nf_conntrack_put(skb_nfct(dst));
3973
-#endif
3974
-#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
3975
- nf_bridge_put(dst->nf_bridge);
39764360 #endif
39774361 __nf_copy(dst, src, true);
39784362 }
....@@ -3995,12 +4379,19 @@
39954379 { }
39964380 #endif
39974381
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
+
39984391 static inline bool skb_irq_freeable(const struct sk_buff *skb)
39994392 {
40004393 return !skb->destructor &&
4001
-#if IS_ENABLED(CONFIG_XFRM)
4002
- !skb->sp &&
4003
-#endif
4394
+ !secpath_exists(skb) &&
40044395 !skb_nfct(skb) &&
40054396 !skb->_skb_refdst &&
40064397 !skb_has_frag_list(skb);
....@@ -4046,10 +4437,10 @@
40464437 return skb->dst_pending_confirm != 0;
40474438 }
40484439
4049
-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)
40504441 {
40514442 #ifdef CONFIG_XFRM
4052
- return skb->sp;
4443
+ return skb_ext_find(skb, SKB_EXT_SEC_PATH);
40534444 #else
40544445 return NULL;
40554446 #endif
....@@ -4070,8 +4461,8 @@
40704461 __wsum csum;
40714462 __u16 csum_start;
40724463 };
4073
-#define SKB_SGO_CB_OFFSET 32
4074
-#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))
40754466
40764467 static inline int skb_tnl_header_len(const struct sk_buff *inner_skb)
40774468 {
....@@ -4232,7 +4623,7 @@
42324623 /* Local Checksum Offload.
42334624 * Compute outer checksum based on the assumption that the
42344625 * inner checksum will be offloaded later.
4235
- * See Documentation/networking/checksum-offloads.txt for
4626
+ * See Documentation/networking/checksum-offloads.rst for
42364627 * explanation of how this works.
42374628 * Fill in outer checksum adjustment (e.g. with sum of outer
42384629 * pseudo-header) before calling.
....@@ -4254,5 +4645,61 @@
42544645 return csum_partial(l4_hdr, csum_start - l4_hdr, partial);
42554646 }
42564647
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
+
42574704 #endif /* __KERNEL__ */
42584705 #endif /* _LINUX_SKBUFF_H */