History

Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next

Daniel Borkmann says: ==================== pull-request: bpf-next 2021-02-16 The following pull-request contains BPF updates for your *net-next* tree. There's a small merge conflict between 7eeba1706eba ("tcp: Add receive timestamp support for receive zerocopy.") from net-next tree and 9cacf81f8161 ("bpf: Remove extra lock_sock for TCP_ZEROCOPY_RECEIVE") from bpf-next tree. Resolve as follows: [...] lock_sock(sk); err = tcp_zerocopy_receive(sk, &zc, &tss); err = BPF_CGROUP_RUN_PROG_GETSOCKOPT_KERN(sk, level, optname, &zc, &len, err); release_sock(sk); [...] We've added 116 non-merge commits during the last 27 day(s) which contain a total of 156 files changed, 5662 insertions(+), 1489 deletions(-). The main changes are: 1) Adds support of pointers to types with known size among global function args to overcome the limit on max # of allowed args, from Dmitrii Banshchikov. 2) Add bpf_iter for task_vma which can be used to generate information similar to /proc/pid/maps, from Song Liu. 3) Enable bpf_{g,s}etsockopt() from all sock_addr related program hooks. Allow rewriting bind user ports from BPF side below the ip_unprivileged_port_start range, both from Stanislav Fomichev. 4) Prevent recursion on fentry/fexit & sleepable programs and allow map-in-map as well as per-cpu maps for the latter, from Alexei Starovoitov. 5) Add selftest script to run BPF CI locally. Also enable BPF ringbuffer for sleepable programs, both from KP Singh. 6) Extend verifier to enable variable offset read/write access to the BPF program stack, from Andrei Matei. 7) Improve tc & XDP MTU handling and add a new bpf_check_mtu() helper to query device MTU from programs, from Jesper Dangaard Brouer. 8) Allow bpf_get_socket_cookie() helper also be called from [sleepable] BPF tracing programs, from Florent Revest. 9) Extend x86 JIT to pad JMPs with NOPs for helping image to converge when otherwise too many passes are required, from Gary Lin. 10) Verifier fixes on atomics with BPF_FETCH as well as function-by-function verification both related to zero-extension handling, from Ilya Leoshkevich. 11) Better kernel build integration of resolve_btfids tool, from Jiri Olsa. 12) Batch of AF_XDP selftest cleanups and small performance improvement for libbpf's xsk map redirect for newer kernels, from Björn Töpel. 13) Follow-up BPF doc and verifier improvements around atomics with BPF_FETCH, from Brendan Jackman. 14) Permit zero-sized data sections e.g. if ELF .rodata section contains read-only data from local variables, from Yonghong Song. 15) veth driver skb bulk-allocation for ndo_xdp_xmit, from Lorenzo Bianconi. ====================

David S. Miller committed 5 years ago

Commit b8af4172 parents 9ec5eea 45159b2156 files · +5662 −1489Browse files

Showing the changes to include/uapi (1 of 156 files). Show all

Unified · Split

