Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Alexei Starovoitov says: ==================== pull-request: bpf-next 2021-04-23 The following pull-request contains BPF updates for your *net-next* tree. We've added 69 non-merge commits during the last 22 day(s) which contain a total of 69 files changed, 3141 insertions(+), 866 deletions(-). The main changes are: 1) Add BPF static linker support for extern resolution of global, from Andrii. 2) Refine retval for bpf_get_task_stack helper, from Dave. 3) Add a bpf_snprintf helper, from Florent. 4) A bunch of miscellaneous improvements from many developers. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -312,6 +312,27 @@ union bpf_iter_link_info {
|
||||
* *ctx_out*, *data_out* (for example, packet data), result of the
|
||||
* execution *retval*, and *duration* of the test run.
|
||||
*
|
||||
* The sizes of the buffers provided as input and output
|
||||
* parameters *ctx_in*, *ctx_out*, *data_in*, and *data_out* must
|
||||
* be provided in the corresponding variables *ctx_size_in*,
|
||||
* *ctx_size_out*, *data_size_in*, and/or *data_size_out*. If any
|
||||
* of these parameters are not provided (ie set to NULL), the
|
||||
* corresponding size field must be zero.
|
||||
*
|
||||
* Some program types have particular requirements:
|
||||
*
|
||||
* **BPF_PROG_TYPE_SK_LOOKUP**
|
||||
* *data_in* and *data_out* must be NULL.
|
||||
*
|
||||
* **BPF_PROG_TYPE_XDP**
|
||||
* *ctx_in* and *ctx_out* must be NULL.
|
||||
*
|
||||
* **BPF_PROG_TYPE_RAW_TRACEPOINT**,
|
||||
* **BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE**
|
||||
*
|
||||
* *ctx_out*, *data_in* and *data_out* must be NULL.
|
||||
* *repeat* must be zero.
|
||||
*
|
||||
* Return
|
||||
* Returns zero on success. On error, -1 is returned and *errno*
|
||||
* is set appropriately.
|
||||
@@ -4061,12 +4082,20 @@ union bpf_attr {
|
||||
* of new data availability is sent.
|
||||
* If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
|
||||
* of new data availability is sent unconditionally.
|
||||
* If **0** is specified in *flags*, an adaptive notification
|
||||
* of new data availability is sent.
|
||||
*
|
||||
* An adaptive notification is a notification sent whenever the user-space
|
||||
* process has caught up and consumed all available payloads. In case the user-space
|
||||
* process is still processing a previous payload, then no notification is needed
|
||||
* as it will process the newly added payload automatically.
|
||||
* Return
|
||||
* 0 on success, or a negative error in case of failure.
|
||||
*
|
||||
* void *bpf_ringbuf_reserve(void *ringbuf, u64 size, u64 flags)
|
||||
* Description
|
||||
* Reserve *size* bytes of payload in a ring buffer *ringbuf*.
|
||||
* *flags* must be 0.
|
||||
* Return
|
||||
* Valid pointer with *size* bytes of memory available; NULL,
|
||||
* otherwise.
|
||||
@@ -4078,6 +4107,10 @@ union bpf_attr {
|
||||
* of new data availability is sent.
|
||||
* If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
|
||||
* of new data availability is sent unconditionally.
|
||||
* If **0** is specified in *flags*, an adaptive notification
|
||||
* of new data availability is sent.
|
||||
*
|
||||
* See 'bpf_ringbuf_output()' for the definition of adaptive notification.
|
||||
* Return
|
||||
* Nothing. Always succeeds.
|
||||
*
|
||||
@@ -4088,6 +4121,10 @@ union bpf_attr {
|
||||
* of new data availability is sent.
|
||||
* If **BPF_RB_FORCE_WAKEUP** is specified in *flags*, notification
|
||||
* of new data availability is sent unconditionally.
|
||||
* If **0** is specified in *flags*, an adaptive notification
|
||||
* of new data availability is sent.
|
||||
*
|
||||
* See 'bpf_ringbuf_output()' for the definition of adaptive notification.
|
||||
* Return
|
||||
* Nothing. Always succeeds.
|
||||
*
|
||||
@@ -4578,7 +4615,7 @@ union bpf_attr {
|
||||
*
|
||||
* long bpf_check_mtu(void *ctx, u32 ifindex, u32 *mtu_len, s32 len_diff, u64 flags)
|
||||
* Description
|
||||
* Check ctx packet size against exceeding MTU of net device (based
|
||||
* Check packet size against exceeding MTU of net device (based
|
||||
* on *ifindex*). This helper will likely be used in combination
|
||||
* with helpers that adjust/change the packet size.
|
||||
*
|
||||
@@ -4595,6 +4632,14 @@ union bpf_attr {
|
||||
* against the current net device. This is practical if this isn't
|
||||
* used prior to redirect.
|
||||
*
|
||||
* On input *mtu_len* must be a valid pointer, else verifier will
|
||||
* reject BPF program. If the value *mtu_len* is initialized to
|
||||
* zero then the ctx packet size is use. When value *mtu_len* is
|
||||
* provided as input this specify the L3 length that the MTU check
|
||||
* is done against. Remember XDP and TC length operate at L2, but
|
||||
* this value is L3 as this correlate to MTU and IP-header tot_len
|
||||
* values which are L3 (similar behavior as bpf_fib_lookup).
|
||||
*
|
||||
* The Linux kernel route table can configure MTUs on a more
|
||||
* specific per route level, which is not provided by this helper.
|
||||
* For route level MTU checks use the **bpf_fib_lookup**\ ()
|
||||
@@ -4619,11 +4664,9 @@ union bpf_attr {
|
||||
*
|
||||
* On return *mtu_len* pointer contains the MTU value of the net
|
||||
* device. Remember the net device configured MTU is the L3 size,
|
||||
* which is returned here and XDP and TX length operate at L2.
|
||||
* which is returned here and XDP and TC length operate at L2.
|
||||
* Helper take this into account for you, but remember when using
|
||||
* MTU value in your BPF-code. On input *mtu_len* must be a valid
|
||||
* pointer and be initialized (to zero), else verifier will reject
|
||||
* BPF program.
|
||||
* MTU value in your BPF-code.
|
||||
*
|
||||
* Return
|
||||
* * 0 on success, and populate MTU value in *mtu_len* pointer.
|
||||
@@ -4665,6 +4708,33 @@ union bpf_attr {
|
||||
* Return
|
||||
* The number of traversed map elements for success, **-EINVAL** for
|
||||
* invalid **flags**.
|
||||
*
|
||||
* long bpf_snprintf(char *str, u32 str_size, const char *fmt, u64 *data, u32 data_len)
|
||||
* Description
|
||||
* Outputs a string into the **str** buffer of size **str_size**
|
||||
* based on a format string stored in a read-only map pointed by
|
||||
* **fmt**.
|
||||
*
|
||||
* Each format specifier in **fmt** corresponds to one u64 element
|
||||
* in the **data** array. For strings and pointers where pointees
|
||||
* are accessed, only the pointer values are stored in the *data*
|
||||
* array. The *data_len* is the size of *data* in bytes.
|
||||
*
|
||||
* Formats **%s** and **%p{i,I}{4,6}** require to read kernel
|
||||
* memory. Reading kernel memory may fail due to either invalid
|
||||
* address or valid address but requiring a major memory fault. If
|
||||
* reading kernel memory fails, the string for **%s** will be an
|
||||
* empty string, and the ip address for **%p{i,I}{4,6}** will be 0.
|
||||
* Not returning error to bpf program is consistent with what
|
||||
* **bpf_trace_printk**\ () does for now.
|
||||
*
|
||||
* Return
|
||||
* The strictly positive length of the formatted string, including
|
||||
* the trailing zero character. If the return value is greater than
|
||||
* **str_size**, **str** contains a truncated string, guaranteed to
|
||||
* be zero-terminated except when **str_size** is 0.
|
||||
*
|
||||
* Or **-EBUSY** if the per-CPU memory copy buffer is busy.
|
||||
*/
|
||||
#define __BPF_FUNC_MAPPER(FN) \
|
||||
FN(unspec), \
|
||||
@@ -4832,6 +4902,7 @@ union bpf_attr {
|
||||
FN(sock_from_file), \
|
||||
FN(check_mtu), \
|
||||
FN(for_each_map_elem), \
|
||||
FN(snprintf), \
|
||||
/* */
|
||||
|
||||
/* integer value in 'imm' field of BPF_CALL instruction selects which helper
|
||||
@@ -5373,6 +5444,8 @@ struct bpf_link_info {
|
||||
} raw_tracepoint;
|
||||
struct {
|
||||
__u32 attach_type;
|
||||
__u32 target_obj_id; /* prog_id for PROG_EXT, otherwise btf object id */
|
||||
__u32 target_btf_id; /* BTF type id inside the object */
|
||||
} tracing;
|
||||
struct {
|
||||
__u64 cgroup_id;
|
||||
|
||||
Reference in New Issue
Block a user