Andrii Nakryiko says: ==================== bpf-next 2022-07-29 We've added 22 non-merge commits during the last 4 day(s) which contain a total of 27 files changed, 763 insertions(+), 120 deletions(-). The main changes are: 1) Fixes to allow setting any source IP with bpf_skb_set_tunnel_key() helper, from Paul Chaignon. 2) Fix for bpf_xdp_pointer() helper when doing sanity checking, from Joanne Koong. 3) Fix for XDP frame length calculation, from Lorenzo Bianconi. 4) Libbpf BPF_KSYSCALL docs improvements and fixes to selftests to accommodate s390x quirks with socketcall(), from Ilya Leoshkevich. 5) Allow/denylist and CI configs additions to selftests/bpf to improve BPF CI, from Daniel Müller. 6) BPF trampoline + ftrace follow up fixes, from Song Liu and Xu Kuohai. 7) Fix allocation warnings in netdevsim, from Jakub Kicinski. 8) bpf_obj_get_opts() libbpf API allowing to provide file flags, from Joe Burton. 9) vsnprintf usage fix in bpf_snprintf_btf(), from Fedor Tokarev. 10) Various small fixes and clean ups, from Daniel Müller, Rongguang Wei, Jörn-Thorben Hinz, Yang Li. * https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next: (22 commits) bpf: Remove unneeded semicolon libbpf: Add bpf_obj_get_opts() netdevsim: Avoid allocation warnings triggered from user space bpf: Fix NULL pointer dereference when registering bpf trampoline bpf: Fix test_progs -j error with fentry/fexit tests selftests/bpf: Bump internal send_signal/send_signal_tracepoint timeout bpftool: Don't try to return value from void function in skeleton bpftool: Replace sizeof(arr)/sizeof(arr[0]) with ARRAY_SIZE macro bpf: btf: Fix vsnprintf return value check libbpf: Support PPC in arch_specific_syscall_pfx selftests/bpf: Adjust vmtest.sh to use local kernel configuration selftests/bpf: Copy over libbpf configs selftests/bpf: Sort configuration selftests/bpf: Attach to socketcall() in test_probe_user libbpf: Extend BPF_KSYSCALL documentation bpf, devmap: Compute proper xdp_frame len redirecting frames bpf: Fix bpf_xdp_pointer return pointer selftests/bpf: Don't assign outer source IP to host bpf: Set flow flag to allow any source IP in bpf_tunnel_key geneve: Use ip_tunnel_key flow flags in route lookups ... ==================== Link: https://lore.kernel.org/r/20220729230948.1313527-1-andrii@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
5fc7c5887c
|
@ -815,6 +815,7 @@ static struct rtable *geneve_get_v4_rt(struct sk_buff *skb,
|
||||||
fl4->saddr = info->key.u.ipv4.src;
|
fl4->saddr = info->key.u.ipv4.src;
|
||||||
fl4->fl4_dport = dport;
|
fl4->fl4_dport = dport;
|
||||||
fl4->fl4_sport = sport;
|
fl4->fl4_sport = sport;
|
||||||
|
fl4->flowi4_flags = info->key.flow_flags;
|
||||||
|
|
||||||
tos = info->key.tos;
|
tos = info->key.tos;
|
||||||
if ((tos == 1) && !geneve->cfg.collect_md) {
|
if ((tos == 1) && !geneve->cfg.collect_md) {
|
||||||
|
|
|
@ -351,10 +351,12 @@ nsim_map_alloc_elem(struct bpf_offloaded_map *offmap, unsigned int idx)
|
||||||
{
|
{
|
||||||
struct nsim_bpf_bound_map *nmap = offmap->dev_priv;
|
struct nsim_bpf_bound_map *nmap = offmap->dev_priv;
|
||||||
|
|
||||||
nmap->entry[idx].key = kmalloc(offmap->map.key_size, GFP_USER);
|
nmap->entry[idx].key = kmalloc(offmap->map.key_size,
|
||||||
|
GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
|
||||||
if (!nmap->entry[idx].key)
|
if (!nmap->entry[idx].key)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
nmap->entry[idx].value = kmalloc(offmap->map.value_size, GFP_USER);
|
nmap->entry[idx].value = kmalloc(offmap->map.value_size,
|
||||||
|
GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
|
||||||
if (!nmap->entry[idx].value) {
|
if (!nmap->entry[idx].value) {
|
||||||
kfree(nmap->entry[idx].key);
|
kfree(nmap->entry[idx].key);
|
||||||
nmap->entry[idx].key = NULL;
|
nmap->entry[idx].key = NULL;
|
||||||
|
@ -496,7 +498,7 @@ nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap)
|
||||||
if (offmap->map.map_flags)
|
if (offmap->map.map_flags)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
nmap = kzalloc(sizeof(*nmap), GFP_USER);
|
nmap = kzalloc(sizeof(*nmap), GFP_KERNEL_ACCOUNT);
|
||||||
if (!nmap)
|
if (!nmap)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
|
@ -2243,7 +2243,7 @@ static struct rtable *vxlan_get_route(struct vxlan_dev *vxlan, struct net_device
|
||||||
struct vxlan_sock *sock4,
|
struct vxlan_sock *sock4,
|
||||||
struct sk_buff *skb, int oif, u8 tos,
|
struct sk_buff *skb, int oif, u8 tos,
|
||||||
__be32 daddr, __be32 *saddr, __be16 dport, __be16 sport,
|
__be32 daddr, __be32 *saddr, __be16 dport, __be16 sport,
|
||||||
struct dst_cache *dst_cache,
|
__u8 flow_flags, struct dst_cache *dst_cache,
|
||||||
const struct ip_tunnel_info *info)
|
const struct ip_tunnel_info *info)
|
||||||
{
|
{
|
||||||
bool use_cache = ip_tunnel_dst_cache_usable(skb, info);
|
bool use_cache = ip_tunnel_dst_cache_usable(skb, info);
|
||||||
|
@ -2270,6 +2270,7 @@ static struct rtable *vxlan_get_route(struct vxlan_dev *vxlan, struct net_device
|
||||||
fl4.saddr = *saddr;
|
fl4.saddr = *saddr;
|
||||||
fl4.fl4_dport = dport;
|
fl4.fl4_dport = dport;
|
||||||
fl4.fl4_sport = sport;
|
fl4.fl4_sport = sport;
|
||||||
|
fl4.flowi4_flags = flow_flags;
|
||||||
|
|
||||||
rt = ip_route_output_key(vxlan->net, &fl4);
|
rt = ip_route_output_key(vxlan->net, &fl4);
|
||||||
if (!IS_ERR(rt)) {
|
if (!IS_ERR(rt)) {
|
||||||
|
@ -2459,7 +2460,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||||
unsigned int pkt_len = skb->len;
|
unsigned int pkt_len = skb->len;
|
||||||
__be16 src_port = 0, dst_port;
|
__be16 src_port = 0, dst_port;
|
||||||
struct dst_entry *ndst = NULL;
|
struct dst_entry *ndst = NULL;
|
||||||
__u8 tos, ttl;
|
__u8 tos, ttl, flow_flags = 0;
|
||||||
int ifindex;
|
int ifindex;
|
||||||
int err;
|
int err;
|
||||||
u32 flags = vxlan->cfg.flags;
|
u32 flags = vxlan->cfg.flags;
|
||||||
|
@ -2525,6 +2526,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||||
}
|
}
|
||||||
dst = &remote_ip;
|
dst = &remote_ip;
|
||||||
dst_port = info->key.tp_dst ? : vxlan->cfg.dst_port;
|
dst_port = info->key.tp_dst ? : vxlan->cfg.dst_port;
|
||||||
|
flow_flags = info->key.flow_flags;
|
||||||
vni = tunnel_id_to_key32(info->key.tun_id);
|
vni = tunnel_id_to_key32(info->key.tun_id);
|
||||||
ifindex = 0;
|
ifindex = 0;
|
||||||
dst_cache = &info->dst_cache;
|
dst_cache = &info->dst_cache;
|
||||||
|
@ -2555,7 +2557,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||||
rt = vxlan_get_route(vxlan, dev, sock4, skb, ifindex, tos,
|
rt = vxlan_get_route(vxlan, dev, sock4, skb, ifindex, tos,
|
||||||
dst->sin.sin_addr.s_addr,
|
dst->sin.sin_addr.s_addr,
|
||||||
&local_ip.sin.sin_addr.s_addr,
|
&local_ip.sin.sin_addr.s_addr,
|
||||||
dst_port, src_port,
|
dst_port, src_port, flow_flags,
|
||||||
dst_cache, info);
|
dst_cache, info);
|
||||||
if (IS_ERR(rt)) {
|
if (IS_ERR(rt)) {
|
||||||
err = PTR_ERR(rt);
|
err = PTR_ERR(rt);
|
||||||
|
@ -3061,7 +3063,8 @@ static int vxlan_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
|
||||||
rt = vxlan_get_route(vxlan, dev, sock4, skb, 0, info->key.tos,
|
rt = vxlan_get_route(vxlan, dev, sock4, skb, 0, info->key.tos,
|
||||||
info->key.u.ipv4.dst,
|
info->key.u.ipv4.dst,
|
||||||
&info->key.u.ipv4.src, dport, sport,
|
&info->key.u.ipv4.src, dport, sport,
|
||||||
&info->dst_cache, info);
|
info->key.flow_flags, &info->dst_cache,
|
||||||
|
info);
|
||||||
if (IS_ERR(rt))
|
if (IS_ERR(rt))
|
||||||
return PTR_ERR(rt);
|
return PTR_ERR(rt);
|
||||||
ip_rt_put(rt);
|
ip_rt_put(rt);
|
||||||
|
|
|
@ -54,6 +54,7 @@ struct ip_tunnel_key {
|
||||||
__be32 label; /* Flow Label for IPv6 */
|
__be32 label; /* Flow Label for IPv6 */
|
||||||
__be16 tp_src;
|
__be16 tp_src;
|
||||||
__be16 tp_dst;
|
__be16 tp_dst;
|
||||||
|
__u8 flow_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Flags for ip_tunnel_info mode. */
|
/* Flags for ip_tunnel_info mode. */
|
||||||
|
|
|
@ -6643,7 +6643,7 @@ static void btf_snprintf_show(struct btf_show *show, const char *fmt,
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
ssnprintf->len_left = 0;
|
ssnprintf->len_left = 0;
|
||||||
ssnprintf->len = len;
|
ssnprintf->len = len;
|
||||||
} else if (len > ssnprintf->len_left) {
|
} else if (len >= ssnprintf->len_left) {
|
||||||
/* no space, drive on to get length we would have written */
|
/* no space, drive on to get length we would have written */
|
||||||
ssnprintf->len_left = 0;
|
ssnprintf->len_left = 0;
|
||||||
ssnprintf->len += len;
|
ssnprintf->len += len;
|
||||||
|
|
|
@ -477,7 +477,7 @@ static inline int __xdp_enqueue(struct net_device *dev, struct xdp_frame *xdpf,
|
||||||
if (!dev->netdev_ops->ndo_xdp_xmit)
|
if (!dev->netdev_ops->ndo_xdp_xmit)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
err = xdp_ok_fwd_dev(dev, xdpf->len);
|
err = xdp_ok_fwd_dev(dev, xdp_get_frame_len(xdpf));
|
||||||
if (unlikely(err))
|
if (unlikely(err))
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -536,7 +536,7 @@ static bool is_valid_dst(struct bpf_dtab_netdev *obj, struct xdp_frame *xdpf)
|
||||||
!obj->dev->netdev_ops->ndo_xdp_xmit)
|
!obj->dev->netdev_ops->ndo_xdp_xmit)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (xdp_ok_fwd_dev(obj->dev, xdpf->len))
|
if (xdp_ok_fwd_dev(obj->dev, xdp_get_frame_len(xdpf)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -98,7 +98,7 @@ static int bpf_tramp_ftrace_ops_func(struct ftrace_ops *ops, enum ftrace_ops_cmd
|
||||||
default:
|
default:
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
|
|
||||||
mutex_unlock(&tr->mutex);
|
mutex_unlock(&tr->mutex);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -248,14 +248,17 @@ static int register_fentry(struct bpf_trampoline *tr, void *new_addr)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
faddr = ftrace_location((unsigned long)ip);
|
faddr = ftrace_location((unsigned long)ip);
|
||||||
if (faddr)
|
if (faddr) {
|
||||||
|
if (!tr->fops)
|
||||||
|
return -ENOTSUPP;
|
||||||
tr->func.ftrace_managed = true;
|
tr->func.ftrace_managed = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (bpf_trampoline_module_get(tr))
|
if (bpf_trampoline_module_get(tr))
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
if (tr->func.ftrace_managed) {
|
if (tr->func.ftrace_managed) {
|
||||||
ftrace_set_filter_ip(tr->fops, (unsigned long)ip, 0, 0);
|
ftrace_set_filter_ip(tr->fops, (unsigned long)ip, 0, 1);
|
||||||
ret = register_ftrace_direct_multi(tr->fops, (long)new_addr);
|
ret = register_ftrace_direct_multi(tr->fops, (long)new_addr);
|
||||||
} else {
|
} else {
|
||||||
ret = bpf_arch_text_poke(ip, BPF_MOD_CALL, NULL, new_addr);
|
ret = bpf_arch_text_poke(ip, BPF_MOD_CALL, NULL, new_addr);
|
||||||
|
|
|
@ -3918,7 +3918,7 @@ static void *bpf_xdp_pointer(struct xdp_buff *xdp, u32 offset, u32 len)
|
||||||
offset -= frag_size;
|
offset -= frag_size;
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
return offset + len < size ? addr + offset : NULL;
|
return offset + len <= size ? addr + offset : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
BPF_CALL_4(bpf_xdp_load_bytes, struct xdp_buff *, xdp, u32, offset,
|
BPF_CALL_4(bpf_xdp_load_bytes, struct xdp_buff *, xdp, u32, offset,
|
||||||
|
@ -4653,6 +4653,7 @@ BPF_CALL_4(bpf_skb_set_tunnel_key, struct sk_buff *, skb,
|
||||||
} else {
|
} else {
|
||||||
info->key.u.ipv4.dst = cpu_to_be32(from->remote_ipv4);
|
info->key.u.ipv4.dst = cpu_to_be32(from->remote_ipv4);
|
||||||
info->key.u.ipv4.src = cpu_to_be32(from->local_ipv4);
|
info->key.u.ipv4.src = cpu_to_be32(from->local_ipv4);
|
||||||
|
info->key.flow_flags = FLOWI_FLAG_ANYSRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1175,7 +1175,7 @@ static int do_skeleton(int argc, char **argv)
|
||||||
static inline void \n\
|
static inline void \n\
|
||||||
%1$s__detach(struct %1$s *obj) \n\
|
%1$s__detach(struct %1$s *obj) \n\
|
||||||
{ \n\
|
{ \n\
|
||||||
return bpf_object__detach_skeleton(obj->skeleton); \n\
|
bpf_object__detach_skeleton(obj->skeleton); \n\
|
||||||
} \n\
|
} \n\
|
||||||
",
|
",
|
||||||
obj_name
|
obj_name
|
||||||
|
|
|
@ -1962,7 +1962,7 @@ static int profile_parse_metrics(int argc, char **argv)
|
||||||
int selected_cnt = 0;
|
int selected_cnt = 0;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
metric_cnt = sizeof(metrics) / sizeof(struct profile_metric);
|
metric_cnt = ARRAY_SIZE(metrics);
|
||||||
|
|
||||||
while (argc > 0) {
|
while (argc > 0) {
|
||||||
for (i = 0; i < metric_cnt; i++) {
|
for (i = 0; i < metric_cnt; i++) {
|
||||||
|
|
|
@ -578,12 +578,21 @@ int bpf_obj_pin(int fd, const char *pathname)
|
||||||
}
|
}
|
||||||
|
|
||||||
int bpf_obj_get(const char *pathname)
|
int bpf_obj_get(const char *pathname)
|
||||||
|
{
|
||||||
|
return bpf_obj_get_opts(pathname, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
int bpf_obj_get_opts(const char *pathname, const struct bpf_obj_get_opts *opts)
|
||||||
{
|
{
|
||||||
union bpf_attr attr;
|
union bpf_attr attr;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
if (!OPTS_VALID(opts, bpf_obj_get_opts))
|
||||||
|
return libbpf_err(-EINVAL);
|
||||||
|
|
||||||
memset(&attr, 0, sizeof(attr));
|
memset(&attr, 0, sizeof(attr));
|
||||||
attr.pathname = ptr_to_u64((void *)pathname);
|
attr.pathname = ptr_to_u64((void *)pathname);
|
||||||
|
attr.file_flags = OPTS_GET(opts, file_flags, 0);
|
||||||
|
|
||||||
fd = sys_bpf_fd(BPF_OBJ_GET, &attr, sizeof(attr));
|
fd = sys_bpf_fd(BPF_OBJ_GET, &attr, sizeof(attr));
|
||||||
return libbpf_err_errno(fd);
|
return libbpf_err_errno(fd);
|
||||||
|
|
|
@ -270,8 +270,19 @@ LIBBPF_API int bpf_map_update_batch(int fd, const void *keys, const void *values
|
||||||
__u32 *count,
|
__u32 *count,
|
||||||
const struct bpf_map_batch_opts *opts);
|
const struct bpf_map_batch_opts *opts);
|
||||||
|
|
||||||
|
struct bpf_obj_get_opts {
|
||||||
|
size_t sz; /* size of this struct for forward/backward compatibility */
|
||||||
|
|
||||||
|
__u32 file_flags;
|
||||||
|
|
||||||
|
size_t :0;
|
||||||
|
};
|
||||||
|
#define bpf_obj_get_opts__last_field file_flags
|
||||||
|
|
||||||
LIBBPF_API int bpf_obj_pin(int fd, const char *pathname);
|
LIBBPF_API int bpf_obj_pin(int fd, const char *pathname);
|
||||||
LIBBPF_API int bpf_obj_get(const char *pathname);
|
LIBBPF_API int bpf_obj_get(const char *pathname);
|
||||||
|
LIBBPF_API int bpf_obj_get_opts(const char *pathname,
|
||||||
|
const struct bpf_obj_get_opts *opts);
|
||||||
|
|
||||||
struct bpf_prog_attach_opts {
|
struct bpf_prog_attach_opts {
|
||||||
size_t sz; /* size of this struct for forward/backward compatibility */
|
size_t sz; /* size of this struct for forward/backward compatibility */
|
||||||
|
|
|
@ -523,10 +523,17 @@ static __always_inline typeof(name(0)) ____##name(struct pt_regs *ctx, ##args)
|
||||||
* Original struct pt_regs * context is preserved as 'ctx' argument. This might
|
* Original struct pt_regs * context is preserved as 'ctx' argument. This might
|
||||||
* be necessary when using BPF helpers like bpf_perf_event_output().
|
* be necessary when using BPF helpers like bpf_perf_event_output().
|
||||||
*
|
*
|
||||||
* At the moment BPF_KSYSCALL does not handle all the calling convention
|
* At the moment BPF_KSYSCALL does not transparently handle all the calling
|
||||||
* quirks for mmap(), clone() and compat syscalls transparrently. This may or
|
* convention quirks for the following syscalls:
|
||||||
* may not change in the future. User needs to take extra measures to handle
|
*
|
||||||
* such quirks explicitly, if necessary.
|
* - mmap(): __ARCH_WANT_SYS_OLD_MMAP.
|
||||||
|
* - clone(): CONFIG_CLONE_BACKWARDS, CONFIG_CLONE_BACKWARDS2 and
|
||||||
|
* CONFIG_CLONE_BACKWARDS3.
|
||||||
|
* - socket-related syscalls: __ARCH_WANT_SYS_SOCKETCALL.
|
||||||
|
* - compat syscalls.
|
||||||
|
*
|
||||||
|
* This may or may not change in the future. User needs to take extra measures
|
||||||
|
* to handle such quirks explicitly, if necessary.
|
||||||
*
|
*
|
||||||
* This macro relies on BPF CO-RE support and virtual __kconfig externs.
|
* This macro relies on BPF CO-RE support and virtual __kconfig externs.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -9995,6 +9995,10 @@ static const char *arch_specific_syscall_pfx(void)
|
||||||
return "mips";
|
return "mips";
|
||||||
#elif defined(__riscv)
|
#elif defined(__riscv)
|
||||||
return "riscv";
|
return "riscv";
|
||||||
|
#elif defined(__powerpc__)
|
||||||
|
return "powerpc";
|
||||||
|
#elif defined(__powerpc64__)
|
||||||
|
return "powerpc64";
|
||||||
#else
|
#else
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
|
@ -10127,8 +10131,13 @@ struct bpf_link *bpf_program__attach_ksyscall(const struct bpf_program *prog,
|
||||||
return libbpf_err_ptr(-EINVAL);
|
return libbpf_err_ptr(-EINVAL);
|
||||||
|
|
||||||
if (kernel_supports(prog->obj, FEAT_SYSCALL_WRAPPER)) {
|
if (kernel_supports(prog->obj, FEAT_SYSCALL_WRAPPER)) {
|
||||||
|
/* arch_specific_syscall_pfx() should never return NULL here
|
||||||
|
* because it is guarded by kernel_supports(). However, since
|
||||||
|
* compiler does not know that we have an explicit conditional
|
||||||
|
* as well.
|
||||||
|
*/
|
||||||
snprintf(func_name, sizeof(func_name), "__%s_sys_%s",
|
snprintf(func_name, sizeof(func_name), "__%s_sys_%s",
|
||||||
arch_specific_syscall_pfx(), syscall_name);
|
arch_specific_syscall_pfx() ? : "", syscall_name);
|
||||||
} else {
|
} else {
|
||||||
snprintf(func_name, sizeof(func_name), "__se_sys_%s", syscall_name);
|
snprintf(func_name, sizeof(func_name), "__se_sys_%s", syscall_name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -355,6 +355,7 @@ LIBBPF_0.8.0 {
|
||||||
|
|
||||||
LIBBPF_1.0.0 {
|
LIBBPF_1.0.0 {
|
||||||
global:
|
global:
|
||||||
|
bpf_obj_get_opts;
|
||||||
bpf_prog_query_opts;
|
bpf_prog_query_opts;
|
||||||
bpf_program__attach_ksyscall;
|
bpf_program__attach_ksyscall;
|
||||||
btf__add_enum64;
|
btf__add_enum64;
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
# TEMPORARY
|
||||||
|
get_stack_raw_tp # spams with kernel warnings until next bpf -> bpf-next merge
|
||||||
|
stacktrace_build_id_nmi
|
||||||
|
stacktrace_build_id
|
||||||
|
task_fd_query_rawtp
|
||||||
|
varlen
|
|
@ -0,0 +1,67 @@
|
||||||
|
# TEMPORARY
|
||||||
|
atomics # attach(add): actual -524 <= expected 0 (trampoline)
|
||||||
|
bpf_iter_setsockopt # JIT does not support calling kernel function (kfunc)
|
||||||
|
bloom_filter_map # failed to find kernel BTF type ID of '__x64_sys_getpgid': -3 (?)
|
||||||
|
bpf_tcp_ca # JIT does not support calling kernel function (kfunc)
|
||||||
|
bpf_loop # attaches to __x64_sys_nanosleep
|
||||||
|
bpf_mod_race # BPF trampoline
|
||||||
|
bpf_nf # JIT does not support calling kernel function
|
||||||
|
core_read_macros # unknown func bpf_probe_read#4 (overlapping)
|
||||||
|
d_path # failed to auto-attach program 'prog_stat': -524 (trampoline)
|
||||||
|
dummy_st_ops # test_run unexpected error: -524 (errno 524) (trampoline)
|
||||||
|
fentry_fexit # fentry attach failed: -524 (trampoline)
|
||||||
|
fentry_test # fentry_first_attach unexpected error: -524 (trampoline)
|
||||||
|
fexit_bpf2bpf # freplace_attach_trace unexpected error: -524 (trampoline)
|
||||||
|
fexit_sleep # fexit_skel_load fexit skeleton failed (trampoline)
|
||||||
|
fexit_stress # fexit attach failed prog 0 failed: -524 (trampoline)
|
||||||
|
fexit_test # fexit_first_attach unexpected error: -524 (trampoline)
|
||||||
|
get_func_args_test # trampoline
|
||||||
|
get_func_ip_test # get_func_ip_test__attach unexpected error: -524 (trampoline)
|
||||||
|
get_stack_raw_tp # user_stack corrupted user stack (no backchain userspace)
|
||||||
|
kfree_skb # attach fentry unexpected error: -524 (trampoline)
|
||||||
|
kfunc_call # 'bpf_prog_active': not found in kernel BTF (?)
|
||||||
|
ksyms_module # test_ksyms_module__open_and_load unexpected error: -9 (?)
|
||||||
|
ksyms_module_libbpf # JIT does not support calling kernel function (kfunc)
|
||||||
|
ksyms_module_lskel # test_ksyms_module_lskel__open_and_load unexpected error: -9 (?)
|
||||||
|
modify_return # modify_return attach failed: -524 (trampoline)
|
||||||
|
module_attach # skel_attach skeleton attach failed: -524 (trampoline)
|
||||||
|
mptcp
|
||||||
|
kprobe_multi_test # relies on fentry
|
||||||
|
netcnt # failed to load BPF skeleton 'netcnt_prog': -7 (?)
|
||||||
|
probe_user # check_kprobe_res wrong kprobe res from probe read (?)
|
||||||
|
recursion # skel_attach unexpected error: -524 (trampoline)
|
||||||
|
ringbuf # skel_load skeleton load failed (?)
|
||||||
|
sk_assign # Can't read on server: Invalid argument (?)
|
||||||
|
sk_lookup # endianness problem
|
||||||
|
sk_storage_tracing # test_sk_storage_tracing__attach unexpected error: -524 (trampoline)
|
||||||
|
skc_to_unix_sock # could not attach BPF object unexpected error: -524 (trampoline)
|
||||||
|
socket_cookie # prog_attach unexpected error: -524 (trampoline)
|
||||||
|
stacktrace_build_id # compare_map_keys stackid_hmap vs. stackmap err -2 errno 2 (?)
|
||||||
|
tailcalls # tail_calls are not allowed in non-JITed programs with bpf-to-bpf calls (?)
|
||||||
|
task_local_storage # failed to auto-attach program 'trace_exit_creds': -524 (trampoline)
|
||||||
|
test_bpffs # bpffs test failed 255 (iterator)
|
||||||
|
test_bprm_opts # failed to auto-attach program 'secure_exec': -524 (trampoline)
|
||||||
|
test_ima # failed to auto-attach program 'ima': -524 (trampoline)
|
||||||
|
test_local_storage # failed to auto-attach program 'unlink_hook': -524 (trampoline)
|
||||||
|
test_lsm # failed to find kernel BTF type ID of '__x64_sys_setdomainname': -3 (?)
|
||||||
|
test_overhead # attach_fentry unexpected error: -524 (trampoline)
|
||||||
|
test_profiler # unknown func bpf_probe_read_str#45 (overlapping)
|
||||||
|
timer # failed to auto-attach program 'test1': -524 (trampoline)
|
||||||
|
timer_crash # trampoline
|
||||||
|
timer_mim # failed to auto-attach program 'test1': -524 (trampoline)
|
||||||
|
trace_ext # failed to auto-attach program 'test_pkt_md_access_new': -524 (trampoline)
|
||||||
|
trace_printk # trace_printk__load unexpected error: -2 (errno 2) (?)
|
||||||
|
trace_vprintk # trace_vprintk__open_and_load unexpected error: -9 (?)
|
||||||
|
trampoline_count # prog 'prog1': failed to attach: ERROR: strerror_r(-524)=22 (trampoline)
|
||||||
|
verif_stats # trace_vprintk__open_and_load unexpected error: -9 (?)
|
||||||
|
vmlinux # failed to auto-attach program 'handle__fentry': -524 (trampoline)
|
||||||
|
xdp_adjust_tail # case-128 err 0 errno 28 retval 1 size 128 expect-size 3520 (?)
|
||||||
|
xdp_bonding # failed to auto-attach program 'trace_on_entry': -524 (trampoline)
|
||||||
|
xdp_bpf2bpf # failed to auto-attach program 'trace_on_entry': -524 (trampoline)
|
||||||
|
map_kptr # failed to open_and_load program: -524 (trampoline)
|
||||||
|
bpf_cookie # failed to open_and_load program: -524 (trampoline)
|
||||||
|
xdp_do_redirect # prog_run_max_size unexpected error: -22 (errno 22)
|
||||||
|
send_signal # intermittently fails to receive signal
|
||||||
|
select_reuseport # intermittently fails on new s390x setup
|
||||||
|
xdp_synproxy # JIT does not support calling kernel function (kfunc)
|
||||||
|
unpriv_bpf_disabled # fentry
|
|
@ -1,65 +1,64 @@
|
||||||
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
CONFIG_BPF=y
|
CONFIG_BPF=y
|
||||||
CONFIG_BPF_SYSCALL=y
|
|
||||||
CONFIG_NET_CLS_BPF=m
|
|
||||||
CONFIG_BPF_EVENTS=y
|
CONFIG_BPF_EVENTS=y
|
||||||
CONFIG_TEST_BPF=m
|
CONFIG_BPF_JIT=y
|
||||||
|
CONFIG_BPF_LIRC_MODE2=y
|
||||||
|
CONFIG_BPF_LSM=y
|
||||||
|
CONFIG_BPF_STREAM_PARSER=y
|
||||||
|
CONFIG_BPF_SYSCALL=y
|
||||||
CONFIG_CGROUP_BPF=y
|
CONFIG_CGROUP_BPF=y
|
||||||
CONFIG_NETDEVSIM=m
|
|
||||||
CONFIG_NET_CLS_ACT=y
|
|
||||||
CONFIG_NET_SCHED=y
|
|
||||||
CONFIG_NET_SCH_INGRESS=y
|
|
||||||
CONFIG_NET_IPIP=y
|
|
||||||
CONFIG_IPV6=y
|
|
||||||
CONFIG_NET_IPGRE_DEMUX=y
|
|
||||||
CONFIG_NET_IPGRE=y
|
|
||||||
CONFIG_IPV6_GRE=y
|
|
||||||
CONFIG_CRYPTO_USER_API_HASH=m
|
|
||||||
CONFIG_CRYPTO_HMAC=m
|
CONFIG_CRYPTO_HMAC=m
|
||||||
CONFIG_CRYPTO_SHA256=m
|
CONFIG_CRYPTO_SHA256=m
|
||||||
CONFIG_VXLAN=y
|
CONFIG_CRYPTO_USER_API_HASH=m
|
||||||
CONFIG_GENEVE=y
|
|
||||||
CONFIG_NET_CLS_FLOWER=m
|
|
||||||
CONFIG_LWTUNNEL=y
|
|
||||||
CONFIG_BPF_STREAM_PARSER=y
|
|
||||||
CONFIG_XDP_SOCKETS=y
|
|
||||||
CONFIG_FTRACE_SYSCALLS=y
|
|
||||||
CONFIG_IPV6_TUNNEL=y
|
|
||||||
CONFIG_IPV6_GRE=y
|
|
||||||
CONFIG_IPV6_SEG6_BPF=y
|
|
||||||
CONFIG_NET_FOU=m
|
|
||||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
|
||||||
CONFIG_IPV6_FOU=m
|
|
||||||
CONFIG_IPV6_FOU_TUNNEL=m
|
|
||||||
CONFIG_MPLS=y
|
|
||||||
CONFIG_NET_MPLS_GSO=m
|
|
||||||
CONFIG_MPLS_ROUTING=m
|
|
||||||
CONFIG_MPLS_IPTUNNEL=m
|
|
||||||
CONFIG_IPV6_SIT=m
|
|
||||||
CONFIG_BPF_JIT=y
|
|
||||||
CONFIG_BPF_LSM=y
|
|
||||||
CONFIG_SECURITY=y
|
|
||||||
CONFIG_RC_CORE=y
|
|
||||||
CONFIG_LIRC=y
|
|
||||||
CONFIG_BPF_LIRC_MODE2=y
|
|
||||||
CONFIG_IMA=y
|
|
||||||
CONFIG_SECURITYFS=y
|
|
||||||
CONFIG_IMA_WRITE_POLICY=y
|
|
||||||
CONFIG_IMA_READ_POLICY=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
|
||||||
CONFIG_FUNCTION_TRACER=y
|
|
||||||
CONFIG_DYNAMIC_FTRACE=y
|
CONFIG_DYNAMIC_FTRACE=y
|
||||||
CONFIG_NETFILTER=y
|
|
||||||
CONFIG_NF_DEFRAG_IPV4=y
|
|
||||||
CONFIG_NF_DEFRAG_IPV6=y
|
|
||||||
CONFIG_NF_CONNTRACK=y
|
|
||||||
CONFIG_USERFAULTFD=y
|
|
||||||
CONFIG_FPROBE=y
|
CONFIG_FPROBE=y
|
||||||
|
CONFIG_FTRACE_SYSCALLS=y
|
||||||
|
CONFIG_FUNCTION_TRACER=y
|
||||||
|
CONFIG_GENEVE=y
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_MPTCP=y
|
CONFIG_IMA=y
|
||||||
CONFIG_NETFILTER_SYNPROXY=y
|
CONFIG_IMA_READ_POLICY=y
|
||||||
CONFIG_NETFILTER_XT_TARGET_CT=y
|
CONFIG_IMA_WRITE_POLICY=y
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATE=y
|
|
||||||
CONFIG_IP_NF_FILTER=y
|
CONFIG_IP_NF_FILTER=y
|
||||||
CONFIG_IP_NF_TARGET_SYNPROXY=y
|
|
||||||
CONFIG_IP_NF_RAW=y
|
CONFIG_IP_NF_RAW=y
|
||||||
|
CONFIG_IP_NF_TARGET_SYNPROXY=y
|
||||||
|
CONFIG_IPV6=y
|
||||||
|
CONFIG_IPV6_FOU=m
|
||||||
|
CONFIG_IPV6_FOU_TUNNEL=m
|
||||||
|
CONFIG_IPV6_GRE=y
|
||||||
|
CONFIG_IPV6_SEG6_BPF=y
|
||||||
|
CONFIG_IPV6_SIT=m
|
||||||
|
CONFIG_IPV6_TUNNEL=y
|
||||||
|
CONFIG_LIRC=y
|
||||||
|
CONFIG_LWTUNNEL=y
|
||||||
|
CONFIG_MPLS=y
|
||||||
|
CONFIG_MPLS_IPTUNNEL=m
|
||||||
|
CONFIG_MPLS_ROUTING=m
|
||||||
|
CONFIG_MPTCP=y
|
||||||
|
CONFIG_NET_CLS_ACT=y
|
||||||
|
CONFIG_NET_CLS_BPF=y
|
||||||
|
CONFIG_NET_CLS_FLOWER=m
|
||||||
|
CONFIG_NET_FOU=m
|
||||||
|
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||||
|
CONFIG_NET_IPGRE=y
|
||||||
|
CONFIG_NET_IPGRE_DEMUX=y
|
||||||
|
CONFIG_NET_IPIP=y
|
||||||
|
CONFIG_NET_MPLS_GSO=m
|
||||||
|
CONFIG_NET_SCH_INGRESS=y
|
||||||
|
CONFIG_NET_SCHED=y
|
||||||
|
CONFIG_NETDEVSIM=m
|
||||||
|
CONFIG_NETFILTER=y
|
||||||
|
CONFIG_NETFILTER_SYNPROXY=y
|
||||||
|
CONFIG_NETFILTER_XT_MATCH_STATE=y
|
||||||
|
CONFIG_NETFILTER_XT_TARGET_CT=y
|
||||||
|
CONFIG_NF_CONNTRACK=y
|
||||||
|
CONFIG_NF_DEFRAG_IPV4=y
|
||||||
|
CONFIG_NF_DEFRAG_IPV6=y
|
||||||
|
CONFIG_RC_CORE=y
|
||||||
|
CONFIG_SECURITY=y
|
||||||
|
CONFIG_SECURITYFS=y
|
||||||
|
CONFIG_TEST_BPF=m
|
||||||
|
CONFIG_USERFAULTFD=y
|
||||||
|
CONFIG_VXLAN=y
|
||||||
|
CONFIG_XDP_SOCKETS=y
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
CONFIG_9P_FS=y
|
||||||
|
CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
|
||||||
|
CONFIG_AUDIT=y
|
||||||
|
CONFIG_BLK_CGROUP=y
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
|
CONFIG_BLK_DEV_RAM=y
|
||||||
|
CONFIG_BONDING=y
|
||||||
|
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||||
|
CONFIG_BPF_JIT_DEFAULT_ON=y
|
||||||
|
CONFIG_BPF_PRELOAD=y
|
||||||
|
CONFIG_BPF_PRELOAD_UMD=y
|
||||||
|
CONFIG_BPFILTER=y
|
||||||
|
CONFIG_CGROUP_CPUACCT=y
|
||||||
|
CONFIG_CGROUP_DEVICE=y
|
||||||
|
CONFIG_CGROUP_FREEZER=y
|
||||||
|
CONFIG_CGROUP_HUGETLB=y
|
||||||
|
CONFIG_CGROUP_NET_CLASSID=y
|
||||||
|
CONFIG_CGROUP_PERF=y
|
||||||
|
CONFIG_CGROUP_PIDS=y
|
||||||
|
CONFIG_CGROUP_SCHED=y
|
||||||
|
CONFIG_CGROUPS=y
|
||||||
|
CONFIG_CHECKPOINT_RESTORE=y
|
||||||
|
CONFIG_CPUSETS=y
|
||||||
|
CONFIG_CRASH_DUMP=y
|
||||||
|
CONFIG_CRYPTO_USER_API_RNG=y
|
||||||
|
CONFIG_CRYPTO_USER_API_SKCIPHER=y
|
||||||
|
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||||
|
CONFIG_DEBUG_INFO_BTF=y
|
||||||
|
CONFIG_DEBUG_INFO_DWARF4=y
|
||||||
|
CONFIG_DEBUG_LIST=y
|
||||||
|
CONFIG_DEBUG_LOCKDEP=y
|
||||||
|
CONFIG_DEBUG_NOTIFIERS=y
|
||||||
|
CONFIG_DEBUG_PAGEALLOC=y
|
||||||
|
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||||
|
CONFIG_DEBUG_SG=y
|
||||||
|
CONFIG_DETECT_HUNG_TASK=y
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_EXPERT=y
|
||||||
|
CONFIG_EXT4_FS=y
|
||||||
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
|
CONFIG_FANOTIFY=y
|
||||||
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
|
CONFIG_GDB_SCRIPTS=y
|
||||||
|
CONFIG_HAVE_EBPF_JIT=y
|
||||||
|
CONFIG_HAVE_KPROBES=y
|
||||||
|
CONFIG_HAVE_KPROBES_ON_FTRACE=y
|
||||||
|
CONFIG_HAVE_KRETPROBES=y
|
||||||
|
CONFIG_HAVE_MARCH_Z10_FEATURES=y
|
||||||
|
CONFIG_HAVE_MARCH_Z196_FEATURES=y
|
||||||
|
CONFIG_HEADERS_INSTALL=y
|
||||||
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
CONFIG_HUGETLBFS=y
|
||||||
|
CONFIG_HW_RANDOM=y
|
||||||
|
CONFIG_HZ_100=y
|
||||||
|
CONFIG_IDLE_PAGE_TRACKING=y
|
||||||
|
CONFIG_IKHEADERS=y
|
||||||
|
CONFIG_INET6_ESP=y
|
||||||
|
CONFIG_INET=y
|
||||||
|
CONFIG_INET_ESP=y
|
||||||
|
CONFIG_IP_ADVANCED_ROUTER=y
|
||||||
|
CONFIG_IP_MULTICAST=y
|
||||||
|
CONFIG_IP_MULTIPLE_TABLES=y
|
||||||
|
CONFIG_IP_NF_IPTABLES=y
|
||||||
|
CONFIG_IPV6_SEG6_LWTUNNEL=y
|
||||||
|
CONFIG_IPVLAN=y
|
||||||
|
CONFIG_JUMP_LABEL=y
|
||||||
|
CONFIG_KERNEL_UNCOMPRESSED=y
|
||||||
|
CONFIG_KPROBES=y
|
||||||
|
CONFIG_KPROBES_ON_FTRACE=y
|
||||||
|
CONFIG_KRETPROBES=y
|
||||||
|
CONFIG_KSM=y
|
||||||
|
CONFIG_LATENCYTOP=y
|
||||||
|
CONFIG_LIVEPATCH=y
|
||||||
|
CONFIG_LOCK_STAT=y
|
||||||
|
CONFIG_MACVLAN=y
|
||||||
|
CONFIG_MACVTAP=y
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_MARCH_Z196=y
|
||||||
|
CONFIG_MARCH_Z196_TUNE=y
|
||||||
|
CONFIG_MEMCG=y
|
||||||
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
|
CONFIG_MODULE_SIG=y
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
CONFIG_MODULES=y
|
||||||
|
CONFIG_NAMESPACES=y
|
||||||
|
CONFIG_NET=y
|
||||||
|
CONFIG_NET_9P=y
|
||||||
|
CONFIG_NET_9P_VIRTIO=y
|
||||||
|
CONFIG_NET_ACT_BPF=y
|
||||||
|
CONFIG_NET_ACT_GACT=y
|
||||||
|
CONFIG_NET_KEY=y
|
||||||
|
CONFIG_NET_SCH_FQ=y
|
||||||
|
CONFIG_NET_VRF=y
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_NETFILTER_XT_MATCH_BPF=y
|
||||||
|
CONFIG_NETFILTER_XT_TARGET_MARK=y
|
||||||
|
CONFIG_NF_TABLES=y
|
||||||
|
CONFIG_NO_HZ_IDLE=y
|
||||||
|
CONFIG_NR_CPUS=256
|
||||||
|
CONFIG_NUMA=y
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_PANIC_ON_OOPS=y
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_POSIX_MQUEUE=y
|
||||||
|
CONFIG_PROC_KCORE=y
|
||||||
|
CONFIG_PROFILING=y
|
||||||
|
CONFIG_PROVE_LOCKING=y
|
||||||
|
CONFIG_PTDUMP_DEBUGFS=y
|
||||||
|
CONFIG_RC_DEVICES=y
|
||||||
|
CONFIG_RC_LOOPBACK=y
|
||||||
|
CONFIG_RT_GROUP_SCHED=y
|
||||||
|
CONFIG_SAMPLE_SECCOMP=y
|
||||||
|
CONFIG_SAMPLES=y
|
||||||
|
CONFIG_SCHED_TRACER=y
|
||||||
|
CONFIG_SCSI=y
|
||||||
|
CONFIG_SCSI_VIRTIO=y
|
||||||
|
CONFIG_SECURITY_NETWORK=y
|
||||||
|
CONFIG_STACK_TRACER=y
|
||||||
|
CONFIG_STATIC_KEYS_SELFTEST=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
CONFIG_TASK_DELAY_ACCT=y
|
||||||
|
CONFIG_TASK_IO_ACCOUNTING=y
|
||||||
|
CONFIG_TASK_XACCT=y
|
||||||
|
CONFIG_TASKSTATS=y
|
||||||
|
CONFIG_TCP_CONG_ADVANCED=y
|
||||||
|
CONFIG_TCP_CONG_DCTCP=y
|
||||||
|
CONFIG_TLS=y
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
CONFIG_TMPFS_POSIX_ACL=y
|
||||||
|
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
|
||||||
|
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||||
|
CONFIG_TUN=y
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_UPROBES=y
|
||||||
|
CONFIG_USELIB=y
|
||||||
|
CONFIG_USER_NS=y
|
||||||
|
CONFIG_VETH=y
|
||||||
|
CONFIG_VIRTIO_BALLOON=y
|
||||||
|
CONFIG_VIRTIO_BLK=y
|
||||||
|
CONFIG_VIRTIO_NET=y
|
||||||
|
CONFIG_VIRTIO_PCI=y
|
||||||
|
CONFIG_VLAN_8021Q=y
|
||||||
|
CONFIG_XFRM_USER=y
|
|
@ -0,0 +1,251 @@
|
||||||
|
CONFIG_9P_FS=y
|
||||||
|
CONFIG_9P_FS_POSIX_ACL=y
|
||||||
|
CONFIG_9P_FS_SECURITY=y
|
||||||
|
CONFIG_AGP=y
|
||||||
|
CONFIG_AGP_AMD64=y
|
||||||
|
CONFIG_AGP_INTEL=y
|
||||||
|
CONFIG_AGP_SIS=y
|
||||||
|
CONFIG_AGP_VIA=y
|
||||||
|
CONFIG_AMIGA_PARTITION=y
|
||||||
|
CONFIG_AUDIT=y
|
||||||
|
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
|
CONFIG_BINFMT_MISC=y
|
||||||
|
CONFIG_BLK_CGROUP=y
|
||||||
|
CONFIG_BLK_CGROUP_IOLATENCY=y
|
||||||
|
CONFIG_BLK_DEV_BSGLIB=y
|
||||||
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
|
CONFIG_BLK_DEV_RAM=y
|
||||||
|
CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||||
|
CONFIG_BLK_DEV_THROTTLING=y
|
||||||
|
CONFIG_BONDING=y
|
||||||
|
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
|
||||||
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
|
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||||
|
CONFIG_BPF_KPROBE_OVERRIDE=y
|
||||||
|
CONFIG_BPF_PRELOAD=y
|
||||||
|
CONFIG_BPF_PRELOAD_UMD=y
|
||||||
|
CONFIG_BPFILTER=y
|
||||||
|
CONFIG_BSD_DISKLABEL=y
|
||||||
|
CONFIG_BSD_PROCESS_ACCT=y
|
||||||
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
|
CONFIG_CGROUP_CPUACCT=y
|
||||||
|
CONFIG_CGROUP_DEVICE=y
|
||||||
|
CONFIG_CGROUP_FREEZER=y
|
||||||
|
CONFIG_CGROUP_HUGETLB=y
|
||||||
|
CONFIG_CGROUP_PERF=y
|
||||||
|
CONFIG_CGROUP_SCHED=y
|
||||||
|
CONFIG_CGROUPS=y
|
||||||
|
CONFIG_CMA=y
|
||||||
|
CONFIG_CMA_AREAS=7
|
||||||
|
CONFIG_COMPAT_32BIT_TIME=y
|
||||||
|
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||||
|
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||||
|
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||||
|
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||||
|
CONFIG_CPU_FREQ_STAT=y
|
||||||
|
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||||
|
CONFIG_CPUSETS=y
|
||||||
|
CONFIG_CRC_T10DIF=y
|
||||||
|
CONFIG_CRYPTO_BLAKE2B=y
|
||||||
|
CONFIG_CRYPTO_DEV_VIRTIO=m
|
||||||
|
CONFIG_CRYPTO_SEQIV=y
|
||||||
|
CONFIG_CRYPTO_XXHASH=y
|
||||||
|
CONFIG_DCB=y
|
||||||
|
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||||
|
CONFIG_DEBUG_CREDENTIALS=y
|
||||||
|
CONFIG_DEBUG_INFO_BTF=y
|
||||||
|
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||||
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
|
CONFIG_DEFAULT_FQ_CODEL=y
|
||||||
|
CONFIG_DEFAULT_RENO=y
|
||||||
|
CONFIG_DEFAULT_SECURITY_DAC=y
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
|
CONFIG_DMA_CMA=y
|
||||||
|
CONFIG_DNS_RESOLVER=y
|
||||||
|
CONFIG_EFI=y
|
||||||
|
CONFIG_EFI_STUB=y
|
||||||
|
CONFIG_EXPERT=y
|
||||||
|
CONFIG_EXT4_FS=y
|
||||||
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
|
CONFIG_FAIL_FUNCTION=y
|
||||||
|
CONFIG_FAULT_INJECTION=y
|
||||||
|
CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
||||||
|
CONFIG_FB=y
|
||||||
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
|
CONFIG_FB_TILEBLITTING=y
|
||||||
|
CONFIG_FB_VESA=y
|
||||||
|
CONFIG_FONT_8x16=y
|
||||||
|
CONFIG_FONT_MINI_4x6=y
|
||||||
|
CONFIG_FONTS=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||||
|
CONFIG_FW_LOADER_USER_HELPER=y
|
||||||
|
CONFIG_GART_IOMMU=y
|
||||||
|
CONFIG_GENERIC_PHY=y
|
||||||
|
CONFIG_HARDLOCKUP_DETECTOR=y
|
||||||
|
CONFIG_HID_A4TECH=y
|
||||||
|
CONFIG_HID_BELKIN=y
|
||||||
|
CONFIG_HID_CHERRY=y
|
||||||
|
CONFIG_HID_CYPRESS=y
|
||||||
|
CONFIG_HID_DRAGONRISE=y
|
||||||
|
CONFIG_HID_EZKEY=y
|
||||||
|
CONFIG_HID_GREENASIA=y
|
||||||
|
CONFIG_HID_GYRATION=y
|
||||||
|
CONFIG_HID_KENSINGTON=y
|
||||||
|
CONFIG_HID_KYE=y
|
||||||
|
CONFIG_HID_MICROSOFT=y
|
||||||
|
CONFIG_HID_MONTEREY=y
|
||||||
|
CONFIG_HID_PANTHERLORD=y
|
||||||
|
CONFIG_HID_PETALYNX=y
|
||||||
|
CONFIG_HID_SMARTJOYPLUS=y
|
||||||
|
CONFIG_HID_SUNPLUS=y
|
||||||
|
CONFIG_HID_TOPSEED=y
|
||||||
|
CONFIG_HID_TWINHAN=y
|
||||||
|
CONFIG_HID_ZEROPLUS=y
|
||||||
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
CONFIG_HPET=y
|
||||||
|
CONFIG_HUGETLBFS=y
|
||||||
|
CONFIG_HWPOISON_INJECT=y
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
CONFIG_INET=y
|
||||||
|
CONFIG_INPUT_EVDEV=y
|
||||||
|
CONFIG_INTEL_POWERCLAMP=y
|
||||||
|
CONFIG_IP6_NF_IPTABLES=y
|
||||||
|
CONFIG_IP_ADVANCED_ROUTER=y
|
||||||
|
CONFIG_IP_MROUTE=y
|
||||||
|
CONFIG_IP_MULTICAST=y
|
||||||
|
CONFIG_IP_MULTIPLE_TABLES=y
|
||||||
|
CONFIG_IP_NF_IPTABLES=y
|
||||||
|
CONFIG_IP_PIMSM_V1=y
|
||||||
|
CONFIG_IP_PIMSM_V2=y
|
||||||
|
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||||
|
CONFIG_IP_ROUTE_VERBOSE=y
|
||||||
|
CONFIG_IPV6_MIP6=y
|
||||||
|
CONFIG_IPV6_ROUTE_INFO=y
|
||||||
|
CONFIG_IPV6_ROUTER_PREF=y
|
||||||
|
CONFIG_IPV6_SEG6_LWTUNNEL=y
|
||||||
|
CONFIG_IPV6_SUBTREES=y
|
||||||
|
CONFIG_IRQ_POLL=y
|
||||||
|
CONFIG_JUMP_LABEL=y
|
||||||
|
CONFIG_KARMA_PARTITION=y
|
||||||
|
CONFIG_KEXEC=y
|
||||||
|
CONFIG_KPROBES=y
|
||||||
|
CONFIG_KSM=y
|
||||||
|
CONFIG_LEGACY_VSYSCALL_NONE=y
|
||||||
|
CONFIG_LOG_BUF_SHIFT=21
|
||||||
|
CONFIG_LOG_CPU_MAX_BUF_SHIFT=0
|
||||||
|
CONFIG_LOGO=y
|
||||||
|
CONFIG_LSM="selinux,bpf,integrity"
|
||||||
|
CONFIG_MAC_PARTITION=y
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_MCORE2=y
|
||||||
|
CONFIG_MEMCG=y
|
||||||
|
CONFIG_MEMORY_FAILURE=y
|
||||||
|
CONFIG_MINIX_SUBPARTITION=y
|
||||||
|
CONFIG_MODULE_SIG=y
|
||||||
|
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
CONFIG_MODULES=y
|
||||||
|
CONFIG_MODVERSIONS=y
|
||||||
|
CONFIG_NAMESPACES=y
|
||||||
|
CONFIG_NET=y
|
||||||
|
CONFIG_NET_9P=y
|
||||||
|
CONFIG_NET_9P_VIRTIO=y
|
||||||
|
CONFIG_NET_ACT_BPF=y
|
||||||
|
CONFIG_NET_CLS_CGROUP=y
|
||||||
|
CONFIG_NET_EMATCH=y
|
||||||
|
CONFIG_NET_IPGRE_BROADCAST=y
|
||||||
|
CONFIG_NET_L3_MASTER_DEV=y
|
||||||
|
CONFIG_NET_SCH_DEFAULT=y
|
||||||
|
CONFIG_NET_SCH_FQ_CODEL=y
|
||||||
|
CONFIG_NET_TC_SKB_EXT=y
|
||||||
|
CONFIG_NET_VRF=y
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_NETFILTER_NETLINK_LOG=y
|
||||||
|
CONFIG_NETFILTER_NETLINK_QUEUE=y
|
||||||
|
CONFIG_NETFILTER_XT_MATCH_BPF=y
|
||||||
|
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
|
||||||
|
CONFIG_NETLABEL=y
|
||||||
|
CONFIG_NLS_ASCII=y
|
||||||
|
CONFIG_NLS_CODEPAGE_437=y
|
||||||
|
CONFIG_NLS_DEFAULT="utf8"
|
||||||
|
CONFIG_NO_HZ=y
|
||||||
|
CONFIG_NR_CPUS=128
|
||||||
|
CONFIG_NUMA=y
|
||||||
|
CONFIG_NUMA_BALANCING=y
|
||||||
|
CONFIG_NVMEM=y
|
||||||
|
CONFIG_OSF_PARTITION=y
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_PANIC_ON_OOPS=y
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_PCI_IOV=y
|
||||||
|
CONFIG_PCI_MSI=y
|
||||||
|
CONFIG_PCIEPORTBUS=y
|
||||||
|
CONFIG_PHYSICAL_ALIGN=0x1000000
|
||||||
|
CONFIG_POSIX_MQUEUE=y
|
||||||
|
CONFIG_POWER_SUPPLY=y
|
||||||
|
CONFIG_PREEMPT=y
|
||||||
|
CONFIG_PRINTK_TIME=y
|
||||||
|
CONFIG_PROC_KCORE=y
|
||||||
|
CONFIG_PROFILING=y
|
||||||
|
CONFIG_PROVE_LOCKING=y
|
||||||
|
CONFIG_PTP_1588_CLOCK=y
|
||||||
|
CONFIG_RC_DEVICES=y
|
||||||
|
CONFIG_RC_LOOPBACK=y
|
||||||
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
|
CONFIG_SCHED_STACK_END_CHECK=y
|
||||||
|
CONFIG_SCHEDSTATS=y
|
||||||
|
CONFIG_SECURITY_NETWORK=y
|
||||||
|
CONFIG_SECURITY_SELINUX=y
|
||||||
|
CONFIG_SERIAL_8250=y
|
||||||
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
|
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||||
|
CONFIG_SERIAL_8250_EXTENDED=y
|
||||||
|
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||||
|
CONFIG_SERIAL_8250_NR_UARTS=32
|
||||||
|
CONFIG_SERIAL_8250_RSA=y
|
||||||
|
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||||
|
CONFIG_SERIAL_NONSTANDARD=y
|
||||||
|
CONFIG_SERIO_LIBPS2=y
|
||||||
|
CONFIG_SGI_PARTITION=y
|
||||||
|
CONFIG_SMP=y
|
||||||
|
CONFIG_SOLARIS_X86_PARTITION=y
|
||||||
|
CONFIG_SUN_PARTITION=y
|
||||||
|
CONFIG_SYNC_FILE=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
CONFIG_TASK_DELAY_ACCT=y
|
||||||
|
CONFIG_TASK_IO_ACCOUNTING=y
|
||||||
|
CONFIG_TASK_XACCT=y
|
||||||
|
CONFIG_TASKSTATS=y
|
||||||
|
CONFIG_TCP_CONG_ADVANCED=y
|
||||||
|
CONFIG_TCP_MD5SIG=y
|
||||||
|
CONFIG_TLS=y
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
CONFIG_TMPFS_POSIX_ACL=y
|
||||||
|
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||||
|
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||||
|
CONFIG_TUN=y
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_UNIXWARE_DISKLABEL=y
|
||||||
|
CONFIG_USER_NS=y
|
||||||
|
CONFIG_VALIDATE_FS_PARSER=y
|
||||||
|
CONFIG_VETH=y
|
||||||
|
CONFIG_VIRT_DRIVERS=y
|
||||||
|
CONFIG_VIRTIO_BALLOON=y
|
||||||
|
CONFIG_VIRTIO_BLK=y
|
||||||
|
CONFIG_VIRTIO_CONSOLE=y
|
||||||
|
CONFIG_VIRTIO_NET=y
|
||||||
|
CONFIG_VIRTIO_PCI=y
|
||||||
|
CONFIG_VLAN_8021Q=y
|
||||||
|
CONFIG_X86_ACPI_CPUFREQ=y
|
||||||
|
CONFIG_X86_CPUID=y
|
||||||
|
CONFIG_X86_MSR=y
|
||||||
|
CONFIG_X86_POWERNOW_K8=y
|
||||||
|
CONFIG_XDP_SOCKETS_DIAG=y
|
||||||
|
CONFIG_XFRM_SUB_POLICY=y
|
||||||
|
CONFIG_XFRM_USER=y
|
||||||
|
CONFIG_ZEROPLUS_FF=y
|
|
@ -4,25 +4,35 @@
|
||||||
/* TODO: corrupts other tests uses connect() */
|
/* TODO: corrupts other tests uses connect() */
|
||||||
void serial_test_probe_user(void)
|
void serial_test_probe_user(void)
|
||||||
{
|
{
|
||||||
const char *prog_name = "handle_sys_connect";
|
static const char *const prog_names[] = {
|
||||||
|
"handle_sys_connect",
|
||||||
|
#if defined(__s390x__)
|
||||||
|
"handle_sys_socketcall",
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
enum { prog_count = ARRAY_SIZE(prog_names) };
|
||||||
const char *obj_file = "./test_probe_user.o";
|
const char *obj_file = "./test_probe_user.o";
|
||||||
DECLARE_LIBBPF_OPTS(bpf_object_open_opts, opts, );
|
DECLARE_LIBBPF_OPTS(bpf_object_open_opts, opts, );
|
||||||
int err, results_map_fd, sock_fd, duration = 0;
|
int err, results_map_fd, sock_fd, duration = 0;
|
||||||
struct sockaddr curr, orig, tmp;
|
struct sockaddr curr, orig, tmp;
|
||||||
struct sockaddr_in *in = (struct sockaddr_in *)&curr;
|
struct sockaddr_in *in = (struct sockaddr_in *)&curr;
|
||||||
struct bpf_link *kprobe_link = NULL;
|
struct bpf_link *kprobe_links[prog_count] = {};
|
||||||
struct bpf_program *kprobe_prog;
|
struct bpf_program *kprobe_progs[prog_count];
|
||||||
struct bpf_object *obj;
|
struct bpf_object *obj;
|
||||||
static const int zero = 0;
|
static const int zero = 0;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
obj = bpf_object__open_file(obj_file, &opts);
|
obj = bpf_object__open_file(obj_file, &opts);
|
||||||
if (!ASSERT_OK_PTR(obj, "obj_open_file"))
|
if (!ASSERT_OK_PTR(obj, "obj_open_file"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
kprobe_prog = bpf_object__find_program_by_name(obj, prog_name);
|
for (i = 0; i < prog_count; i++) {
|
||||||
if (CHECK(!kprobe_prog, "find_probe",
|
kprobe_progs[i] =
|
||||||
"prog '%s' not found\n", prog_name))
|
bpf_object__find_program_by_name(obj, prog_names[i]);
|
||||||
goto cleanup;
|
if (CHECK(!kprobe_progs[i], "find_probe",
|
||||||
|
"prog '%s' not found\n", prog_names[i]))
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
err = bpf_object__load(obj);
|
err = bpf_object__load(obj);
|
||||||
if (CHECK(err, "obj_load", "err %d\n", err))
|
if (CHECK(err, "obj_load", "err %d\n", err))
|
||||||
|
@ -33,9 +43,11 @@ void serial_test_probe_user(void)
|
||||||
"err %d\n", results_map_fd))
|
"err %d\n", results_map_fd))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
kprobe_link = bpf_program__attach(kprobe_prog);
|
for (i = 0; i < prog_count; i++) {
|
||||||
if (!ASSERT_OK_PTR(kprobe_link, "attach_kprobe"))
|
kprobe_links[i] = bpf_program__attach(kprobe_progs[i]);
|
||||||
goto cleanup;
|
if (!ASSERT_OK_PTR(kprobe_links[i], "attach_kprobe"))
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
memset(&curr, 0, sizeof(curr));
|
memset(&curr, 0, sizeof(curr));
|
||||||
in->sin_family = AF_INET;
|
in->sin_family = AF_INET;
|
||||||
|
@ -69,6 +81,7 @@ void serial_test_probe_user(void)
|
||||||
inet_ntoa(in->sin_addr), ntohs(in->sin_port)))
|
inet_ntoa(in->sin_addr), ntohs(in->sin_port)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
cleanup:
|
cleanup:
|
||||||
bpf_link__destroy(kprobe_link);
|
for (i = 0; i < prog_count; i++)
|
||||||
|
bpf_link__destroy(kprobe_links[i]);
|
||||||
bpf_object__close(obj);
|
bpf_object__close(obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ static void test_send_signal_common(struct perf_event_attr *attr,
|
||||||
ASSERT_EQ(read(pipe_p2c[0], buf, 1), 1, "pipe_read");
|
ASSERT_EQ(read(pipe_p2c[0], buf, 1), 1, "pipe_read");
|
||||||
|
|
||||||
/* wait a little for signal handler */
|
/* wait a little for signal handler */
|
||||||
for (int i = 0; i < 100000000 && !sigusr1_received; i++)
|
for (int i = 0; i < 1000000000 && !sigusr1_received; i++)
|
||||||
j /= i + j + 1;
|
j /= i + j + 1;
|
||||||
|
|
||||||
buf[0] = sigusr1_received ? '2' : '0';
|
buf[0] = sigusr1_received ? '2' : '0';
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
|
|
||||||
#define MAC_TUNL_DEV0 "52:54:00:d9:01:00"
|
#define MAC_TUNL_DEV0 "52:54:00:d9:01:00"
|
||||||
#define MAC_TUNL_DEV1 "52:54:00:d9:02:00"
|
#define MAC_TUNL_DEV1 "52:54:00:d9:02:00"
|
||||||
|
#define MAC_VETH1 "52:54:00:d9:03:00"
|
||||||
|
|
||||||
#define VXLAN_TUNL_DEV0 "vxlan00"
|
#define VXLAN_TUNL_DEV0 "vxlan00"
|
||||||
#define VXLAN_TUNL_DEV1 "vxlan11"
|
#define VXLAN_TUNL_DEV1 "vxlan11"
|
||||||
|
@ -108,10 +109,9 @@
|
||||||
static int config_device(void)
|
static int config_device(void)
|
||||||
{
|
{
|
||||||
SYS("ip netns add at_ns0");
|
SYS("ip netns add at_ns0");
|
||||||
SYS("ip link add veth0 type veth peer name veth1");
|
SYS("ip link add veth0 address " MAC_VETH1 " type veth peer name veth1");
|
||||||
SYS("ip link set veth0 netns at_ns0");
|
SYS("ip link set veth0 netns at_ns0");
|
||||||
SYS("ip addr add " IP4_ADDR1_VETH1 "/24 dev veth1");
|
SYS("ip addr add " IP4_ADDR1_VETH1 "/24 dev veth1");
|
||||||
SYS("ip addr add " IP4_ADDR2_VETH1 "/24 dev veth1");
|
|
||||||
SYS("ip link set dev veth1 up mtu 1500");
|
SYS("ip link set dev veth1 up mtu 1500");
|
||||||
SYS("ip netns exec at_ns0 ip addr add " IP4_ADDR_VETH0 "/24 dev veth0");
|
SYS("ip netns exec at_ns0 ip addr add " IP4_ADDR_VETH0 "/24 dev veth0");
|
||||||
SYS("ip netns exec at_ns0 ip link set dev veth0 up mtu 1500");
|
SYS("ip netns exec at_ns0 ip link set dev veth0 up mtu 1500");
|
||||||
|
@ -140,6 +140,8 @@ static int add_vxlan_tunnel(void)
|
||||||
VXLAN_TUNL_DEV0, IP4_ADDR_TUNL_DEV0);
|
VXLAN_TUNL_DEV0, IP4_ADDR_TUNL_DEV0);
|
||||||
SYS("ip netns exec at_ns0 ip neigh add %s lladdr %s dev %s",
|
SYS("ip netns exec at_ns0 ip neigh add %s lladdr %s dev %s",
|
||||||
IP4_ADDR_TUNL_DEV1, MAC_TUNL_DEV1, VXLAN_TUNL_DEV0);
|
IP4_ADDR_TUNL_DEV1, MAC_TUNL_DEV1, VXLAN_TUNL_DEV0);
|
||||||
|
SYS("ip netns exec at_ns0 ip neigh add %s lladdr %s dev veth0",
|
||||||
|
IP4_ADDR2_VETH1, MAC_VETH1);
|
||||||
|
|
||||||
/* root namespace */
|
/* root namespace */
|
||||||
SYS("ip link add dev %s type vxlan external gbp dstport 4789",
|
SYS("ip link add dev %s type vxlan external gbp dstport 4789",
|
||||||
|
@ -277,6 +279,17 @@ static void test_vxlan_tunnel(void)
|
||||||
if (attach_tc_prog(&tc_hook, get_src_prog_fd, set_src_prog_fd))
|
if (attach_tc_prog(&tc_hook, get_src_prog_fd, set_src_prog_fd))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
/* load and attach bpf prog to veth dev tc hook point */
|
||||||
|
ifindex = if_nametoindex("veth1");
|
||||||
|
if (!ASSERT_NEQ(ifindex, 0, "veth1 ifindex"))
|
||||||
|
goto done;
|
||||||
|
tc_hook.ifindex = ifindex;
|
||||||
|
set_dst_prog_fd = bpf_program__fd(skel->progs.veth_set_outer_dst);
|
||||||
|
if (!ASSERT_GE(set_dst_prog_fd, 0, "bpf_program__fd"))
|
||||||
|
goto done;
|
||||||
|
if (attach_tc_prog(&tc_hook, set_dst_prog_fd, -1))
|
||||||
|
goto done;
|
||||||
|
|
||||||
/* load and attach prog set_md to tunnel dev tc hook point at_ns0 */
|
/* load and attach prog set_md to tunnel dev tc hook point at_ns0 */
|
||||||
nstoken = open_netns("at_ns0");
|
nstoken = open_netns("at_ns0");
|
||||||
if (!ASSERT_OK_PTR(nstoken, "setns src"))
|
if (!ASSERT_OK_PTR(nstoken, "setns src"))
|
||||||
|
|
|
@ -7,8 +7,7 @@
|
||||||
|
|
||||||
static struct sockaddr_in old;
|
static struct sockaddr_in old;
|
||||||
|
|
||||||
SEC("ksyscall/connect")
|
static int handle_sys_connect_common(struct sockaddr_in *uservaddr)
|
||||||
int BPF_KSYSCALL(handle_sys_connect, int fd, struct sockaddr_in *uservaddr, int addrlen)
|
|
||||||
{
|
{
|
||||||
struct sockaddr_in new;
|
struct sockaddr_in new;
|
||||||
|
|
||||||
|
@ -19,4 +18,30 @@ int BPF_KSYSCALL(handle_sys_connect, int fd, struct sockaddr_in *uservaddr, int
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SEC("ksyscall/connect")
|
||||||
|
int BPF_KSYSCALL(handle_sys_connect, int fd, struct sockaddr_in *uservaddr,
|
||||||
|
int addrlen)
|
||||||
|
{
|
||||||
|
return handle_sys_connect_common(uservaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(bpf_target_s390)
|
||||||
|
#ifndef SYS_CONNECT
|
||||||
|
#define SYS_CONNECT 3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SEC("ksyscall/socketcall")
|
||||||
|
int BPF_KSYSCALL(handle_sys_socketcall, int call, unsigned long *args)
|
||||||
|
{
|
||||||
|
if (call == SYS_CONNECT) {
|
||||||
|
struct sockaddr_in *uservaddr;
|
||||||
|
|
||||||
|
bpf_probe_read_user(&uservaddr, sizeof(uservaddr), &args[1]);
|
||||||
|
return handle_sys_connect_common(uservaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
char _license[] SEC("license") = "GPL";
|
char _license[] SEC("license") = "GPL";
|
||||||
|
|
|
@ -14,15 +14,24 @@
|
||||||
#include <linux/if_packet.h>
|
#include <linux/if_packet.h>
|
||||||
#include <linux/ip.h>
|
#include <linux/ip.h>
|
||||||
#include <linux/ipv6.h>
|
#include <linux/ipv6.h>
|
||||||
|
#include <linux/icmp.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/socket.h>
|
#include <linux/socket.h>
|
||||||
#include <linux/pkt_cls.h>
|
#include <linux/pkt_cls.h>
|
||||||
#include <linux/erspan.h>
|
#include <linux/erspan.h>
|
||||||
|
#include <linux/udp.h>
|
||||||
#include <bpf/bpf_helpers.h>
|
#include <bpf/bpf_helpers.h>
|
||||||
#include <bpf/bpf_endian.h>
|
#include <bpf/bpf_endian.h>
|
||||||
|
|
||||||
#define log_err(__ret) bpf_printk("ERROR line:%d ret:%d\n", __LINE__, __ret)
|
#define log_err(__ret) bpf_printk("ERROR line:%d ret:%d\n", __LINE__, __ret)
|
||||||
|
|
||||||
|
#define VXLAN_UDP_PORT 4789
|
||||||
|
|
||||||
|
/* Only IPv4 address assigned to veth1.
|
||||||
|
* 172.16.1.200
|
||||||
|
*/
|
||||||
|
#define ASSIGNED_ADDR_VETH1 0xac1001c8
|
||||||
|
|
||||||
struct geneve_opt {
|
struct geneve_opt {
|
||||||
__be16 opt_class;
|
__be16 opt_class;
|
||||||
__u8 type;
|
__u8 type;
|
||||||
|
@ -33,6 +42,11 @@ struct geneve_opt {
|
||||||
__u8 opt_data[8]; /* hard-coded to 8 byte */
|
__u8 opt_data[8]; /* hard-coded to 8 byte */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct vxlanhdr {
|
||||||
|
__be32 vx_flags;
|
||||||
|
__be32 vx_vni;
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
struct vxlan_metadata {
|
struct vxlan_metadata {
|
||||||
__u32 gbp;
|
__u32 gbp;
|
||||||
};
|
};
|
||||||
|
@ -369,14 +383,8 @@ int vxlan_get_tunnel_src(struct __sk_buff *skb)
|
||||||
int ret;
|
int ret;
|
||||||
struct bpf_tunnel_key key;
|
struct bpf_tunnel_key key;
|
||||||
struct vxlan_metadata md;
|
struct vxlan_metadata md;
|
||||||
|
__u32 orig_daddr;
|
||||||
__u32 index = 0;
|
__u32 index = 0;
|
||||||
__u32 *local_ip = NULL;
|
|
||||||
|
|
||||||
local_ip = bpf_map_lookup_elem(&local_ip_map, &index);
|
|
||||||
if (!local_ip) {
|
|
||||||
log_err(ret);
|
|
||||||
return TC_ACT_SHOT;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
|
ret = bpf_skb_get_tunnel_key(skb, &key, sizeof(key), 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
@ -390,11 +398,10 @@ int vxlan_get_tunnel_src(struct __sk_buff *skb)
|
||||||
return TC_ACT_SHOT;
|
return TC_ACT_SHOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key.local_ipv4 != *local_ip || md.gbp != 0x800FF) {
|
if (key.local_ipv4 != ASSIGNED_ADDR_VETH1 || md.gbp != 0x800FF) {
|
||||||
bpf_printk("vxlan key %d local ip 0x%x remote ip 0x%x gbp 0x%x\n",
|
bpf_printk("vxlan key %d local ip 0x%x remote ip 0x%x gbp 0x%x\n",
|
||||||
key.tunnel_id, key.local_ipv4,
|
key.tunnel_id, key.local_ipv4,
|
||||||
key.remote_ipv4, md.gbp);
|
key.remote_ipv4, md.gbp);
|
||||||
bpf_printk("local_ip 0x%x\n", *local_ip);
|
|
||||||
log_err(ret);
|
log_err(ret);
|
||||||
return TC_ACT_SHOT;
|
return TC_ACT_SHOT;
|
||||||
}
|
}
|
||||||
|
@ -402,6 +409,61 @@ int vxlan_get_tunnel_src(struct __sk_buff *skb)
|
||||||
return TC_ACT_OK;
|
return TC_ACT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SEC("tc")
|
||||||
|
int veth_set_outer_dst(struct __sk_buff *skb)
|
||||||
|
{
|
||||||
|
struct ethhdr *eth = (struct ethhdr *)(long)skb->data;
|
||||||
|
__u32 assigned_ip = bpf_htonl(ASSIGNED_ADDR_VETH1);
|
||||||
|
void *data_end = (void *)(long)skb->data_end;
|
||||||
|
struct udphdr *udph;
|
||||||
|
struct iphdr *iph;
|
||||||
|
__u32 index = 0;
|
||||||
|
int ret = 0;
|
||||||
|
int shrink;
|
||||||
|
__s64 csum;
|
||||||
|
|
||||||
|
if ((void *)eth + sizeof(*eth) > data_end) {
|
||||||
|
log_err(ret);
|
||||||
|
return TC_ACT_SHOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eth->h_proto != bpf_htons(ETH_P_IP))
|
||||||
|
return TC_ACT_OK;
|
||||||
|
|
||||||
|
iph = (struct iphdr *)(eth + 1);
|
||||||
|
if ((void *)iph + sizeof(*iph) > data_end) {
|
||||||
|
log_err(ret);
|
||||||
|
return TC_ACT_SHOT;
|
||||||
|
}
|
||||||
|
if (iph->protocol != IPPROTO_UDP)
|
||||||
|
return TC_ACT_OK;
|
||||||
|
|
||||||
|
udph = (struct udphdr *)(iph + 1);
|
||||||
|
if ((void *)udph + sizeof(*udph) > data_end) {
|
||||||
|
log_err(ret);
|
||||||
|
return TC_ACT_SHOT;
|
||||||
|
}
|
||||||
|
if (udph->dest != bpf_htons(VXLAN_UDP_PORT))
|
||||||
|
return TC_ACT_OK;
|
||||||
|
|
||||||
|
if (iph->daddr != assigned_ip) {
|
||||||
|
csum = bpf_csum_diff(&iph->daddr, sizeof(__u32), &assigned_ip,
|
||||||
|
sizeof(__u32), 0);
|
||||||
|
if (bpf_skb_store_bytes(skb, ETH_HLEN + offsetof(struct iphdr, daddr),
|
||||||
|
&assigned_ip, sizeof(__u32), 0) < 0) {
|
||||||
|
log_err(ret);
|
||||||
|
return TC_ACT_SHOT;
|
||||||
|
}
|
||||||
|
if (bpf_l3_csum_replace(skb, ETH_HLEN + offsetof(struct iphdr, check),
|
||||||
|
0, csum, 0) < 0) {
|
||||||
|
log_err(ret);
|
||||||
|
return TC_ACT_SHOT;
|
||||||
|
}
|
||||||
|
bpf_skb_change_type(skb, PACKET_HOST);
|
||||||
|
}
|
||||||
|
return TC_ACT_OK;
|
||||||
|
}
|
||||||
|
|
||||||
SEC("tc")
|
SEC("tc")
|
||||||
int ip6vxlan_set_tunnel_dst(struct __sk_buff *skb)
|
int ip6vxlan_set_tunnel_dst(struct __sk_buff *skb)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1604,11 +1604,8 @@ int main(int argc, char **argv)
|
||||||
struct prog_test_def *test = &prog_test_defs[i];
|
struct prog_test_def *test = &prog_test_defs[i];
|
||||||
|
|
||||||
test->test_num = i + 1;
|
test->test_num = i + 1;
|
||||||
if (should_run(&env.test_selector,
|
test->should_run = should_run(&env.test_selector,
|
||||||
test->test_num, test->test_name))
|
test->test_num, test->test_name);
|
||||||
test->should_run = true;
|
|
||||||
else
|
|
||||||
test->should_run = false;
|
|
||||||
|
|
||||||
if ((test->run_test == NULL && test->run_serial_test == NULL) ||
|
if ((test->run_test == NULL && test->run_serial_test == NULL) ||
|
||||||
(test->run_test != NULL && test->run_serial_test != NULL)) {
|
(test->run_test != NULL && test->run_serial_test != NULL)) {
|
||||||
|
|
|
@ -30,8 +30,7 @@ DEFAULT_COMMAND="./test_progs"
|
||||||
MOUNT_DIR="mnt"
|
MOUNT_DIR="mnt"
|
||||||
ROOTFS_IMAGE="root.img"
|
ROOTFS_IMAGE="root.img"
|
||||||
OUTPUT_DIR="$HOME/.bpf_selftests"
|
OUTPUT_DIR="$HOME/.bpf_selftests"
|
||||||
KCONFIG_URL="https://raw.githubusercontent.com/libbpf/libbpf/master/travis-ci/vmtest/configs/config-latest.${ARCH}"
|
KCONFIG_REL_PATHS=("tools/testing/selftests/bpf/config" "tools/testing/selftests/bpf/config.${ARCH}")
|
||||||
KCONFIG_API_URL="https://api.github.com/repos/libbpf/libbpf/contents/travis-ci/vmtest/configs/config-latest.${ARCH}"
|
|
||||||
INDEX_URL="https://raw.githubusercontent.com/libbpf/ci/master/INDEX"
|
INDEX_URL="https://raw.githubusercontent.com/libbpf/ci/master/INDEX"
|
||||||
NUM_COMPILE_JOBS="$(nproc)"
|
NUM_COMPILE_JOBS="$(nproc)"
|
||||||
LOG_FILE_BASE="$(date +"bpf_selftests.%Y-%m-%d_%H-%M-%S")"
|
LOG_FILE_BASE="$(date +"bpf_selftests.%Y-%m-%d_%H-%M-%S")"
|
||||||
|
@ -269,26 +268,42 @@ is_rel_path()
|
||||||
[[ ${path:0:1} != "/" ]]
|
[[ ${path:0:1} != "/" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_update_kconfig()
|
||||||
|
{
|
||||||
|
local kernel_checkout="$1"
|
||||||
|
local kconfig_file="$2"
|
||||||
|
|
||||||
|
rm -f "$kconfig_file" 2> /dev/null
|
||||||
|
|
||||||
|
for config in "${KCONFIG_REL_PATHS[@]}"; do
|
||||||
|
local kconfig_src="${kernel_checkout}/${config}"
|
||||||
|
cat "$kconfig_src" >> "$kconfig_file"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
update_kconfig()
|
update_kconfig()
|
||||||
{
|
{
|
||||||
local kconfig_file="$1"
|
local kernel_checkout="$1"
|
||||||
local update_command="curl -sLf ${KCONFIG_URL} -o ${kconfig_file}"
|
local kconfig_file="$2"
|
||||||
# Github does not return the "last-modified" header when retrieving the
|
|
||||||
# raw contents of the file. Use the API call to get the last-modified
|
|
||||||
# time of the kernel config and only update the config if it has been
|
|
||||||
# updated after the previously cached config was created. This avoids
|
|
||||||
# unnecessarily compiling the kernel and selftests.
|
|
||||||
if [[ -f "${kconfig_file}" ]]; then
|
|
||||||
local last_modified_date="$(curl -sL -D - "${KCONFIG_API_URL}" -o /dev/null | \
|
|
||||||
grep "last-modified" | awk -F ': ' '{print $2}')"
|
|
||||||
local remote_modified_timestamp="$(date -d "${last_modified_date}" +"%s")"
|
|
||||||
local local_creation_timestamp="$(stat -c %Y "${kconfig_file}")"
|
|
||||||
|
|
||||||
if [[ "${remote_modified_timestamp}" -gt "${local_creation_timestamp}" ]]; then
|
if [[ -f "${kconfig_file}" ]]; then
|
||||||
${update_command}
|
local local_modified="$(stat -c %Y "${kconfig_file}")"
|
||||||
fi
|
|
||||||
|
for config in "${KCONFIG_REL_PATHS[@]}"; do
|
||||||
|
local kconfig_src="${kernel_checkout}/${config}"
|
||||||
|
local src_modified="$(stat -c %Y "${kconfig_src}")"
|
||||||
|
# Only update the config if it has been updated after the
|
||||||
|
# previously cached config was created. This avoids
|
||||||
|
# unnecessarily compiling the kernel and selftests.
|
||||||
|
if [[ "${src_modified}" -gt "${local_modified}" ]]; then
|
||||||
|
do_update_kconfig "$kernel_checkout" "$kconfig_file"
|
||||||
|
# Once we have found one outdated configuration
|
||||||
|
# there is no need to check other ones.
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
else
|
else
|
||||||
${update_command}
|
do_update_kconfig "$kernel_checkout" "$kconfig_file"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,7 +387,7 @@ main()
|
||||||
|
|
||||||
mkdir -p "${OUTPUT_DIR}"
|
mkdir -p "${OUTPUT_DIR}"
|
||||||
mkdir -p "${mount_dir}"
|
mkdir -p "${mount_dir}"
|
||||||
update_kconfig "${kconfig_file}"
|
update_kconfig "${kernel_checkout}" "${kconfig_file}"
|
||||||
|
|
||||||
recompile_kernel "${kernel_checkout}" "${make_command}"
|
recompile_kernel "${kernel_checkout}" "${make_command}"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue