mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-05-02 18:17:50 -04:00
Merge tag 'net-6.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski:
"Including fixes from bluetooth, bpf, can and netfilter.
A little larger than usual but it's all fixes, no late features. It's
large partially because of timing, and partially because of follow ups
to stuff that got merged a week or so before the merge window and
wasn't as widely tested. Maybe the Bluetooth fixes are a little
alarming so we'll address that, but the rest seems okay and not scary.
Notably we're including a fix for the netfilter Kconfig [1], your WiFi
warning [2] and a bluetooth fix which should unblock syzbot [3].
Current release - regressions:
- Bluetooth:
- don't try to cancel uninitialized works [3]
- L2CAP: fix use-after-free caused by l2cap_chan_put
- tls: rx: fix device offload after recent rework
- devlink: fix UAF on failed reload and leftover locks in mlxsw
Current release - new code bugs:
- netfilter:
- flowtable: fix incorrect Kconfig dependencies [1]
- nf_tables: fix crash when nf_trace is enabled
- bpf:
- use proper target btf when exporting attach_btf_obj_id
- arm64: fixes for bpf trampoline support
- Bluetooth:
- ISO: unlock on error path in iso_sock_setsockopt()
- ISO: fix info leak in iso_sock_getsockopt()
- ISO: fix iso_sock_getsockopt for BT_DEFER_SETUP
- ISO: fix memory corruption on iso_pinfo.base
- ISO: fix not using the correct QoS
- hci_conn: fix updating ISO QoS PHY
- phy: dp83867: fix get nvmem cell fail
Previous releases - regressions:
- wifi: cfg80211: fix validating BSS pointers in
__cfg80211_connect_result [2]
- atm: bring back zatm uAPI after ATM had been removed
- properly fix old bug making bonding ARP monitor mode not being able
to work with software devices with lockless Tx
- tap: fix null-deref on skb->dev in dev_parse_header_protocol
- revert "net: usb: ax88179_178a needs FLAG_SEND_ZLP" it helps some
devices and breaks others
- netfilter:
- nf_tables: many fixes rejecting cross-object linking which may
lead to UAFs
- nf_tables: fix null deref due to zeroed list head
- nf_tables: validate variable length element extension
- bgmac: fix a BUG triggered by wrong bytes_compl
- bcmgenet: indicate MAC is in charge of PHY PM
Previous releases - always broken:
- bpf:
- fix bad pointer deref in bpf_sys_bpf() injected via test infra
- disallow non-builtin bpf programs calling the prog_run command
- don't reinit map value in prealloc_lru_pop
- fix UAFs during the read of map iterator fd
- fix invalidity check for values in sk local storage map
- reject sleepable program for non-resched map iterator
- mptcp:
- move subflow cleanup in mptcp_destroy_common()
- do not queue data on closed subflows
- virtio_net: fix memory leak inside XDP_TX with mergeable
- vsock: fix memory leak when multiple threads try to connect()
- rework sk_user_data sharing to prevent psock leaks
- geneve: fix TOS inheriting for ipv4
- tunnels & drivers: do not use RT_TOS for IPv6 flowlabel
- phy: c45 baset1: do not skip aneg configuration if clock role is
not specified
- rose: avoid overflow when /proc displays timer information
- x25: fix call timeouts in blocking connects
- can: mcp251x: fix race condition on receive interrupt
- can: j1939:
- replace user-reachable WARN_ON_ONCE() with netdev_warn_once()
- fix memory leak of skbs in j1939_session_destroy()
Misc:
- docs: bpf: clarify that many things are not uAPI
- seg6: initialize induction variable to first valid array index (to
silence clang vs objtool warning)
- can: ems_usb: fix clang 14's -Wunaligned-access warning"
* tag 'net-6.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (117 commits)
net: atm: bring back zatm uAPI
dpaa2-eth: trace the allocated address instead of page struct
net: add missing kdoc for struct genl_multicast_group::flags
nfp: fix use-after-free in area_cache_get()
MAINTAINERS: use my korg address for mt7601u
mlxsw: minimal: Fix deadlock in ports creation
bonding: fix reference count leak in balance-alb mode
net: usb: qmi_wwan: Add support for Cinterion MV32
bpf: Shut up kern_sys_bpf warning.
net/tls: Use RCU API to access tls_ctx->netdev
tls: rx: device: don't try to copy too much on detach
tls: rx: device: bound the frag walk
net_sched: cls_route: remove from list when handle is 0
selftests: forwarding: Fix failing tests with old libnet
net: refactor bpf_sk_reuseport_detach()
net: fix refcount bug in sk_psock_get (2)
selftests/bpf: Ensure sleepable program is rejected by hash map iter
selftests/bpf: Add write tests for sk local storage map iterator
selftests/bpf: Add tests for reading a dangling map iter fd
bpf: Only allow sleepable program for resched-able iterator
...
This commit is contained in:
@@ -649,6 +649,11 @@ static int bpf_iter_init_array_map(void *priv_data,
|
||||
seq_info->percpu_value_buf = value_buf;
|
||||
}
|
||||
|
||||
/* bpf_iter_attach_map() acquires a map uref, and the uref may be
|
||||
* released before or in the middle of iterating map elements, so
|
||||
* acquire an extra map uref for iterator.
|
||||
*/
|
||||
bpf_map_inc_with_uref(map);
|
||||
seq_info->map = map;
|
||||
return 0;
|
||||
}
|
||||
@@ -657,6 +662,7 @@ static void bpf_iter_fini_array_map(void *priv_data)
|
||||
{
|
||||
struct bpf_iter_seq_array_map_info *seq_info = priv_data;
|
||||
|
||||
bpf_map_put_with_uref(seq_info->map);
|
||||
kfree(seq_info->percpu_value_buf);
|
||||
}
|
||||
|
||||
|
||||
@@ -68,13 +68,18 @@ static void bpf_iter_done_stop(struct seq_file *seq)
|
||||
iter_priv->done_stop = true;
|
||||
}
|
||||
|
||||
static inline bool bpf_iter_target_support_resched(const struct bpf_iter_target_info *tinfo)
|
||||
{
|
||||
return tinfo->reg_info->feature & BPF_ITER_RESCHED;
|
||||
}
|
||||
|
||||
static bool bpf_iter_support_resched(struct seq_file *seq)
|
||||
{
|
||||
struct bpf_iter_priv_data *iter_priv;
|
||||
|
||||
iter_priv = container_of(seq->private, struct bpf_iter_priv_data,
|
||||
target_private);
|
||||
return iter_priv->tinfo->reg_info->feature & BPF_ITER_RESCHED;
|
||||
return bpf_iter_target_support_resched(iter_priv->tinfo);
|
||||
}
|
||||
|
||||
/* maximum visited objects before bailing out */
|
||||
@@ -537,6 +542,10 @@ int bpf_iter_link_attach(const union bpf_attr *attr, bpfptr_t uattr,
|
||||
if (!tinfo)
|
||||
return -ENOENT;
|
||||
|
||||
/* Only allow sleepable program for resched-able iterator */
|
||||
if (prog->aux->sleepable && !bpf_iter_target_support_resched(tinfo))
|
||||
return -EINVAL;
|
||||
|
||||
link = kzalloc(sizeof(*link), GFP_USER | __GFP_NOWARN);
|
||||
if (!link)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -311,12 +311,8 @@ static struct htab_elem *prealloc_lru_pop(struct bpf_htab *htab, void *key,
|
||||
struct htab_elem *l;
|
||||
|
||||
if (node) {
|
||||
u32 key_size = htab->map.key_size;
|
||||
|
||||
l = container_of(node, struct htab_elem, lru_node);
|
||||
memcpy(l->key, key, key_size);
|
||||
check_and_init_map_value(&htab->map,
|
||||
l->key + round_up(key_size, 8));
|
||||
memcpy(l->key, key, htab->map.key_size);
|
||||
return l;
|
||||
}
|
||||
|
||||
@@ -2064,6 +2060,7 @@ static int bpf_iter_init_hash_map(void *priv_data,
|
||||
seq_info->percpu_value_buf = value_buf;
|
||||
}
|
||||
|
||||
bpf_map_inc_with_uref(map);
|
||||
seq_info->map = map;
|
||||
seq_info->htab = container_of(map, struct bpf_htab, map);
|
||||
return 0;
|
||||
@@ -2073,6 +2070,7 @@ static void bpf_iter_fini_hash_map(void *priv_data)
|
||||
{
|
||||
struct bpf_iter_seq_hash_map_info *seq_info = priv_data;
|
||||
|
||||
bpf_map_put_with_uref(seq_info->map);
|
||||
kfree(seq_info->percpu_value_buf);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,14 +21,11 @@ static struct reuseport_array *reuseport_array(struct bpf_map *map)
|
||||
/* The caller must hold the reuseport_lock */
|
||||
void bpf_sk_reuseport_detach(struct sock *sk)
|
||||
{
|
||||
uintptr_t sk_user_data;
|
||||
struct sock __rcu **socks;
|
||||
|
||||
write_lock_bh(&sk->sk_callback_lock);
|
||||
sk_user_data = (uintptr_t)sk->sk_user_data;
|
||||
if (sk_user_data & SK_USER_DATA_BPF) {
|
||||
struct sock __rcu **socks;
|
||||
|
||||
socks = (void *)(sk_user_data & SK_USER_DATA_PTRMASK);
|
||||
socks = __rcu_dereference_sk_user_data_with_flags(sk, SK_USER_DATA_BPF);
|
||||
if (socks) {
|
||||
WRITE_ONCE(sk->sk_user_data, NULL);
|
||||
/*
|
||||
* Do not move this NULL assignment outside of
|
||||
|
||||
@@ -3886,6 +3886,7 @@ static int bpf_prog_get_info_by_fd(struct file *file,
|
||||
union bpf_attr __user *uattr)
|
||||
{
|
||||
struct bpf_prog_info __user *uinfo = u64_to_user_ptr(attr->info.info);
|
||||
struct btf *attach_btf = bpf_prog_get_target_btf(prog);
|
||||
struct bpf_prog_info info;
|
||||
u32 info_len = attr->info.info_len;
|
||||
struct bpf_prog_kstats stats;
|
||||
@@ -4088,10 +4089,8 @@ static int bpf_prog_get_info_by_fd(struct file *file,
|
||||
if (prog->aux->btf)
|
||||
info.btf_id = btf_obj_id(prog->aux->btf);
|
||||
info.attach_btf_id = prog->aux->attach_btf_id;
|
||||
if (prog->aux->attach_btf)
|
||||
info.attach_btf_obj_id = btf_obj_id(prog->aux->attach_btf);
|
||||
else if (prog->aux->dst_prog)
|
||||
info.attach_btf_obj_id = btf_obj_id(prog->aux->dst_prog->aux->attach_btf);
|
||||
if (attach_btf)
|
||||
info.attach_btf_obj_id = btf_obj_id(attach_btf);
|
||||
|
||||
ulen = info.nr_func_info;
|
||||
info.nr_func_info = prog->aux->func_info_cnt;
|
||||
@@ -5072,9 +5071,6 @@ static bool syscall_prog_is_valid_access(int off, int size,
|
||||
|
||||
BPF_CALL_3(bpf_sys_bpf, int, cmd, union bpf_attr *, attr, u32, attr_size)
|
||||
{
|
||||
struct bpf_prog * __maybe_unused prog;
|
||||
struct bpf_tramp_run_ctx __maybe_unused run_ctx;
|
||||
|
||||
switch (cmd) {
|
||||
case BPF_MAP_CREATE:
|
||||
case BPF_MAP_UPDATE_ELEM:
|
||||
@@ -5084,6 +5080,26 @@ BPF_CALL_3(bpf_sys_bpf, int, cmd, union bpf_attr *, attr, u32, attr_size)
|
||||
case BPF_LINK_CREATE:
|
||||
case BPF_RAW_TRACEPOINT_OPEN:
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
return __sys_bpf(cmd, KERNEL_BPFPTR(attr), attr_size);
|
||||
}
|
||||
|
||||
|
||||
/* To shut up -Wmissing-prototypes.
|
||||
* This function is used by the kernel light skeleton
|
||||
* to load bpf programs when modules are loaded or during kernel boot.
|
||||
* See tools/lib/bpf/skel_internal.h
|
||||
*/
|
||||
int kern_sys_bpf(int cmd, union bpf_attr *attr, unsigned int size);
|
||||
|
||||
int kern_sys_bpf(int cmd, union bpf_attr *attr, unsigned int size)
|
||||
{
|
||||
struct bpf_prog * __maybe_unused prog;
|
||||
struct bpf_tramp_run_ctx __maybe_unused run_ctx;
|
||||
|
||||
switch (cmd) {
|
||||
#ifdef CONFIG_BPF_JIT /* __bpf_prog_enter_sleepable used by trampoline and JIT */
|
||||
case BPF_PROG_TEST_RUN:
|
||||
if (attr->test.data_in || attr->test.data_out ||
|
||||
@@ -5114,11 +5130,10 @@ BPF_CALL_3(bpf_sys_bpf, int, cmd, union bpf_attr *, attr, u32, attr_size)
|
||||
return 0;
|
||||
#endif
|
||||
default:
|
||||
return -EINVAL;
|
||||
return ____bpf_sys_bpf(cmd, attr, size);
|
||||
}
|
||||
return __sys_bpf(cmd, KERNEL_BPFPTR(attr), attr_size);
|
||||
}
|
||||
EXPORT_SYMBOL(bpf_sys_bpf);
|
||||
EXPORT_SYMBOL(kern_sys_bpf);
|
||||
|
||||
static const struct bpf_func_proto bpf_sys_bpf_proto = {
|
||||
.func = bpf_sys_bpf,
|
||||
|
||||
@@ -841,7 +841,10 @@ void bpf_trampoline_put(struct bpf_trampoline *tr)
|
||||
* multiple rcu callbacks.
|
||||
*/
|
||||
hlist_del(&tr->hlist);
|
||||
kfree(tr->fops);
|
||||
if (tr->fops) {
|
||||
ftrace_free_filter(tr->fops);
|
||||
kfree(tr->fops);
|
||||
}
|
||||
kfree(tr);
|
||||
out:
|
||||
mutex_unlock(&trampoline_mutex);
|
||||
|
||||
Reference in New Issue
Block a user