include/uapi/linux/bpf.h+97−6
@@ -1656,22 +1656,30 @@ union bpf_attr { · 1655 unmodified lines
16561656 * networking traffic statistics as it provides a global socket
16571657 * identifier that can be assumed unique.
16581658 * Return
1659− * A 8-byte long non-decreasing number on success, or 0 if the
1660− * socket field is missing inside *skb*.
1659+ * A 8-byte long unique number on success, or 0 if the socket
1660+ * field is missing inside *skb*.
16611661 *
16621662 * u64 bpf_get_socket_cookie(struct bpf_sock_addr *ctx)
16631663 * Description
16641664 * Equivalent to bpf_get_socket_cookie() helper that accepts
16651665 * *skb*, but gets socket from **struct bpf_sock_addr** context.
16661666 * Return
1667− * A 8-byte long non-decreasing number.
1667+ * A 8-byte long unique number.
16681668 *
16691669 * u64 bpf_get_socket_cookie(struct bpf_sock_ops *ctx)
16701670 * Description
16711671 * Equivalent to **bpf_get_socket_cookie**\ () helper that accepts
16721672 * *skb*, but gets socket from **struct bpf_sock_ops** context.
16731673 * Return
1674− * A 8-byte long non-decreasing number.
1674+ * A 8-byte long unique number.
1675+ *
1676+ * u64 bpf_get_socket_cookie(struct sock *sk)
1677+ * Description
1678+ * Equivalent to **bpf_get_socket_cookie**\ () helper that accepts
1679+ * *sk*, but gets socket from a BTF **struct sock**. This helper
1680+ * also works for sleepable programs.
1681+ * Return
1682+ * A 8-byte long unique number or 0 if *sk* is NULL.
16751683 *
16761684 * u32 bpf_get_socket_uid(struct sk_buff *skb)
16771685 * Return
@@ -2231,6 +2239,9 @@ union bpf_attr { · 553 unmodified lines
22312239 * * > 0 one of **BPF_FIB_LKUP_RET_** codes explaining why the
22322240 * packet is not forwarded or needs assist from full stack
22332241 *
2242+ * If lookup fails with BPF_FIB_LKUP_RET_FRAG_NEEDED, then the MTU
2243+ * was exceeded and output params->mtu_result contains the MTU.
2244+ *
22342245 * long bpf_sock_hash_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
22352246 * Description
22362247 * Add an entry to, or update a sockhash *map* referencing sockets.
@@ -3836,6 +3847,69 @@ union bpf_attr { · 1599 unmodified lines
38363847 * Return
38373848 * A pointer to a struct socket on success or NULL if the file is
38383849 * not a socket.
3850+ *
3851+ * long bpf_check_mtu(void *ctx, u32 ifindex, u32 *mtu_len, s32 len_diff, u64 flags)
3852+ * Description
3853+
3854+ * Check ctx packet size against exceeding MTU of net device (based
3855+ * on *ifindex*). This helper will likely be used in combination
3856+ * with helpers that adjust/change the packet size.
3857+ *
3858+ * The argument *len_diff* can be used for querying with a planned
3859+ * size change. This allows to check MTU prior to changing packet
3860+ * ctx. Providing an *len_diff* adjustment that is larger than the
3861+ * actual packet size (resulting in negative packet size) will in
3862+ * principle not exceed the MTU, why it is not considered a
3863+ * failure. Other BPF-helpers are needed for performing the
3864+ * planned size change, why the responsability for catch a negative
3865+ * packet size belong in those helpers.
3866+ *
3867+ * Specifying *ifindex* zero means the MTU check is performed
3868+ * against the current net device. This is practical if this isn't
3869+ * used prior to redirect.
3870+ *
3871+ * The Linux kernel route table can configure MTUs on a more
3872+ * specific per route level, which is not provided by this helper.
3873+ * For route level MTU checks use the **bpf_fib_lookup**\ ()
3874+ * helper.
3875+ *
3876+ * *ctx* is either **struct xdp_md** for XDP programs or
3877+ * **struct sk_buff** for tc cls_act programs.
3878+ *
3879+ * The *flags* argument can be a combination of one or more of the
3880+ * following values:
3881+ *
3882+ * **BPF_MTU_CHK_SEGS**
3883+ * This flag will only works for *ctx* **struct sk_buff**.
3884+ * If packet context contains extra packet segment buffers
3885+ * (often knows as GSO skb), then MTU check is harder to
3886+ * check at this point, because in transmit path it is
3887+ * possible for the skb packet to get re-segmented
3888+ * (depending on net device features). This could still be
3889+ * a MTU violation, so this flag enables performing MTU
3890+ * check against segments, with a different violation
3891+ * return code to tell it apart. Check cannot use len_diff.
3892+ *
3893+ * On return *mtu_len* pointer contains the MTU value of the net
3894+ * device. Remember the net device configured MTU is the L3 size,
3895+ * which is returned here and XDP and TX length operate at L2.
3896+ * Helper take this into account for you, but remember when using
3897+ * MTU value in your BPF-code. On input *mtu_len* must be a valid
3898+ * pointer and be initialized (to zero), else verifier will reject
3899+ * BPF program.
3900+ *
3901+ * Return
3902+ * * 0 on success, and populate MTU value in *mtu_len* pointer.
3903+ *
3904+ * * < 0 if any input argument is invalid (*mtu_len* not updated)
3905+ *
3906+ * MTU violations return positive values, but also populate MTU
3907+ * value in *mtu_len* pointer, as this can be needed for
3908+ * implementing PMTU handing:
3909+ *
3910+ * * **BPF_MTU_CHK_RET_FRAG_NEEDED**
3911+ * * **BPF_MTU_CHK_RET_SEGS_TOOBIG**
3912+ *
38393913 */
38403914 #define __BPF_FUNC_MAPPER(FN) \
38413915 FN(unspec), \
@@ -4001,6 +4075,7 @@ union bpf_attr { · 159 unmodified lines
40014075 FN(ktime_get_coarse_ns), \
40024076 FN(ima_inode_hash), \
40034077 FN(sock_from_file), \
4078+ FN(check_mtu), \
40044079 /* */
40054080
40064081 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
@@ -4501,6 +4576,7 @@ struct bpf_prog_info { · 494 unmodified lines
45014576 __aligned_u64 prog_tags;
45024577 __u64 run_time_ns;
45034578 __u64 run_cnt;
4579+ __u64 recursion_misses;
45044580 } __attribute__((aligned(8)));
45054581
45064582 struct bpf_map_info {
@@ -4981,9 +5057,13 @@ struct bpf_fib_lookup { · 474 unmodified lines
49815057 __be16 sport;
49825058 __be16 dport;
49835059
4984− /* total length of packet from network header - used for MTU check */
4985− __u16 tot_len;
5060+ union { /* used for MTU check */
5061+ /* input to lookup */
5062+ __u16 tot_len; /* L3 length from network hdr (iph->tot_len) */
49865063
5064+ /* output: MTU value */
5065+ __u16 mtu_result;
5066+ };
49875067 /* input: L3 device index for lookup
49885068 * output: device index from FIB lookup
49895069 */
@@ -5029,6 +5109,17 @@ struct bpf_redir_neigh { · 39 unmodified lines
50295109 };
50305110 };
50315111
5112+/* bpf_check_mtu flags*/
5113+enum bpf_check_mtu_flags {
5114+ BPF_MTU_CHK_SEGS = (1U << 0),
5115+};
5116+
5117+enum bpf_check_mtu_ret {
5118+ BPF_MTU_CHK_RET_SUCCESS, /* check and lookup successful */
5119+ BPF_MTU_CHK_RET_FRAG_NEEDED, /* fragmentation required to fwd */
5120+ BPF_MTU_CHK_RET_SEGS_TOOBIG, /* GSO re-segmentation needed to fwd */
5121+};
5122+
50325123 enum bpf_task_fd_type {
50335124 BPF_FD_TYPE_RAW_TRACEPOINT, /* tp name */
50345125 BPF_FD_TYPE_TRACEPOINT, /* tp name */