mirror of https://gitee.com/openkylin/linux.git
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf
Daniel Borkmann says: ==================== pull-request: bpf 2019-05-18 The following pull-request contains BPF updates for your *net* tree. The main changes are: 1) Fix bpftool's raw BTF dump in relation to forward declarations of union/ structs, and another fix to unexport logging helpers, from Andrii. 2) Fix inode permission check for retrieving bpf programs, from Chenbo. 3) Fix bpftool to raise rlimit earlier as otherwise libbpf's feature probing can fail and subsequently it refuses to load an object, from Yonghong. 4) Fix declaration of bpf_get_current_task() in kselftests, from Alexei. 5) Fix up BPF kselftest .gitignore to add generated files, from Stanislav. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
5a35c8ea7c
|
@ -518,7 +518,7 @@ int bpf_obj_get_user(const char __user *pathname, int flags)
|
|||
static struct bpf_prog *__get_prog_inode(struct inode *inode, enum bpf_prog_type type)
|
||||
{
|
||||
struct bpf_prog *prog;
|
||||
int ret = inode_permission(inode, MAY_READ | MAY_WRITE);
|
||||
int ret = inode_permission(inode, MAY_READ);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
|
|
|
@ -208,8 +208,8 @@ static int dump_btf_type(const struct btf *btf, __u32 id,
|
|||
break;
|
||||
}
|
||||
case BTF_KIND_FWD: {
|
||||
const char *fwd_kind = BTF_INFO_KIND(t->info) ? "union"
|
||||
: "struct";
|
||||
const char *fwd_kind = BTF_INFO_KFLAG(t->info) ? "union"
|
||||
: "struct";
|
||||
|
||||
if (json_output)
|
||||
jsonw_string_field(w, "fwd_kind", fwd_kind);
|
||||
|
|
|
@ -879,6 +879,8 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)
|
|||
}
|
||||
}
|
||||
|
||||
set_max_rlimit();
|
||||
|
||||
obj = __bpf_object__open_xattr(&attr, bpf_flags);
|
||||
if (IS_ERR_OR_NULL(obj)) {
|
||||
p_err("failed to open object file");
|
||||
|
@ -958,8 +960,6 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)
|
|||
goto err_close_obj;
|
||||
}
|
||||
|
||||
set_max_rlimit();
|
||||
|
||||
err = bpf_object__load(obj);
|
||||
if (err) {
|
||||
p_err("failed to load object file");
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include "btf.h"
|
||||
#include "bpf.h"
|
||||
#include "libbpf.h"
|
||||
#include "libbpf_util.h"
|
||||
#include "libbpf_internal.h"
|
||||
|
||||
#define max(a, b) ((a) > (b) ? (a) : (b))
|
||||
#define min(a, b) ((a) < (b) ? (a) : (b))
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
#include "bpf.h"
|
||||
#include "btf.h"
|
||||
#include "str_error.h"
|
||||
#include "libbpf_util.h"
|
||||
#include "libbpf_internal.h"
|
||||
|
||||
#ifndef EM_BPF
|
||||
|
|
|
@ -21,6 +21,19 @@
|
|||
#define BTF_PARAM_ENC(name, type) (name), (type)
|
||||
#define BTF_VAR_SECINFO_ENC(type, offset, size) (type), (offset), (size)
|
||||
|
||||
extern void libbpf_print(enum libbpf_print_level level,
|
||||
const char *format, ...)
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
|
||||
#define __pr(level, fmt, ...) \
|
||||
do { \
|
||||
libbpf_print(level, "libbpf: " fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define pr_warning(fmt, ...) __pr(LIBBPF_WARN, fmt, ##__VA_ARGS__)
|
||||
#define pr_info(fmt, ...) __pr(LIBBPF_INFO, fmt, ##__VA_ARGS__)
|
||||
#define pr_debug(fmt, ...) __pr(LIBBPF_DEBUG, fmt, ##__VA_ARGS__)
|
||||
|
||||
int libbpf__probe_raw_btf(const char *raw_types, size_t types_len,
|
||||
const char *str_sec, size_t str_len);
|
||||
|
||||
|
|
|
@ -10,19 +10,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void libbpf_print(enum libbpf_print_level level,
|
||||
const char *format, ...)
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
|
||||
#define __pr(level, fmt, ...) \
|
||||
do { \
|
||||
libbpf_print(level, "libbpf: " fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define pr_warning(fmt, ...) __pr(LIBBPF_WARN, fmt, ##__VA_ARGS__)
|
||||
#define pr_info(fmt, ...) __pr(LIBBPF_INFO, fmt, ##__VA_ARGS__)
|
||||
#define pr_debug(fmt, ...) __pr(LIBBPF_DEBUG, fmt, ##__VA_ARGS__)
|
||||
|
||||
/* Use these barrier functions instead of smp_[rw]mb() when they are
|
||||
* used in a libbpf header file. That way they can be built into the
|
||||
* application that uses libbpf.
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
#include "bpf.h"
|
||||
#include "libbpf.h"
|
||||
#include "libbpf_util.h"
|
||||
#include "libbpf_internal.h"
|
||||
#include "xsk.h"
|
||||
|
||||
#ifndef SOL_XDP
|
||||
|
|
|
@ -31,6 +31,7 @@ test_section_names
|
|||
test_tcpnotify_user
|
||||
test_libbpf
|
||||
test_tcp_check_syncookie_user
|
||||
test_sysctl
|
||||
alu32
|
||||
libbpf.pc
|
||||
libbpf.so.*
|
||||
|
|
|
@ -278,7 +278,7 @@ static int (*bpf_skb_change_type)(void *ctx, __u32 type) =
|
|||
(void *) BPF_FUNC_skb_change_type;
|
||||
static unsigned int (*bpf_get_hash_recalc)(void *ctx) =
|
||||
(void *) BPF_FUNC_get_hash_recalc;
|
||||
static unsigned long long (*bpf_get_current_task)(void *ctx) =
|
||||
static unsigned long long (*bpf_get_current_task)(void) =
|
||||
(void *) BPF_FUNC_get_current_task;
|
||||
static int (*bpf_skb_change_tail)(void *ctx, __u32 len, __u64 flags) =
|
||||
(void *) BPF_FUNC_skb_change_tail;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
tests.h
|
Loading…
Reference in New Issue