Commit graph

874,224 commits

Author SHA1 Message Date
Todd Kjos
d080cb7f9e ANDROID: update abi with unbindable_ports sysctl
Leaf changes summary: 4 artifacts changed (2 filtered out)
Changed leaf types summary: 2 (2 filtered out) leaf types changed
Removed/Changed/Added functions summary: 0 Removed, 1 Changed, 0 Added function
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

1 function with some sub-type change:

'struct net at net_namespace.h:54:1' changed:
  type size hasn't changed
  there are data member changes:
   type 'struct netns_ipv4' of 'net::ipv4' changed:
     type size hasn't changed
     1 data member insertion:
       'unsigned long int* netns_ipv4::sysctl_local_unbindable_ports', at offset 6464 (in bits) at ipv4.h:200:1
     there are data member changes:
      'int netns_ipv4::sysctl_ip_prot_sock' offset changed from 6464 to 6528 (in bits) (by +64 bits)
      'fib_notifier_ops* netns_ipv4::notifier_ops' offset changed from 6528 to 6592 (in bits) (by +64 bits)
      'unsigned int netns_ipv4::fib_seq' offset changed from 6592 to 6656 (in bits) (by +64 bits)
      'fib_notifier_ops* netns_ipv4::ipmr_notifier_ops' offset changed from 6656 to 6720 (in bits) (by +64 bits)
      'unsigned int netns_ipv4::ipmr_seq' offset changed from 6720 to 6784 (in bits) (by +64 bits)
      'atomic_t netns_ipv4::rt_genid' offset changed from 6752 to 6816 (in bits) (by +64 bits)
      'siphash_key_t netns_ipv4::ip_id_key' offset changed from 6784 to 6848 (in bits) (by +64 bits)

     1565 impacted interfaces:
       Qdisc_ops bfifo_qdisc_ops
       const Qdisc_ops* default_qdisc_ops
       const proto_ops inet_dgram_ops
       const proto_ops inet_stream_ops
       const inet_connection_sock_af_ops ipv4_specific
       const ipv6_bpf_stub* ipv6_bpf_stub
       const ipv6_stub* ipv6_stub
       const nf_ipv6_ops* nf_ipv6_ops
       Qdisc noop_qdisc
       Qdisc_ops pfifo_fast_ops
       Qdisc_ops pfifo_qdisc_ops
       function sk_buff* __cfg80211_alloc_event_skb(wiphy*, wireless_dev*, nl80211_commands, nl80211_attrs, unsigned int, int, int, gfp_t)
       function sk_buff* __cfg80211_alloc_reply_skb(wiphy*, nl80211_commands, nl80211_attrs, int)
       function int __cgroup_bpf_run_filter_getsockopt(sock*, int, int, char*, int*, int, int)
       function int __cgroup_bpf_run_filter_setsockopt(sock*, int*, int*, char*, int*, char**)
       function int __cgroup_bpf_run_filter_sk(sock*, bpf_attach_type)
       function int __cgroup_bpf_run_filter_skb(sock*, sk_buff*, bpf_attach_type)
       function int __cgroup_bpf_run_filter_sock_addr(sock*, sockaddr*, bpf_attach_type, void*)
       function int __cgroup_bpf_run_filter_sock_ops(sock*, bpf_sock_ops_kern*, bpf_attach_type)
       function int __dev_forward_skb(net_device*, sk_buff*)
       function net_device* __dev_get_by_flags(net*, unsigned short int, unsigned short int)
       function net_device* __dev_get_by_index(net*, int)
       function net_device* __dev_get_by_name(net*, const char*)
       function net_device* __dev_getfirstbyhwtype(net*, unsigned short int)
       function void __dev_remove_pack(packet_type*)
       function int __dev_set_mtu(net_device*, int)
       function void __dst_destroy_metrics_generic(dst_entry*, unsigned long int)
       function int __ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)
       function int __fib_lookup(net*, flowi4*, fib_result*, unsigned int)
       function ip6_flowlabel* __fl6_sock_lookup(sock*, __be32)
       function int __hw_addr_ref_sync_dev(netdev_hw_addr_list*, net_device*, void ()*, void ()*)
       function void __hw_addr_ref_unsync_dev(netdev_hw_addr_list*, net_device*, void ()*)
       function int __hw_addr_sync_dev(netdev_hw_addr_list*, net_device*, void ()*, void ()*)
       function void __hw_addr_unsync_dev(netdev_hw_addr_list*, net_device*, void ()*)
       function void __ieee80211_schedule_txq(ieee80211_hw*, ieee80211_txq*, bool)
       function sock* __inet6_lookup_established(net*, inet_hashinfo*, const in6_addr*, const __be16, const in6_addr*, const u16, const int, const int)
       function int __inet_hash(sock*, sock*)
       function int __inet_inherit_port(const sock*, sock*)
       function sock* __inet_lookup_established(net*, inet_hashinfo*, const __be32, const __be16, const __be32, const u16, const int, const int)
       function sock* __inet_lookup_listener(net*, inet_hashinfo*, sk_buff*, int, const __be32, __be16, const __be32, const unsigned short int, const int, const int)
       function int __inet_stream_connect(socket*, sockaddr*, int, int, int)
       function int __ip4_datagram_connect(sock*, sockaddr*, int)
       function int __ip6_datagram_connect(sock*, sockaddr*, int)
       function int __ip6_local_out(net*, sock*, sk_buff*)
       function net_device* __ip_dev_find(net*, __be32, bool)
       function void __ip_mc_dec_group(in_device*, __be32, gfp_t)
       function void __ip_mc_inc_group(in_device*, __be32, gfp_t)
       function int __ip_options_compile(net*, ip_options*, sk_buff*, __be32*)
       function int __ip_queue_xmit(sock*, sk_buff*, flowi*, __u8)
       function void __ip_select_ident(net*, iphdr*, int)
       function int __ip_tunnel_change_mtu(net_device*, int, bool)
       function void __l2tp_session_unhash(l2tp_session*)
       function sk_buff* __napi_alloc_skb(napi_struct*, unsigned int, gfp_t)
       function void __napi_schedule(napi_struct*)
       function void __napi_schedule_irqoff(napi_struct*)
       function neighbour* __neigh_create(neigh_table*, void*, net_device*, bool)
       function int __neigh_event_send(neighbour*, sk_buff*)
       function void __neigh_for_each_release(neigh_table*, void ()*)
       function void __neigh_set_probe_once(neighbour*)
       function sk_buff* __netdev_alloc_skb(net_device*, unsigned int, gfp_t)
       function void __netif_schedule(Qdisc*)
       function int __netif_set_xps_queue(net_device*, const unsigned long int*, u16, bool)
       function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*)
       function sock* __netlink_kernel_create(net*, int, module*, netlink_kernel_cfg*)
       function bool __netlink_ns_capable(const netlink_skb_parms*, user_namespace*, int)
       function nf_conntrack_expect* __nf_ct_expect_find(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)
       function int __nf_ip6_route(net*, dst_entry**, flowi*, bool)
       function int __phy_modify(phy_device*, u32, u16, u16)
       function int __phy_modify_changed(phy_device*, u32, u16, u16)
       function int __phy_modify_mmd(phy_device*, int, u32, u16, u16)
       function int __phy_modify_mmd_changed(phy_device*, int, u32, u16, u16)
       function int __phy_read_mmd(phy_device*, int, u32)
       function int __phy_write_mmd(phy_device*, int, u32, u16)
       function pneigh_entry* __pneigh_lookup(neigh_table*, net*, void*, net_device*)
       function sock* __raw_v4_lookup(net*, sock*, unsigned short int, __be32, __be32, int, int)
       function sock* __raw_v6_lookup(net*, sock*, unsigned short int, const in6_addr*, const in6_addr*, int, int)
       function int __rtnl_link_register(rtnl_link_ops*)
       function void __rtnl_link_unregister(rtnl_link_ops*)
       function int __scm_send(socket*, msghdr*, scm_cookie*)
       function int __sk_backlog_rcv(sock*, sk_buff*)
       function dst_entry* __sk_dst_check(sock*, u32)
       function int __sk_mem_raise_allocated(sock*, int, int, int)
       function void __sk_mem_reclaim(sock*, int)
       function void __sk_mem_reduce_allocated(sock*, int)
       function int __sk_mem_schedule(sock*, int, int)
       function int __sk_queue_drop_skb(sock*, sk_buff_head*, sk_buff*, unsigned int, void ()*)
       function int __sk_receive_skb(sock*, sk_buff*, const int, unsigned int, bool)
       function bool __skb_flow_dissect(const net*, const sk_buff*, flow_dissector*, void*, void*, __be16, int, int, unsigned int)
       function void __skb_free_datagram_locked(sock*, sk_buff*, int)
       function sk_buff* __skb_recv_datagram(sock*, unsigned int, void ()*, int*, int*)
       function sk_buff* __skb_recv_udp(sock*, unsigned int, int, int*, int*)
       function sk_buff* __skb_try_recv_datagram(sock*, unsigned int, void ()*, int*, int*, sk_buff**)
       function void __skb_tstamp_tx(sk_buff*, skb_shared_hwtstamps*, sock*, int)
       function int __skb_wait_for_more_packets(sock*, int*, long int*, const sk_buff*)
       function int __sock_cmsg_send(sock*, msghdr*, cmsghdr*, sockcm_cookie*)
       function int __sock_create(net*, int, int, int, socket**, int)
       function int __sock_queue_rcv_skb(sock*, sk_buff*)
       function void __sock_recv_timestamp(msghdr*, sock*, sk_buff*)
       function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*)
       function void __sock_recv_wifi_status(msghdr*, sock*, sk_buff*)
       function int __tcf_em_tree_match(sk_buff*, tcf_ematch_tree*, tcf_pkt_info*)
       function int __tcf_idr_release(tc_action*, bool, bool)
       function void __tcp_send_ack(sock*, u32)
       function sock* __udp4_lib_lookup(net*, __be32, __be16, __be32, __be16, int, int, udp_table*, sk_buff*)
       function sock* __udp6_lib_lookup(net*, const in6_addr*, __be16, const in6_addr*, __be16, int, int, udp_table*, sk_buff*)
       function int __udp_disconnect(sock*, int)
       function int __udp_enqueue_schedule_skb(sock*, sk_buff*)
       function int __vsock_core_init(const vsock_transport*, module*)
       function sock* __vsock_create(net*, socket*, sock*, gfp_t, unsigned short int, int)
       function dst_entry* __xfrm_dst_lookup(net*, int, int, const xfrm_address_t*, const xfrm_address_t*, int, u32)
       function int __xfrm_init_state(xfrm_state*, bool, bool)
       function int __xfrm_policy_check(sock*, int, sk_buff*, unsigned short int)
       function int __xfrm_state_delete(xfrm_state*)
       function void __xfrm_state_destroy(xfrm_state*, bool)
       function int __zerocopy_sg_from_iter(sock*, sk_buff*, iov_iter*, size_t)
       function void addrconf_add_linklocal(inet6_dev*, const in6_addr*, u32)
       function int addrconf_prefix_rcv_add_addr(net*, net_device*, const prefix_info*, inet6_dev*, const in6_addr*, int, u32, bool, bool, __u32, u32)
       function sk_buff* alloc_can_err_skb(net_device*, can_frame**)
       function sk_buff* alloc_can_skb(net_device*, can_frame**)
       function net_device* alloc_candev_mqs(int, unsigned int, unsigned int, unsigned int)
       function sk_buff* alloc_canfd_skb(net_device*, canfd_frame**)
       function net_device* alloc_etherdev_mqs(int, unsigned int, unsigned int)
       function net_device* alloc_netdev_mqs(int, const char*, unsigned char, void ()*, unsigned int, unsigned int)
       function bool arch_bpf_jit_check_func(const bpf_prog*)
       function sk_buff* arp_create(int, int, __be32, net_device*, __be32, const unsigned char*, const unsigned char*, const unsigned char*)
       function void arp_send(int, int, __be32, net_device*, __be32, const unsigned char*, const unsigned char*, const unsigned char*)
       function unsigned int arpt_do_table(sk_buff*, const nf_hook_state*, xt_table*)
       function int arpt_register_table(net*, const xt_table*, const arpt_replace*, const nf_hook_ops*, xt_table**)
       function void arpt_unregister_table(net*, xt_table*, const nf_hook_ops*)
       function bpf_offload_dev* bpf_offload_dev_create(const bpf_prog_offload_ops*, void*)
       function bool bpf_offload_dev_match(bpf_prog*, net_device*)
       function int bpf_offload_dev_netdev_register(bpf_offload_dev*, net_device*)
       function void bpf_offload_dev_netdev_unregister(bpf_offload_dev*, net_device*)
       function bpf_prog* bpf_prog_add(bpf_prog*, int)
       function bpf_prog* bpf_prog_alloc(unsigned int, gfp_t)
       function int bpf_prog_create(bpf_prog**, sock_fprog_kern*)
       function int bpf_prog_create_from_user(bpf_prog**, sock_fprog*, bpf_aux_classic_check_t, bool)
       function void bpf_prog_destroy(bpf_prog*)
       function void bpf_prog_free(bpf_prog*)
       function bpf_prog* bpf_prog_get_type_dev(u32, bpf_prog_type, bool)
       function bpf_prog* bpf_prog_get_type_path(const char*, bpf_prog_type)
       function bpf_prog* bpf_prog_inc(bpf_prog*)
       function bpf_prog* bpf_prog_inc_not_zero(bpf_prog*)
       function void bpf_prog_put(bpf_prog*)
       function bpf_prog* bpf_prog_select_runtime(bpf_prog*, int*)
       function void bpf_prog_sub(bpf_prog*, int)
       function void bpf_trace_run1(bpf_prog*, u64)
       function void bpf_trace_run10(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)
       function void bpf_trace_run11(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)
       function void bpf_trace_run12(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)
       function void bpf_trace_run2(bpf_prog*, u64, u64)
       function void bpf_trace_run3(bpf_prog*, u64, u64, u64)
       function void bpf_trace_run4(bpf_prog*, u64, u64, u64, u64)
       function void bpf_trace_run5(bpf_prog*, u64, u64, u64, u64, u64)
       function void bpf_trace_run6(bpf_prog*, u64, u64, u64, u64, u64, u64)
       function void bpf_trace_run7(bpf_prog*, u64, u64, u64, u64, u64, u64, u64)
       function void bpf_trace_run8(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64)
       function void bpf_trace_run9(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64)
       function void bpf_verifier_log_write(bpf_verifier_env*, const char*, ...)
       function int br_dev_queue_push_xmit(net*, sock*, sk_buff*)
       function void br_fdb_clear_offload(const net_device*, u16)
       function net_device* br_fdb_find_port(const net_device*, const unsigned char*, __u16)
       function void br_forward(const net_bridge_port*, sk_buff*, bool, bool)
       function int br_forward_finish(net*, sock*, sk_buff*)
       function int br_handle_frame_finish(net*, sock*, sk_buff*)
       function int br_ip6_fragment(net*, sock*, sk_buff*, nf_bridge_frag_data*, void ()*)
       function bool br_multicast_enabled(const net_device*)
       function bool br_multicast_has_querier_adjacent(net_device*, int)
       function bool br_multicast_has_querier_anywhere(net_device*, int)
       function int br_multicast_list_adjacent(net_device*, list_head*)
       function bool br_multicast_router(const net_device*)
       function bool br_port_flag_is_set(const net_device*, unsigned long int)
       function void brioctl_set(void ()*)
       function sock* bt_accept_dequeue(sock*, socket*)
       function void bt_accept_enqueue(sock*, sock*, bool)
       function void bt_accept_unlink(sock*)
       function void bt_procfs_cleanup(net*, const char*)
       function int bt_procfs_init(net*, const char*, bt_sock_list*, void ()*)
       function int bt_sock_ioctl(socket*, unsigned int, unsigned long int)
       function void bt_sock_link(bt_sock_list*, sock*)
       function __poll_t bt_sock_poll(file*, socket*, poll_table*)
       function void bt_sock_reclassify_lock(sock*, int)
       function int bt_sock_recvmsg(socket*, msghdr*, size_t, int)
       function int bt_sock_register(int, const net_proto_family*)
       function int bt_sock_stream_recvmsg(socket*, msghdr*, size_t, int)
       function void bt_sock_unlink(bt_sock_list*, sock*)
       function int bt_sock_wait_ready(sock*, unsigned long int)
       function int bt_sock_wait_state(sock*, int, unsigned long int)
       function int call_fib_notifier(notifier_block*, net*, fib_event_type, fib_notifier_info*)
       function int call_fib_notifiers(net*, fib_event_type, fib_notifier_info*)
       function int call_netdevice_notifiers(unsigned long int, net_device*)
       function void can_bus_off(net_device*)
       function int can_change_mtu(net_device*, int)
       function void can_change_state(net_device*, can_frame*, can_state, can_state)
       function void can_free_echo_skb(net_device*, unsigned int)
       function unsigned int can_get_echo_skb(net_device*, unsigned int)
       function int can_proto_register(const can_proto*)
       function void can_proto_unregister(const can_proto*)
       function void can_put_echo_skb(sk_buff*, net_device*, unsigned int)
       function int can_rx_offload_add_fifo(net_device*, can_rx_offload*, unsigned int)
       function int can_rx_offload_add_timestamp(net_device*, can_rx_offload*)
       function void can_rx_offload_del(can_rx_offload*)
       function void can_rx_offload_enable(can_rx_offload*)
       function unsigned int can_rx_offload_get_echo_skb(can_rx_offload*, unsigned int, u32)
       function int can_rx_offload_irq_offload_fifo(can_rx_offload*)
       function int can_rx_offload_irq_offload_timestamp(can_rx_offload*, u64)
       function int can_rx_offload_queue_sorted(can_rx_offload*, sk_buff*, u32)
       function int can_rx_offload_queue_tail(can_rx_offload*, sk_buff*)
       function void can_rx_offload_reset(can_rx_offload*)
       function int can_rx_register(net*, net_device*, canid_t, canid_t, void ()*, void*, char*, sock*)
       function void can_rx_unregister(net*, net_device*, canid_t, canid_t, void ()*, void*)
       function void can_sock_destruct(sock*)
       function void cfg80211_abandon_assoc(net_device*, cfg80211_bss*)
       function void cfg80211_assoc_timeout(net_device*, cfg80211_bss*)
       function void cfg80211_auth_timeout(net_device*, const u8*)
       function void cfg80211_bss_iter(wiphy*, cfg80211_chan_def*, void ()*, void*)
       function void cfg80211_cac_event(net_device*, const cfg80211_chan_def*, nl80211_radar_event, gfp_t)
       function void cfg80211_ch_switch_notify(net_device*, cfg80211_chan_def*)
       function void cfg80211_ch_switch_started_notify(net_device*, cfg80211_chan_def*, u8)
       function int cfg80211_chandef_dfs_required(wiphy*, const cfg80211_chan_def*, nl80211_iftype)
       function bool cfg80211_chandef_usable(wiphy*, const cfg80211_chan_def*, u32)
       function int cfg80211_check_combinations(wiphy*, iface_combination_params*)
       function int cfg80211_check_station_change(wiphy*, station_parameters*, cfg80211_station_type)
       function void cfg80211_conn_failed(net_device*, const u8*, nl80211_connect_failed_reason, gfp_t)
       function void cfg80211_connect_done(net_device*, cfg80211_connect_resp_params*, gfp_t)
       function void cfg80211_cqm_beacon_loss_notify(net_device*, gfp_t)
       function void cfg80211_cqm_pktloss_notify(net_device*, const u8*, u32, gfp_t)
       function void cfg80211_cqm_rssi_notify(net_device*, nl80211_cqm_rssi_threshold_event, s32, gfp_t)
       function void cfg80211_cqm_txe_notify(net_device*, const u8*, u32, u32, u32, gfp_t)
       function void cfg80211_crit_proto_stopped(wireless_dev*, gfp_t)
       function void cfg80211_del_sta_sinfo(net_device*, const u8*, station_info*, gfp_t)
       function void cfg80211_disconnected(net_device*, u16, const u8*, size_t, bool, gfp_t)
       function int cfg80211_external_auth_request(net_device*, cfg80211_external_auth_params*, gfp_t)
       function void cfg80211_ft_event(net_device*, cfg80211_ft_event_params*)
       function cfg80211_bss* cfg80211_get_bss(wiphy*, ieee80211_channel*, const u8*, const u8*, size_t, ieee80211_bss_type, ieee80211_privacy)
       function void cfg80211_get_drvinfo(net_device*, ethtool_drvinfo*)
       function int cfg80211_get_station(net_device*, const u8*, station_info*)
       function void cfg80211_gtk_rekey_notify(net_device*, const u8*, const u8*, gfp_t)
       function void cfg80211_ibss_joined(net_device*, const u8*, ieee80211_channel*, gfp_t)
       function bool cfg80211_iftype_allowed(wiphy*, nl80211_iftype, bool, u8)
       function cfg80211_bss* cfg80211_inform_bss_data(wiphy*, cfg80211_inform_bss*, cfg80211_bss_frame_type, const u8*, u64, u16, u16, const u8*, size_t, gfp_t)
       function cfg80211_bss* cfg80211_inform_bss_frame_data(wiphy*, cfg80211_inform_bss*, ieee80211_mgmt*, size_t, gfp_t)
       function int cfg80211_iter_combinations(wiphy*, iface_combination_params*, void ()*, void*)
       function void cfg80211_mgmt_tx_status(wireless_dev*, u64, const u8*, size_t, bool, gfp_t)
       function void cfg80211_michael_mic_failure(net_device*, const u8*, nl80211_key_type, int, const u8*, gfp_t)
       function void cfg80211_nan_func_terminated(wireless_dev*, u8, nl80211_nan_func_term_reason, u64, gfp_t)
       function void cfg80211_nan_match(wireless_dev*, cfg80211_nan_match_params*, gfp_t)
       function void cfg80211_new_sta(net_device*, const u8*, station_info*, gfp_t)
       function void cfg80211_notify_new_peer_candidate(net_device*, const u8*, const u8*, u8, int, gfp_t)
       function void cfg80211_pmksa_candidate_notify(net_device*, int, const u8*, bool, gfp_t)
       function void cfg80211_pmsr_complete(wireless_dev*, cfg80211_pmsr_request*, gfp_t)
       function void cfg80211_pmsr_report(wireless_dev*, cfg80211_pmsr_request*, cfg80211_pmsr_result*, gfp_t)
       function void cfg80211_port_authorized(net_device*, const u8*, gfp_t)
       function void cfg80211_probe_status(net_device*, const u8*, u64, bool, s32, bool, gfp_t)
       function void cfg80211_put_bss(wiphy*, cfg80211_bss*)
       function void cfg80211_radar_event(wiphy*, cfg80211_chan_def*, gfp_t)
       function void cfg80211_ready_on_channel(wireless_dev*, u64, ieee80211_channel*, unsigned int, gfp_t)
       function void cfg80211_ref_bss(wiphy*, cfg80211_bss*)
       function bool cfg80211_reg_can_beacon(wiphy*, cfg80211_chan_def*, nl80211_iftype)
       function bool cfg80211_reg_can_beacon_relax(wiphy*, cfg80211_chan_def*, nl80211_iftype)
       function void cfg80211_remain_on_channel_expired(wireless_dev*, u64, ieee80211_channel*, gfp_t)
       function void cfg80211_report_obss_beacon(wiphy*, const u8*, size_t, int, int)
       function void cfg80211_report_wowlan_wakeup(wireless_dev*, cfg80211_wowlan_wakeup*, gfp_t)
       function void cfg80211_roamed(net_device*, cfg80211_roam_info*, gfp_t)
       function void cfg80211_rx_assoc_resp(net_device*, cfg80211_bss*, const u8*, size_t, int, const u8*, size_t)
       function bool cfg80211_rx_control_port(net_device*, sk_buff*, bool)
       function bool cfg80211_rx_mgmt(wireless_dev*, int, int, const u8*, size_t, u32)
       function void cfg80211_rx_mlme_mgmt(net_device*, const u8*, size_t)
       function bool cfg80211_rx_spurious_frame(net_device*, const u8*, gfp_t)
       function bool cfg80211_rx_unexpected_4addr_frame(net_device*, const u8*, gfp_t)
       function void cfg80211_rx_unprot_mlme_mgmt(net_device*, const u8*, size_t)
       function void cfg80211_scan_done(cfg80211_scan_request*, cfg80211_scan_info*)
       function void cfg80211_sched_scan_results(wiphy*, u64)
       function void cfg80211_sched_scan_stopped(wiphy*, u64)
       function void cfg80211_sched_scan_stopped_rtnl(wiphy*, u64)
       function void cfg80211_send_layer2_update(net_device*, const u8*)
       function void cfg80211_shutdown_all_interfaces(wiphy*)
       function void cfg80211_sta_opmode_change_notify(net_device*, const u8*, sta_opmode_info*, gfp_t)
       function void cfg80211_stop_iface(wiphy*, wireless_dev*, gfp_t)
       function void cfg80211_tdls_oper_request(net_device*, const u8*, nl80211_tdls_operation, u16, gfp_t)
       function void cfg80211_tx_mgmt_expired(wireless_dev*, u64, ieee80211_channel*, gfp_t)
       function void cfg80211_tx_mlme_mgmt(net_device*, const u8*, size_t)
       function void cfg80211_unlink_bss(wiphy*, cfg80211_bss*)
       function void cfg80211_unregister_wdev(wireless_dev*)
       function void cfg80211_update_owe_info_event(net_device*, cfg80211_update_owe_info*, gfp_t)
       function unsigned int cfg80211_vendor_cmd_get_sender(wiphy*)
       function void close_candev(net_device*)
       function int compat_ip_getsockopt(sock*, int, int, char*, int*)
       function int compat_ip_setsockopt(sock*, int, int, char*, unsigned int)
       function int compat_ipv6_getsockopt(sock*, int, int, char*, int*)
       function int compat_ipv6_setsockopt(sock*, int, int, char*, unsigned int)
       function int compat_mc_getsockopt(sock*, int, int, char*, int*, void ()*)
       function int compat_mc_setsockopt(sock*, int, int, char*, unsigned int, void ()*)
       function int compat_nf_getsockopt(sock*, u_int8_t, int, char*, int*)
       function int compat_nf_setsockopt(sock*, u_int8_t, int, char*, unsigned int)
       function int compat_sock_common_getsockopt(socket*, int, int, char*, int*)
       function int compat_sock_common_setsockopt(socket*, int, int, char*, unsigned int)
       function int compat_tcp_getsockopt(sock*, int, int, char*, int*)
       function int compat_tcp_setsockopt(sock*, int, int, char*, unsigned int)
       function __poll_t datagram_poll(file*, socket*, poll_table*)
       function void dev_activate(net_device*)
       function void dev_add_pack(packet_type*)
       function int dev_addr_add(net_device*, const unsigned char*, unsigned char)
       function int dev_addr_del(net_device*, const unsigned char*, unsigned char)
       function void dev_addr_flush(net_device*)
       function int dev_addr_init(net_device*)
       function int dev_alloc_name(net_device*, const char*)
       function int dev_change_carrier(net_device*, bool)
       function int dev_change_flags(net_device*, unsigned int, netlink_ext_ack*)
       function int dev_change_net_namespace(net_device*, net*, const char*)
       function int dev_change_proto_down(net_device*, bool)
       function int dev_change_proto_down_generic(net_device*, bool)
       function void dev_close(net_device*)
       function void dev_deactivate(net_device*)
       function void dev_disable_lro(net_device*)
       function int dev_fill_metadata_dst(net_device*, sk_buff*)
       function int dev_forward_skb(net_device*, sk_buff*)
       function net_device* dev_get_by_index(net*, int)
       function net_device* dev_get_by_index_rcu(net*, int)
       function net_device* dev_get_by_name(net*, const char*)
       function net_device* dev_get_by_name_rcu(net*, const char*)
       function net_device* dev_get_by_napi_id(unsigned int)
       function unsigned int dev_get_flags(const net_device*)
       function int dev_get_iflink(const net_device*)
       function int dev_get_phys_port_id(net_device*, netdev_phys_item_id*)
       function int dev_get_phys_port_name(net_device*, char*, size_t)
       function int dev_get_port_parent_id(net_device*, netdev_phys_item_id*, bool)
       function rtnl_link_stats64* dev_get_stats(net_device*, rtnl_link_stats64*)
       function int dev_get_valid_name(net*, net_device*, const char*)
       function net_device* dev_getbyhwaddr_rcu(net*, unsigned short int, const char*)
       function net_device* dev_getfirstbyhwtype(net*, unsigned short int)
       function Qdisc* dev_graft_qdisc(netdev_queue*, Qdisc*)
       function void dev_load(net*, const char*)
       function int dev_loopback_xmit(net*, sock*, sk_buff*)
       function int dev_mc_add(net_device*, const unsigned char*)
       function int dev_mc_add_excl(net_device*, const unsigned char*)
       function int dev_mc_add_global(net_device*, const unsigned char*)
       function int dev_mc_del(net_device*, const unsigned char*)
       function int dev_mc_del_global(net_device*, const unsigned char*)
       function void dev_mc_flush(net_device*)
       function void dev_mc_init(net_device*)
       function int dev_mc_sync(net_device*, net_device*)
       function int dev_mc_sync_multiple(net_device*, net_device*)
       function void dev_mc_unsync(net_device*, net_device*)
       function bool dev_nit_active(net_device*)
       function int dev_open(net_device*, netlink_ext_ack*)
       function u16 dev_pick_tx_cpu_id(net_device*, sk_buff*, net_device*)
       function u16 dev_pick_tx_zero(net_device*, sk_buff*, net_device*)
       function int dev_pre_changeaddr_notify(net_device*, const char*, netlink_ext_ack*)
       function int dev_queue_xmit_accel(sk_buff*, net_device*)
       function void dev_queue_xmit_nit(sk_buff*, net_device*)
       function void dev_remove_pack(packet_type*)
       function int dev_set_alias(net_device*, const char*, size_t)
       function int dev_set_allmulti(net_device*, int)
       function void dev_set_group(net_device*, int)
       function int dev_set_mac_address(net_device*, sockaddr*, netlink_ext_ack*)
       function int dev_set_mtu(net_device*, int)
       function int dev_set_promiscuity(net_device*, int)
       function unsigned long int dev_trans_start(net_device*)
       function int dev_uc_add(net_device*, const unsigned char*)
       function int dev_uc_add_excl(net_device*, const unsigned char*)
       function int dev_uc_del(net_device*, const unsigned char*)
       function void dev_uc_flush(net_device*)
       function void dev_uc_init(net_device*)
       function int dev_uc_sync(net_device*, net_device*)
       function int dev_uc_sync_multiple(net_device*, net_device*)
       function void dev_uc_unsync(net_device*, net_device*)
       function net_device* devm_alloc_etherdev_mqs(device*, int, unsigned int, unsigned int)
       function ssize_t do_tcp_sendpages(sock*, page*, int, size_t, int)
       function int do_xdp_generic(bpf_prog*, sk_buff*)
       function void* dst_alloc(dst_ops*, net_device*, int, int, unsigned short int)
       function dst_entry* dst_cache_get(dst_cache*)
       function rtable* dst_cache_get_ip4(dst_cache*, __be32*)
       function dst_entry* dst_cache_get_ip6(dst_cache*, in6_addr*)
       function void dst_cache_set_ip4(dst_cache*, dst_entry*, __be32)
       function void dst_cache_set_ip6(dst_cache*, dst_entry*, const in6_addr*)
       function u32* dst_cow_metrics_generic(dst_entry*, unsigned long int)
       function dst_entry* dst_destroy(dst_entry*)
       function void dst_dev_put(dst_entry*)
       function int dst_discard_out(net*, sock*, sk_buff*)
       function void dst_init(dst_entry*, dst_ops*, net_device*, int, int, unsigned short int)
       function void dst_release(dst_entry*)
       function void dst_release_immediate(dst_entry*)
       function int esp6_output_head(xfrm_state*, sk_buff*, esp_info*)
       function int esp6_output_tail(xfrm_state*, sk_buff*, esp_info*)
       function int esp_output_head(xfrm_state*, sk_buff*, esp_info*)
       function int esp_output_tail(xfrm_state*, sk_buff*, esp_info*)
       function int eth_change_mtu(net_device*, int)
       function void eth_commit_mac_addr_change(net_device*, void*)
       function u32 eth_get_headlen(const net_device*, void*, unsigned int)
       function int eth_header(sk_buff*, net_device*, unsigned short int, void*, void*, unsigned int)
       function int eth_header_cache(const neighbour*, hh_cache*, __be16)
       function void eth_header_cache_update(hh_cache*, const net_device*, const unsigned char*)
       function int eth_mac_addr(net_device*, void*)
       function int eth_prepare_mac_addr_change(net_device*, void*)
       function __be16 eth_type_trans(sk_buff*, net_device*)
       function int eth_validate_addr(net_device*)
       function void ether_setup(net_device*)
       function u32 ethtool_op_get_link(net_device*)
       function int ethtool_op_get_ts_info(net_device*, ethtool_ts_info*)
       function ethtool_rx_flow_rule* ethtool_rx_flow_rule_create(const ethtool_rx_flow_spec_input*)
       function void ethtool_rx_flow_rule_destroy(ethtool_rx_flow_rule*)
       function failover* failover_register(net_device*, failover_ops*)
       function int failover_slave_unregister(net_device*)
       function void failover_unregister(failover*)
       function bool fib4_rule_default(const fib_rule*)
       function int fib6_check_nexthop(nexthop*, fib6_config*, netlink_ext_ack*)
       function fib6_table* fib6_get_table(net*, u32)
       function fib6_table* fib6_new_table(net*, u32)
       function bool fib6_rule_default(const fib_rule*)
       function int fib_add_nexthop(sk_buff*, const fib_nh_common*, int, u8)
       function int fib_default_rule_add(fib_rules_ops*, u32, u32, u32)
       function bool fib_info_nh_uses_dev(fib_info*, const net_device*)
       function fib_table* fib_new_table(net*, u32)
       function int fib_nexthop_info(sk_buff*, const fib_nh_common*, u8, unsigned char*, bool)
       function int fib_nh_common_init(fib_nh_common*, nlattr*, u16, void*, gfp_t, netlink_ext_ack*)
       function void fib_nh_common_release(fib_nh_common*)
       function fib_notifier_ops* fib_notifier_ops_register(const fib_notifier_ops*, net*)
       function void fib_notifier_ops_unregister(fib_notifier_ops*)
       function bool fib_rule_matchall(const fib_rule*)
       function int fib_rules_dump(net*, notifier_block*, int)
       function int fib_rules_lookup(fib_rules_ops*, flowi*, int, fib_lookup_arg*)
       function fib_rules_ops* fib_rules_register(const fib_rules_ops*, net*)
       function unsigned int fib_rules_seq_read(net*, int)
       function void fib_rules_unregister(fib_rules_ops*)
       function int fib_table_lookup(fib_table*, const flowi4*, fib_result*, int)
       function Qdisc* fifo_create_dflt(Qdisc*, Qdisc_ops*, unsigned int, netlink_ext_ack*)
       function int fifo_set_limit(Qdisc*, unsigned int)
       function int fixed_phy_change_carrier(net_device*, bool)
       function phy_device* fixed_phy_register(unsigned int, fixed_phy_status*, device_node*)
       function phy_device* fixed_phy_register_with_gpiod(unsigned int, fixed_phy_status*, gpio_desc*)
       function int fixed_phy_set_link_update(phy_device*, void ()*)
       function void fixed_phy_unregister(phy_device*)
       function ipv6_txoptions* fl6_merge_options(ipv6_txoptions*, ip6_flowlabel*, ipv6_txoptions*)
       function int flow_block_cb_setup_simple(flow_block_offload*, list_head*, flow_setup_cb_t*, void*, void*, bool)
       function void flow_indr_block_call(net_device*, flow_block_offload*, flow_block_command)
       function flow_rule* flow_rule_alloc(unsigned int)
       function void flow_rule_match_basic(const flow_rule*, flow_match_basic*)
       function void flow_rule_match_control(const flow_rule*, flow_match_control*)
       function void flow_rule_match_cvlan(const flow_rule*, flow_match_vlan*)
       function void flow_rule_match_enc_control(const flow_rule*, flow_match_control*)
       function void flow_rule_match_enc_ip(const flow_rule*, flow_match_ip*)
       function void flow_rule_match_enc_ipv4_addrs(const flow_rule*, flow_match_ipv4_addrs*)
       function void flow_rule_match_enc_ipv6_addrs(const flow_rule*, flow_match_ipv6_addrs*)
       function void flow_rule_match_enc_keyid(const flow_rule*, flow_match_enc_keyid*)
       function void flow_rule_match_enc_opts(const flow_rule*, flow_match_enc_opts*)
       function void flow_rule_match_enc_ports(const flow_rule*, flow_match_ports*)
       function void flow_rule_match_eth_addrs(const flow_rule*, flow_match_eth_addrs*)
       function void flow_rule_match_icmp(const flow_rule*, flow_match_icmp*)
       function void flow_rule_match_ip(const flow_rule*, flow_match_ip*)
       function void flow_rule_match_ipv4_addrs(const flow_rule*, flow_match_ipv4_addrs*)
       function void flow_rule_match_ipv6_addrs(const flow_rule*, flow_match_ipv6_addrs*)
       function void flow_rule_match_meta(const flow_rule*, flow_match_meta*)
       function void flow_rule_match_mpls(const flow_rule*, flow_match_mpls*)
       function void flow_rule_match_ports(const flow_rule*, flow_match_ports*)
       function void flow_rule_match_tcp(const flow_rule*, flow_match_tcp*)
       function void flow_rule_match_vlan(const flow_rule*, flow_match_vlan*)
       function void fqdir_exit(fqdir*)
       function int fqdir_init(fqdir**, inet_frags*, net*)
       function void free_candev(net_device*)
       function void free_fib_info(fib_info*)
       function void free_netdev(net_device*)
       function const ieee80211_reg_rule* freq_reg_info(wiphy*, u32)
       function int gen10g_config_aneg(phy_device*)
       function int generic_mii_ioctl(mii_if_info*, mii_ioctl_data*, int, unsigned int*)
       function void generic_xdp_tx(sk_buff*, bpf_prog*)
       function nlattr** genl_family_attrbuf(const genl_family*)
       function void genl_notify(const genl_family*, sk_buff*, genl_info*, u32, gfp_t)
       function int genl_register_family(genl_family*)
       function int genl_unregister_family(const genl_family*)
       function int genlmsg_multicast_allns(const genl_family*, sk_buff*, u32, unsigned int, gfp_t)
       function void* genlmsg_put(sk_buff*, u32, u32, const genl_family*, int, u8)
       function int genphy_c45_an_config_aneg(phy_device*)
       function int genphy_c45_an_disable_aneg(phy_device*)
       function int genphy_c45_aneg_done(phy_device*)
       function int genphy_c45_check_and_restart_aneg(phy_device*, bool)
       function int genphy_c45_config_aneg(phy_device*)
       function int genphy_c45_pma_read_abilities(phy_device*)
       function int genphy_c45_pma_setup_forced(phy_device*)
       function int genphy_c45_read_link(phy_device*)
       function int genphy_c45_read_lpa(phy_device*)
       function int genphy_c45_read_mdix(phy_device*)
       function int genphy_c45_read_pma(phy_device*)
       function int genphy_c45_read_status(phy_device*)
       function int genphy_c45_restart_aneg(phy_device*)
       function net* get_net_ns_by_fd(int)
       function net* get_net_ns_by_pid(pid_t)
       function void gro_cells_destroy(gro_cells*)
       function int gro_cells_init(gro_cells*, net_device*)
       function int gro_cells_receive(gro_cells*, sk_buff*)
       function int hci_mgmt_chan_register(hci_mgmt_chan*)
       function void hci_mgmt_chan_unregister(hci_mgmt_chan*)
       function ieee80211_hw* ieee80211_alloc_hw_nm(size_t, const ieee80211_ops*, const char*)
       function sk_buff* ieee80211_ap_probereq_get(ieee80211_hw*, ieee80211_vif*)
       function sk_buff* ieee80211_beacon_get_template(ieee80211_hw*, ieee80211_vif*, ieee80211_mutable_offsets*)
       function sk_buff* ieee80211_beacon_get_tim(ieee80211_hw*, ieee80211_vif*, u16*, u16*)
       function __le16 ieee80211_ctstoself_duration(ieee80211_hw*, ieee80211_vif*, size_t, const ieee80211_tx_info*)
       function void ieee80211_ctstoself_get(ieee80211_hw*, ieee80211_vif*, void*, size_t, const ieee80211_tx_info*, ieee80211_cts*)
       function ieee80211_sta* ieee80211_find_sta_by_ifaddr(ieee80211_hw*, const u8*, const u8*)
       function void ieee80211_free_hw(ieee80211_hw*)
       function void ieee80211_free_txskb(ieee80211_hw*, sk_buff*)
       function __le16 ieee80211_generic_frame_duration(ieee80211_hw*, ieee80211_vif*, nl80211_band, size_t, ieee80211_rate*)
       function sk_buff* ieee80211_get_buffered_bc(ieee80211_hw*, ieee80211_vif*)
       function ieee80211_channel* ieee80211_get_channel(wiphy*, int)
       function unsigned int ieee80211_get_num_supported_channels(wiphy*)
       function void ieee80211_iter_chan_contexts_atomic(ieee80211_hw*, void ()*, void*)
       function void ieee80211_iter_keys(ieee80211_hw*, ieee80211_vif*, void ()*, void*)
       function void ieee80211_iter_keys_rcu(ieee80211_hw*, ieee80211_vif*, void ()*, void*)
       function void ieee80211_iterate_active_interfaces_atomic(ieee80211_hw*, u32, void ()*, void*)
       function void ieee80211_iterate_active_interfaces_rtnl(ieee80211_hw*, u32, void ()*, void*)
       function void ieee80211_iterate_interfaces(ieee80211_hw*, u32, void ()*, void*)
       function void ieee80211_iterate_stations_atomic(ieee80211_hw*, void ()*, void*)
       function ieee80211_txq* ieee80211_next_txq(ieee80211_hw*, u8)
       function sk_buff* ieee80211_nullfunc_get(ieee80211_hw*, ieee80211_vif*, bool)
       function sk_buff* ieee80211_probereq_get(ieee80211_hw*, const u8*, const u8*, size_t, size_t)
       function sk_buff* ieee80211_proberesp_get(ieee80211_hw*, ieee80211_vif*)
       function sk_buff* ieee80211_pspoll_get(ieee80211_hw*, ieee80211_vif*)
       function void ieee80211_queue_delayed_work(ieee80211_hw*, delayed_work*, unsigned long int)
       function int ieee80211_queue_stopped(ieee80211_hw*, int)
       function void ieee80211_queue_work(ieee80211_hw*, work_struct*)
       function void ieee80211_radar_detected(ieee80211_hw*)
       function int ieee80211_rate_control_register(const rate_control_ops*)
       function void ieee80211_rate_control_unregister(const rate_control_ops*)
       function void ieee80211_ready_on_channel(ieee80211_hw*)
       function int ieee80211_register_hw(ieee80211_hw*)
       function void ieee80211_remain_on_channel_expired(ieee80211_hw*)
       function void ieee80211_restart_hw(ieee80211_hw*)
       function __le16 ieee80211_rts_duration(ieee80211_hw*, ieee80211_vif*, size_t, const ieee80211_tx_info*)
       function void ieee80211_rts_get(ieee80211_hw*, ieee80211_vif*, void*, size_t, const ieee80211_tx_info*, ieee80211_rts*)
       function void ieee80211_rx_irqsafe(ieee80211_hw*, sk_buff*)
       function void ieee80211_rx_napi(ieee80211_hw*, ieee80211_sta*, sk_buff*, napi_struct*)
       function void ieee80211_scan_completed(ieee80211_hw*, cfg80211_scan_info*)
       function void ieee80211_sched_scan_results(ieee80211_hw*)
       function void ieee80211_sched_scan_stopped(ieee80211_hw*)
       function void ieee80211_sta_block_awake(ieee80211_hw*, ieee80211_sta*, bool)
       function void ieee80211_stop_queue(ieee80211_hw*, int)
       function void ieee80211_stop_queues(ieee80211_hw*)
       function sk_buff* ieee80211_tx_dequeue(ieee80211_hw*, ieee80211_txq*)
       function bool ieee80211_tx_prepare_skb(ieee80211_hw*, ieee80211_vif*, sk_buff*, int, ieee80211_sta**)
       function void ieee80211_tx_rate_update(ieee80211_hw*, ieee80211_sta*, ieee80211_tx_info*)
       function void ieee80211_tx_status(ieee80211_hw*, sk_buff*)
       function void ieee80211_tx_status_ext(ieee80211_hw*, ieee80211_tx_status*)
       function void ieee80211_tx_status_irqsafe(ieee80211_hw*, sk_buff*)
       function bool ieee80211_txq_may_transmit(ieee80211_hw*, ieee80211_txq*)
       function void ieee80211_txq_schedule_start(ieee80211_hw*, u8)
       function void ieee80211_unregister_hw(ieee80211_hw*)
       function wireless_dev* ieee80211_vif_to_wdev(ieee80211_vif*)
       function void ieee80211_wake_queue(ieee80211_hw*, int)
       function void ieee80211_wake_queues(ieee80211_hw*)
       function void in_dev_finish_destroy(in_device*)
       function int inet6_bind(socket*, sockaddr*, int)
       function void inet6_csk_addr2sockaddr(sock*, sockaddr*)
       function dst_entry* inet6_csk_route_req(const sock*, flowi6*, const request_sock*, u8)
       function dst_entry* inet6_csk_update_pmtu(sock*, u32)
       function int inet6_csk_xmit(sock*, sk_buff*, flowi*)
       function void inet6_destroy_sock(sock*)
       function int inet6_getname(socket*, sockaddr*, int)
       function int inet6_hash(sock*)
       function int inet6_hash_connect(inet_timewait_death_row*, sock*)
       function int inet6_ioctl(socket*, unsigned int, unsigned long int)
       function sock* inet6_lookup(net*, inet_hashinfo*, sk_buff*, int, const in6_addr*, const __be16, const in6_addr*, const __be16, const int)
       function sock* inet6_lookup_listener(net*, inet_hashinfo*, sk_buff*, int, const in6_addr*, const __be16, const in6_addr*, const unsigned short int, const int, const int)
       function int inet6_register_protosw(inet_protosw*)
       function int inet6_release(socket*)
       function int inet6_sk_rebuild_header(sock*)
       function void inet6_unregister_protosw(inet_protosw*)
       function int inet_accept(socket*, socket*, int, bool)
       function unsigned int inet_addr_type(net*, __be32)
       function unsigned int inet_addr_type_dev_table(net*, const net_device*, __be32)
       function unsigned int inet_addr_type_table(net*, __be32, u32)
       function int inet_bind(socket*, sockaddr*, int)
       function __be32 inet_confirm_addr(net*, in_device*, __be32, __be32, int)
       function sock* inet_csk_accept(sock*, int, int*, bool)
       function void inet_csk_addr2sockaddr(sock*, sockaddr*)
       function void inet_csk_clear_xmit_timers(sock*)
       function sock* inet_csk_clone_lock(const sock*, const request_sock*, const gfp_t)
       function int inet_csk_compat_getsockopt(sock*, int, int, char*, int*)
       function int inet_csk_compat_setsockopt(sock*, int, int, char*, unsigned int)
       function sock* inet_csk_complete_hashdance(sock*, sock*, request_sock*, bool)
       function void inet_csk_delete_keepalive_timer(sock*)
       function void inet_csk_destroy_sock(sock*)
       function int inet_csk_get_port(sock*, unsigned short int)
       function void inet_csk_init_xmit_timers(sock*, void ()*, void ()*, void ()*)
       function int inet_csk_listen_start(sock*, int)
       function void inet_csk_listen_stop(sock*)
       function void inet_csk_prepare_forced_close(sock*)
       function sock* inet_csk_reqsk_queue_add(sock*, request_sock*, sock*)
       function void inet_csk_reqsk_queue_drop(sock*, request_sock*)
       function void inet_csk_reqsk_queue_drop_and_put(sock*, request_sock*)
       function void inet_csk_reqsk_queue_hash_add(sock*, request_sock*, unsigned long int)
       function void inet_csk_reset_keepalive_timer(sock*, unsigned long int)
       function dst_entry* inet_csk_route_child_sock(const sock*, sock*, const request_sock*)
       function dst_entry* inet_csk_route_req(const sock*, flowi4*, const request_sock*)
       function dst_entry* inet_csk_update_pmtu(sock*, u32)
       function int inet_ctl_sock_create(sock**, unsigned short int, unsigned short int, unsigned char, net*)
       function unsigned int inet_dev_addr_type(net*, const net_device*, __be32)
       function int inet_dgram_connect(socket*, sockaddr*, int, int)
       function int inet_diag_bc_sk(const nlattr*, sock*)
       function sock* inet_diag_find_one_icsk(net*, inet_hashinfo*, const inet_diag_req_v2*)
       function int inet_diag_msg_attrs_fill(sock*, sk_buff*, inet_diag_msg*, int, user_namespace*, bool)
       function void inet_diag_msg_common_fill(inet_diag_msg*, sock*)
       function int inet_diag_register(const inet_diag_handler*)
       function void inet_diag_unregister(const inet_diag_handler*)
       function bool inet_ehash_nolisten(sock*, sock*)
       function inet_frag_queue* inet_frag_find(fqdir*, void*)
       function void inet_get_local_port_range(net*, int*, int*)
       function int inet_getname(socket*, sockaddr*, int)
       function int inet_hash(sock*)
       function int inet_hash_connect(inet_timewait_death_row*, sock*)
       function int inet_ioctl(socket*, unsigned int, unsigned long int)
       function int inet_listen(socket*, int)
       function int inet_pton_with_scope(net*, __kernel_sa_family_t, const char*, const char*, __kernel_sockaddr_storage*)
       function void inet_put_port(sock*)
       function bool inet_rcv_saddr_equal(const sock*, const sock*, bool)
       function int inet_recvmsg(socket*, msghdr*, size_t, int)
       function void inet_register_protosw(inet_protosw*)
       function int inet_release(socket*)
       function request_sock* inet_reqsk_alloc(const request_sock_ops*, sock*, bool)
       function int inet_rtx_syn_ack(const sock*, request_sock*)
       function __be32 inet_select_addr(const net_device*, __be32, int)
       function int inet_send_prepare(sock*)
       function int inet_sendmsg(socket*, msghdr*, size_t)
       function ssize_t inet_sendpage(socket*, page*, int, size_t, int)
       function int inet_shutdown(socket*, int)
       function int inet_sk_diag_fill(sock*, inet_connection_sock*, sk_buff*, const inet_diag_req_v2*, user_namespace*, u32, u32, u16, const nlmsghdr*, bool)
       function int inet_sk_rebuild_header(sock*)
       function void inet_sk_rx_dst_set(sock*, const sk_buff*)
       function void inet_sk_set_state(sock*, int)
       function void inet_sock_destruct(sock*)
       function int inet_stream_connect(socket*, sockaddr*, int, int)
       function inet_timewait_sock* inet_twsk_alloc(const sock*, inet_timewait_death_row*, const int)
       function void inet_twsk_hashdance(inet_timewait_sock*, sock*, inet_hashinfo*)
       function void inet_unhash(sock*)
       function void inet_unregister_protosw(inet_protosw*)
       function in_device* inetdev_by_index(net*, int)
       function int init_dummy_netdev(net_device*)
       function sock* io_uring_get_socket(file*)
       function int ip4_datagram_connect(sock*, sockaddr*, int)
       function void ip4_datagram_release_cb(sock*)
       function int ip6_append_data(sock*, void ()*, void*, int, int, ipcm6_cookie*, flowi6*, rt6_info*, unsigned int)
       function int ip6_datagram_connect(sock*, sockaddr*, int)
       function int ip6_datagram_connect_v6_only(sock*, sockaddr*, int)
       function void ip6_datagram_recv_ctl(sock*, msghdr*, sk_buff*)
       function void ip6_datagram_release_cb(sock*)
       function int ip6_datagram_send_ctl(net*, sock*, msghdr*, flowi6*, ipcm6_cookie*)
       function rt6_info* ip6_dst_alloc(net*, net_device*, int)
       function int ip6_dst_hoplimit(dst_entry*)
       function int ip6_dst_lookup(net*, sock*, dst_entry**, flowi6*)
       function dst_entry* ip6_dst_lookup_flow(const sock*, flowi6*, const in6_addr*)
       function void ip6_flush_pending_frames(sock*)
       function int ip6_local_out(net*, sock*, sk_buff*)
       function rt6_info* ip6_pol_route(net*, fib6_table*, int, flowi6*, const sk_buff*, int)
       function int ip6_push_pending_frames(sock*)
       function void ip6_redirect(sk_buff*, net*, int, u32, kuid_t)
       function dst_entry* ip6_route_input_lookup(net*, net_device*, flowi6*, const sk_buff*, int)
       function dst_entry* ip6_route_lookup(net*, flowi6*, const sk_buff*, int)
       function int ip6_route_me_harder(net*, sk_buff*)
       function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int)
       function dst_entry* ip6_route_output_flags_noref(net*, const sock*, flowi6*, int)
       function dst_entry* ip6_sk_dst_lookup_flow(sock*, flowi6*, const in6_addr*, bool)
       function void ip6_sk_redirect(sk_buff*, sock*)
       function void ip6_sk_update_pmtu(sk_buff*, sock*, __be32)
       function int ip6_tnl_change_mtu(net_device*, int)
       function int ip6_tnl_get_iflink(const net_device*)
       function net* ip6_tnl_get_link_net(const net_device*)
       function int ip6_tnl_rcv(ip6_tnl*, sk_buff*, const tnl_ptk_info*, metadata_dst*, bool)
       function int ip6_tnl_xmit(sk_buff*, net_device*, __u8, flowi6*, int, __u32*, __u8)
       function void ip6_update_pmtu(sk_buff*, net*, __be32, int, u32, kuid_t)
       function int ip6_xmit(const sock*, sk_buff*, flowi6*, __u32, ipv6_txoptions*, int, u32)
       function unsigned int ip6t_do_table(sk_buff*, const nf_hook_state*, xt_table*)
       function int ip6t_register_table(net*, const xt_table*, const ip6t_replace*, const nf_hook_ops*, xt_table**)
       function void ip6t_unregister_table(net*, xt_table*, const nf_hook_ops*)
       function int ip_build_and_send_pkt(sk_buff*, const sock*, __be32, __be32, ip_options_rcu*)
       function sk_buff* ip_check_defrag(net*, sk_buff*, u32)
       function void ip_cmsg_recv_offset(msghdr*, sock*, sk_buff*, int, int)
       function int ip_defrag(net*, sk_buff*, u32)
       function int ip_do_fragment(net*, sock*, sk_buff*, void ()*)
       function dst_metrics* ip_fib_metrics_init(net*, nlattr*, int, netlink_ext_ack*)
       function int ip_getsockopt(sock*, int, int, char*, int*)
       function int ip_local_out(net*, sock*, sk_buff*)
       function void ip_mc_inc_group(in_device*, __be32)
       function int ip_mc_join_group(sock*, ip_mreqn*)
       function int ip_mc_leave_group(sock*, ip_mreqn*)
       function void ip_md_tunnel_xmit(sk_buff*, net_device*, u8, int)
       function int ip_options_compile(net*, ip_options*, sk_buff*)
       function int ip_options_rcv_srr(sk_buff*, net_device*)
       function int ip_route_input_noref(sk_buff*, __be32, __be32, u8, net_device*)
       function int ip_route_me_harder(net*, sk_buff*, unsigned int)
       function rtable* ip_route_output_flow(net*, flowi4*, const sock*)
       function rtable* ip_route_output_key_hash(net*, flowi4*, const sk_buff*)
       function int ip_setsockopt(sock*, int, int, char*, unsigned int)
       function int ip_tunnel_change_mtu(net_device*, int)
       function int ip_tunnel_changelink(net_device*, nlattr**, ip_tunnel_parm*, __u32)
       function void ip_tunnel_delete_nets(list_head*, unsigned int, rtnl_link_ops*)
       function void ip_tunnel_dellink(net_device*, list_head*)
       function int ip_tunnel_encap_setup(ip_tunnel*, ip_tunnel_encap*)
       function int ip_tunnel_get_iflink(const net_device*)
       function net* ip_tunnel_get_link_net(const net_device*)
       function void ip_tunnel_get_stats64(net_device*, rtnl_link_stats64*)
       function int ip_tunnel_init(net_device*)
       function int ip_tunnel_init_net(net*, unsigned int, rtnl_link_ops*, char*)
       function int ip_tunnel_ioctl(net_device*, ip_tunnel_parm*, int)
       function ip_tunnel* ip_tunnel_lookup(ip_tunnel_net*, int, __be16, __be32, __be32, __be32)
       function int ip_tunnel_newlink(net_device*, nlattr**, ip_tunnel_parm*, __u32)
       function int ip_tunnel_rcv(ip_tunnel*, sk_buff*, const tnl_ptk_info*, metadata_dst*, bool)
       function void ip_tunnel_setup(net_device*, unsigned int)
       function void ip_tunnel_uninit(net_device*)
       function void ip_tunnel_xmit(sk_buff*, net_device*, const iphdr*, u8)
       function int ip_valid_fib_dump_req(net*, const nlmsghdr*, fib_dump_filter*, netlink_callback*)
       function void ipcomp_destroy(xfrm_state*)
       function int ipcomp_init_state(xfrm_state*)
       function int ipcomp_input(xfrm_state*, sk_buff*)
       function int ipcomp_output(xfrm_state*, sk_buff*)
       function unsigned int ipt_do_table(sk_buff*, const nf_hook_state*, xt_table*)
       function int ipt_register_table(net*, const xt_table*, const ipt_replace*, const nf_hook_ops*, xt_table**)
       function void ipt_unregister_table(net*, xt_table*, const nf_hook_ops*)
       function metadata_dst* iptunnel_metadata_reply(metadata_dst*, gfp_t)
       function void iptunnel_xmit(sock*, rtable*, sk_buff*, __be32, __be32, __u8, __u8, __u8, __be16, bool)
       function void ipv4_redirect(sk_buff*, net*, int, u8)
       function void ipv4_sk_redirect(sk_buff*, sock*)
       function void ipv4_sk_update_pmtu(sk_buff*, sock*, u32)
       function void ipv4_update_pmtu(sk_buff*, net*, u32, int, u8)
       function int ipv6_chk_addr(net*, const in6_addr*, const net_device*, int)
       function int ipv6_chk_addr_and_flags(net*, const in6_addr*, const net_device*, bool, int, u32)
       function bool ipv6_chk_custom_prefix(const in6_addr*, const unsigned int, net_device*)
       function int ipv6_chk_prefix(const in6_addr*, net_device*)
       function int ipv6_dev_get_saddr(net*, const net_device*, const in6_addr*, unsigned int, in6_addr*)
       function int ipv6_dev_mc_dec(net_device*, const in6_addr*)
       function int ipv6_dev_mc_inc(net_device*, const in6_addr*)
       function ipv6_txoptions* ipv6_dup_options(sock*, ipv6_txoptions*)
       function int ipv6_getsockopt(sock*, int, int, char*, int*)
       function bool ipv6_opt_accepted(const sock*, const sk_buff*, const inet6_skb_parm*)
       function __be32 ipv6_proxy_select_ident(net*, sk_buff*)
       function int ipv6_recv_error(sock*, msghdr*, int, int*)
       function __be32 ipv6_select_ident(net*, const in6_addr*, const in6_addr*)
       function int ipv6_setsockopt(sock*, int, int, char*, unsigned int)
       function int ipv6_sock_mc_drop(sock*, int, const in6_addr*)
       function int ipv6_sock_mc_join(sock*, int, const in6_addr*)
       function bool is_skb_forwardable(const net_device*, const sk_buff*)
       function int iw_handler_get_spy(net_device*, iw_request_info*, iwreq_data*, char*)
       function int iw_handler_get_thrspy(net_device*, iw_request_info*, iwreq_data*, char*)
       function int iw_handler_set_spy(net_device*, iw_request_info*, iwreq_data*, char*)
       function int iw_handler_set_thrspy(net_device*, iw_request_info*, iwreq_data*, char*)
       function int kernel_accept(socket*, socket**, int)
       function int kernel_bind(socket*, sockaddr*, int)
       function int kernel_connect(socket*, sockaddr*, int, int)
       function int kernel_getpeername(socket*, sockaddr*)
       function int kernel_getsockname(socket*, sockaddr*)
       function int kernel_getsockopt(socket*, int, int, char*, int*)
       function int kernel_listen(socket*, int)
       function int kernel_recvmsg(socket*, msghdr*, kvec*, size_t, size_t, int)
       function int kernel_sendmsg(socket*, msghdr*, kvec*, size_t, size_t)
       function int kernel_sendmsg_locked(sock*, msghdr*, kvec*, size_t, size_t)
       function int kernel_sendpage(socket*, page*, int, size_t, int)
       function int kernel_sendpage_locked(sock*, page*, int, size_t, int)
       function int kernel_setsockopt(socket*, int, int, char*, unsigned int)
       function u32 kernel_sock_ip_overhead(sock*)
       function int kernel_sock_shutdown(socket*, sock_shutdown_cmd)
       function int km_new_mapping(xfrm_state*, xfrm_address_t*, __be16)
       function void km_policy_notify(xfrm_policy*, int, const km_event*)
       function int km_query(xfrm_state*, xfrm_tmpl*, xfrm_policy*)
       function int km_report(net*, u8, xfrm_selector*, xfrm_address_t*)
       function void km_state_expired(xfrm_state*, int, u32)
       function void km_state_notify(xfrm_state*, const km_event*)
       function bool l2cap_is_socket(socket*)
       function void l2tp_recv_common(l2tp_session*, sk_buff*, unsigned char*, unsigned char*, u16, int)
       function l2tp_session* l2tp_session_create(int, l2tp_tunnel*, u32, u32, l2tp_session_cfg*)
       function int l2tp_session_delete(l2tp_session*)
       function void l2tp_session_free(l2tp_session*)
       function l2tp_session* l2tp_session_get(const net*, u32)
       function l2tp_session* l2tp_session_get_by_ifname(const net*, const char*)
       function l2tp_session* l2tp_session_get_nth(l2tp_tunnel*, int)
       function int l2tp_session_register(l2tp_session*, l2tp_tunnel*)
       function void l2tp_session_set_header_len(l2tp_session*, int)
       function int l2tp_tunnel_create(net*, int, int, u32, u32, l2tp_tunnel_cfg*, l2tp_tunnel**)
       function void l2tp_tunnel_delete(l2tp_tunnel*)
       function void l2tp_tunnel_free(l2tp_tunnel*)
       function l2tp_tunnel* l2tp_tunnel_get(const net*, u32)
       function l2tp_tunnel* l2tp_tunnel_get_nth(const net*, int)
       function l2tp_session* l2tp_tunnel_get_session(l2tp_tunnel*, u32)
       function int l2tp_tunnel_register(l2tp_tunnel*, net*, l2tp_tunnel_cfg*)
       function int l2tp_udp_encap_recv(sock*, sk_buff*)
       function int l2tp_xmit_skb(l2tp_session*, sk_buff*, int)
       function void linkwatch_fire_event(net_device*)
       function void llc_add_pack(int, void ()*)
       function int llc_build_and_send_ui_pkt(llc_sap*, sk_buff*, unsigned char*, unsigned char)
       function void llc_sap_close(llc_sap*)
       function llc_sap* llc_sap_find(unsigned char)
       function llc_sap* llc_sap_open(unsigned char, void ()*)
       function bool lock_sock_fast(sock*)
       function void lock_sock_nested(sock*, int)
       function phy_device* mdiobus_get_phy(mii_bus*, int)
       function phy_device* mdiobus_scan(mii_bus*, int)
       function metadata_dst* metadata_dst_alloc(u8, metadata_type, gfp_t)
       function metadata_dst* metadata_dst_alloc_percpu(u8, metadata_type, gfp_t)
       function void metadata_dst_free(metadata_dst*)
       function void metadata_dst_free_percpu(metadata_dst*)
       function int mii_check_gmii_support(mii_if_info*)
       function void mii_check_link(mii_if_info*)
       function unsigned int mii_check_media(mii_if_info*, unsigned int, unsigned int)
       function void mii_ethtool_get_link_ksettings(mii_if_info*, ethtool_link_ksettings*)
       function int mii_ethtool_gset(mii_if_info*, ethtool_cmd*)
       function int mii_ethtool_set_link_ksettings(mii_if_info*, const ethtool_link_ksettings*)
       function int mii_ethtool_sset(mii_if_info*, ethtool_cmd*)
       function int mii_link_ok(mii_if_info*)
       function int mii_nway_restart(mii_if_info*)
       function void mini_qdisc_pair_init(mini_Qdisc_pair*, Qdisc*, mini_Qdisc**)
       function void mini_qdisc_pair_swap(mini_Qdisc_pair*, tcf_proto*)
       function bool napi_complete_done(napi_struct*, int)
       function void napi_disable(napi_struct*)
       function sk_buff* napi_get_frags(napi_struct*)
       function void napi_gro_flush(napi_struct*, bool)
       function gro_result_t napi_gro_frags(napi_struct*)
       function gro_result_t napi_gro_receive(napi_struct*, sk_buff*)
       function bool napi_hash_del(napi_struct*)
       function bool napi_schedule_prep(napi_struct*)
       function int ndisc_mc_map(const in6_addr*, char*, net_device*, int)
       function int ndo_dflt_bridge_getlink(sk_buff*, u32, u32, net_device*, u16, u32, u32, int, u32, void ()*)
       function int ndo_dflt_fdb_add(ndmsg*, nlattr**, net_device*, const unsigned char*, u16, u16)
       function int ndo_dflt_fdb_del(ndmsg*, nlattr**, net_device*, const unsigned char*, u16)
       function int ndo_dflt_fdb_dump(sk_buff*, netlink_callback*, net_device*, net_device*, int*)
       function void neigh_app_ns(neighbour*)
       function int neigh_carrier_down(neigh_table*, net_device*)
       function void neigh_changeaddr(neigh_table*, net_device*)
       function int neigh_connected_output(neighbour*, sk_buff*)
       function void neigh_destroy(neighbour*)
       function int neigh_direct_output(neighbour*, sk_buff*)
       function neighbour* neigh_event_ns(neigh_table*, u8*, void*, net_device*)
       function void neigh_for_each(neigh_table*, void ()*, void*)
       function int neigh_ifdown(neigh_table*, net_device*)
       function neighbour* neigh_lookup(neigh_table*, void*, net_device*)
       function neighbour* neigh_lookup_nodev(neigh_table*, net*, void*)
       function neigh_parms* neigh_parms_alloc(net_device*, neigh_table*)
       function void neigh_parms_release(neigh_table*, neigh_parms*)
       function int neigh_resolve_output(neighbour*, sk_buff*)
       function void* neigh_seq_start(seq_file*, loff_t*, neigh_table*, unsigned int)
       function int neigh_sysctl_register(net_device*, neigh_parms*, proc_handler*)
       function void neigh_sysctl_unregister(neigh_parms*)
       function int neigh_table_clear(int, neigh_table*)
       function void neigh_table_init(int, neigh_table*)
       function int neigh_update(neighbour*, const u8*, u8, u32, u32)
       function int neigh_xmit(int, net_device*, void*, sk_buff*)
       function failover* net_failover_create(net_device*)
       function void net_failover_destroy(failover*)
       function void netdev_adjacent_change_abort(net_device*, net_device*, net_device*)
       function void netdev_adjacent_change_commit(net_device*, net_device*, net_device*)
       function int netdev_adjacent_change_prepare(net_device*, net_device*, net_device*, netlink_ext_ack*)
       function void netdev_alert(const net_device*, const char*, ...)
       function int netdev_bind_sb_channel_queue(net_device*, net_device*, u8, u16, u16)
       function void netdev_bonding_info_change(net_device*, netdev_bonding_info*)
       function int netdev_boot_setup_check(net_device*)
       function void netdev_change_features(net_device*)
       function void netdev_crit(const net_device*, const char*, ...)
       function void netdev_emerg(const net_device*, const char*, ...)
       function void netdev_err(const net_device*, const char*, ...)
       function void netdev_features_change(net_device*)
       function bool netdev_has_any_upper_dev(net_device*)
       function bool netdev_has_upper_dev(net_device*, net_device*)
       function bool netdev_has_upper_dev_all_rcu(net_device*, net_device*)
       function void netdev_info(const net_device*, const char*, ...)
       function bool netdev_is_rx_handler_busy(net_device*)
       function void* netdev_lower_dev_get_private(net_device*, net_device*)
       function void* netdev_lower_get_first_private_rcu(net_device*)
       function void* netdev_lower_get_next(net_device*, list_head**)
       function void* netdev_lower_get_next_private(net_device*, list_head**)
       function void* netdev_lower_get_next_private_rcu(net_device*, list_head**)
       function void netdev_lower_state_changed(net_device*, void*)
       function net_device* netdev_master_upper_dev_get(net_device*)
       function net_device* netdev_master_upper_dev_get_rcu(net_device*)
       function int netdev_master_upper_dev_link(net_device*, net_device*, void*, void*, netlink_ext_ack*)
       function void netdev_notice(const net_device*, const char*, ...)
       function void netdev_notify_peers(net_device*)
       function u16 netdev_pick_tx(net_device*, sk_buff*, net_device*)
       function bool netdev_port_same_parent_id(net_device*, net_device*)
       function void netdev_printk(const char*, const net_device*, const char*, ...)
       function int netdev_refcnt_read(const net_device*)
       function void netdev_reset_tc(net_device*)
       function void netdev_rx_csum_fault(net_device*, sk_buff*)
       function int netdev_rx_handler_register(net_device*, rx_handler_func_t*, void*)
       function void netdev_rx_handler_unregister(net_device*)
       function void netdev_set_default_ethtool_ops(net_device*, const ethtool_ops*)
       function int netdev_set_num_tc(net_device*, u8)
       function int netdev_set_sb_channel(net_device*, u16)
       function int netdev_set_tc_queue(net_device*, u8, u16, u16)
       function void netdev_state_change(net_device*)
       function int netdev_txq_to_tc(net_device*, unsigned int)
       function void netdev_unbind_sb_channel(net_device*, net_device*)
       function void netdev_update_features(net_device*)
       function void netdev_update_lockdep_key(net_device*)
       function int netdev_upper_dev_link(net_device*, net_device*, netlink_ext_ack*)
       function void netdev_upper_dev_unlink(net_device*, net_device*)
       function net_device* netdev_upper_get_next_dev_rcu(net_device*, list_head**)
       function int netdev_walk_all_lower_dev(net_device*, void ()*, void*)
       function int netdev_walk_all_lower_dev_rcu(net_device*, void ()*, void*)
       function int netdev_walk_all_upper_dev_rcu(net_device*, void ()*, void*)
       function void netdev_warn(const net_device*, const char*, ...)
       function void netif_carrier_off(net_device*)
       function void netif_carrier_on(net_device*)
       function void netif_device_attach(net_device*)
       function void netif_device_detach(net_device*)
       function void netif_napi_add(net_device*, napi_struct*, void ()*, int)
       function void netif_napi_del(napi_struct*)
       function void netif_schedule_queue(netdev_queue*)
       function int netif_set_real_num_rx_queues(net_device*, unsigned int)
       function int netif_set_real_num_tx_queues(net_device*, unsigned int)
       function int netif_set_xps_queue(net_device*, const cpumask*, u16)
       function void netif_stacked_transfer_operstate(const net_device*, net_device*)
       function void netif_tx_stop_all_queues(net_device*)
       function void netif_tx_wake_queue(netdev_queue*)
       function int netlink_add_tap(netlink_tap*)
       function int netlink_broadcast(sock*, sk_buff*, u32, u32, gfp_t)
       function int netlink_broadcast_filtered(sock*, sk_buff*, u32, u32, gfp_t, void ()*, void*)
       function int netlink_has_listeners(sock*, unsigned int)
       function void netlink_kernel_release(sock*)
       function int netlink_remove_tap(netlink_tap*)
       function int netlink_set_err(sock*, u32, u32, int)
       function int netlink_unicast(sock*, sk_buff*, u32, int)
       function nexthop* nexthop_find_by_id(net*, u32)
       function int nexthop_for_each_fib6_nh(nexthop*, void ()*, void*)
       function nexthop* nexthop_select_path(nexthop*, int)
       function int nf_conncount_add(net*, nf_conncount_list*, const nf_conntrack_tuple*, const nf_conntrack_zone*)
       function unsigned int nf_conncount_count(net*, nf_conncount_data*, const u32*, const nf_conntrack_tuple*, const nf_conntrack_zone*)
       function void nf_conncount_destroy(net*, unsigned int, nf_conncount_data*)
       function bool nf_conncount_gc_list(net*, nf_conncount_list*)
       function nf_conncount_data* nf_conncount_init(net*, unsigned int, unsigned int)
       function nf_conn* nf_conntrack_alloc(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*, const nf_conntrack_tuple*, gfp_t)
       function nf_conntrack_tuple_hash* nf_conntrack_find_get(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)
       function unsigned int nf_conntrack_in(sk_buff*, const nf_hook_state*)
       function int nf_conntrack_register_notifier(net*, nf_ct_event_notifier*)
       function void nf_conntrack_unregister_notifier(net*, nf_ct_event_notifier*)
       function void nf_ct_bridge_register(nf_ct_bridge_info*)
       function void nf_ct_bridge_unregister(nf_ct_bridge_info*)
       function nf_conntrack_expect* nf_ct_expect_find_get(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)
       function void nf_ct_expect_iterate_net(net*, void ()*, void*, u32, int)
       function int nf_ct_expect_register_notifier(net*, nf_exp_event_notifier*)
       function void nf_ct_expect_unregister_notifier(net*, nf_exp_event_notifier*)
       function int nf_ct_frag6_gather(net*, sk_buff*, u32)
       function bool nf_ct_get_tuplepr(const sk_buff*, unsigned int, u_int16_t, net*, nf_conntrack_tuple*)
       function void nf_ct_iterate_cleanup_net(net*, void ()*, void*, u32, int)
       function const nf_conntrack_l4proto* nf_ct_l4proto_find(u8)
       function int nf_ct_netns_get(net*, u8)
       function void nf_ct_netns_put(net*, uint8_t)
       function nf_conn* nf_ct_tmpl_alloc(net*, const nf_conntrack_zone*, gfp_t)
       function void nf_ct_unconfirmed_destroy(net*)
       function int nf_defrag_ipv4_enable(net*)
       function int nf_defrag_ipv6_enable(net*)
       function int nf_getsockopt(sock*, u_int8_t, int, char*, int*)
       function void nf_hook_entries_delete_raw(nf_hook_entries**, const nf_hook_ops*)
       function int nf_hook_entries_insert_raw(nf_hook_entries**, const nf_hook_ops*)
       function int nf_hook_slow(sk_buff*, nf_hook_state*, const nf_hook_entries*, unsigned int)
       function int nf_ip_route(net*, dst_entry**, flowi*, bool)
       function void nf_l4proto_log_invalid(const sk_buff*, net*, u16, u8, const char*, ...)
       function int nf_log_bind_pf(net*, u_int8_t, const nf_logger*)
       function void nf_log_packet(net*, u_int8_t, unsigned int, const sk_buff*, const net_device*, const net_device*, const nf_loginfo*, const char*, ...)
       function int nf_log_set(net*, u_int8_t, const nf_logger*)
       function void nf_log_trace(net*, u_int8_t, unsigned int, const sk_buff*, const net_device*, const net_device*, const nf_loginfo*, const char*, ...)
       function void nf_log_unbind_pf(net*, u_int8_t)
       function void nf_log_unset(net*, const nf_logger*)
       function unsigned int nf_nat_inet_fn(void*, sk_buff*, const nf_hook_state*)
       function int nf_nat_ipv4_register_fn(net*, const nf_hook_ops*)
       function void nf_nat_ipv4_unregister_fn(net*, const nf_hook_ops*)
       function int nf_nat_ipv6_register_fn(net*, const nf_hook_ops*)
       function void nf_nat_ipv6_unregister_fn(net*, const nf_hook_ops*)
       function unsigned int nf_nat_masquerade_ipv4(sk_buff*, unsigned int, const nf_nat_range2*, const net_device*)
       function unsigned int nf_nat_masquerade_ipv6(sk_buff*, const nf_nat_range2*, const net_device*)
       function int nf_queue(sk_buff*, nf_hook_state*, unsigned int, unsigned int)
       function void nf_queue_entry_get_refs(nf_queue_entry*)
       function void nf_queue_entry_release_refs(nf_queue_entry*)
       function void nf_queue_nf_hook_drop(net*)
       function int nf_register_net_hook(net*, const nf_hook_ops*)
       function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int)
       function void nf_register_queue_handler(net*, const nf_queue_handler*)
       function int nf_register_sockopt(nf_sockopt_ops*)
       function void nf_reinject(nf_queue_entry*, unsigned int)
       function int nf_route(net*, dst_entry**, flowi*, bool, unsigned short int)
       function void nf_send_reset(net*, sk_buff*, int)
       function void nf_send_reset6(net*, sk_buff*, int)
       function void nf_send_unreach6(net*, sk_buff*, unsigned char, unsigned int)
       function int nf_setsockopt(sock*, u_int8_t, int, char*, unsigned int)
       function sock* nf_sk_lookup_slow_v4(net*, const sk_buff*, const net_device*)
       function sock* nf_sk_lookup_slow_v6(net*, const sk_buff*, const net_device*)
       function sock* nf_tproxy_get_sock_v4(net*, sk_buff*, const u8, const __be32, const __be32, const __be16, const __be16, const net_device*, const nf_tproxy_lookup_t)
       function sock* nf_tproxy_get_sock_v6(net*, sk_buff*, int, const u8, const in6_addr*, const in6_addr*, const __be16, const __be16, const net_device*, const nf_tproxy_lookup_t)
       function sock* nf_tproxy_handle_time_wait4(net*, sk_buff*, __be32, __be16, sock*)
       function sock* nf_tproxy_handle_time_wait6(sk_buff*, int, int, net*, const in6_addr*, const __be16, sock*)
       function void nf_unregister_net_hook(net*, const nf_hook_ops*)
       function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int)
       function void nf_unregister_queue_handler(net*)
       function void nf_unregister_sockopt(nf_sockopt_ops*)
       function int nf_xfrm_me_harder(net*, sk_buff*, unsigned int)
       function int nfnetlink_has_listeners(net*, unsigned int)
       function int nfnetlink_send(sk_buff*, net*, u32, unsigned int, int, gfp_t)
       function int nfnetlink_set_err(net*, u32, u32, int)
       function int nfnetlink_subsys_register(const nfnetlink_subsystem*)
       function int nfnetlink_subsys_unregister(const nfnetlink_subsystem*)
       function int nfnetlink_unicast(sk_buff*, net*, u32, int)
       function int nlmsg_notify(sock*, sk_buff*, u32, unsigned int, int, gfp_t)
       function void of_can_transceiver(net_device*)
       function net_device* of_find_net_device_by_node(device_node*)
       function phy_device* of_phy_attach(net_device*, device_node*, u32, phy_interface_t)
       function phy_device* of_phy_connect(net_device*, device_node*, void ()*, u32, phy_interface_t)
       function phy_device* of_phy_find_device(device_node*)
       function phy_device* of_phy_get_and_connect(net_device*, device_node*, void ()*)
       function int open_candev(net_device*)
       function netdev_features_t passthru_features_check(sk_buff*, net_device*, netdev_features_t)
       function int peernet2id(net*, net*)
       function int peernet2id_alloc(net*, net*, gfp_t)
       function phy_device* phy_attach(net_device*, const char*, phy_interface_t)
       function int phy_attach_direct(net_device*, phy_device*, u32, phy_interface_t)
       function phy_device* phy_connect(net_device*, const char*, void ()*, phy_interface_t)
       function int phy_connect_direct(net_device*, phy_device*, void ()*, phy_interface_t)
       function int phy_ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)
       function int phy_ethtool_nway_reset(net_device*)
       function int phy_ethtool_set_link_ksettings(net_device*, const ethtool_link_ksettings*)
       function int phy_modify(phy_device*, u32, u16, u16)
       function int phy_modify_changed(phy_device*, u32, u16, u16)
       function int phy_modify_mmd(phy_device*, int, u32, u16, u16)
       function int phy_modify_mmd_changed(phy_device*, int, u32, u16, u16)
       function int phy_modify_paged(phy_device*, int, u32, u16, u16)
       function int phy_modify_paged_changed(phy_device*, int, u32, u16, u16)
       function int phy_read_mmd(phy_device*, int, u32)
       function int phy_read_paged(phy_device*, int, u32)
       function void phy_resolve_aneg_linkmode(phy_device*)
       function void phy_resolve_aneg_pause(phy_device*)
       function int phy_restore_page(phy_device*, int, int)
       function int phy_save_page(phy_device*)
       function int phy_select_page(phy_device*, int)
       function int phy_set_max_speed(phy_device*, u32)
       function int phy_write_mmd(phy_device*, int, u32, u16)
       function int phy_write_paged(phy_device*, int, u32, u16)
       function int ping_bind(sock*, sockaddr*, int)
       function void ping_close(sock*, long int)
       function int ping_get_port(sock*, unsigned short int)
       function int ping_hash(sock*)
       function int ping_init_sock(sock*)
       function int ping_queue_rcv_skb(sock*, sk_buff*)
       function int ping_recvmsg(sock*, msghdr*, size_t, int, int, int*)
       function void ping_unhash(sock*)
       function void pneigh_enqueue(neigh_table*, neigh_parms*, sk_buff*)
       function pneigh_entry* pneigh_lookup(neigh_table*, net*, void*, net_device*, int)
       function int ppp_register_net_channel(net*, ppp_channel*)
       function int pppox_compat_ioctl(socket*, unsigned int, unsigned long int)
       function int pppox_ioctl(socket*, unsigned int, unsigned long int)
       function void pppox_unbind_sock(sock*)
       function void print_tuple(seq_file*, const nf_conntrack_tuple*, const nf_conntrack_l4proto*)
       function void qdisc_class_hash_grow(Qdisc*, Qdisc_class_hash*)
       function Qdisc* qdisc_create_dflt(netdev_queue*, const Qdisc_ops*, unsigned int, netlink_ext_ack*)
       function void qdisc_hash_add(Qdisc*, bool)
       function void qdisc_hash_del(Qdisc*)
       function int qdisc_offload_dump_helper(Qdisc*, tc_setup_type, void*)
       function void qdisc_offload_graft_helper(net_device*, Qdisc*, Qdisc*, Qdisc*, tc_setup_type, void*, netlink_ext_ack*)
       function void qdisc_put(Qdisc*)
       function void qdisc_put_unlocked(Qdisc*)
       function void qdisc_reset(Qdisc*)
       function void qdisc_tree_reduce_backlog(Qdisc*, int, int)
       function void qdisc_warn_nonwc(const char*, Qdisc*)
       function void qdisc_watchdog_cancel(qdisc_watchdog*)
       function void qdisc_watchdog_init(qdisc_watchdog*, Qdisc*)
       function void qdisc_watchdog_init_clockid(qdisc_watchdog*, Qdisc*, clockid_t)
       function void qdisc_watchdog_schedule_ns(qdisc_watchdog*, u64)
       function int rate_control_set_rates(ieee80211_hw*, ieee80211_sta*, ieee80211_sta_rates*)
       function int raw_abort(sock*, int)
       function int raw_hash_sk(sock*)
       function void raw_unhash_sk(sock*)
       function datalink_proto* register_8022_client(unsigned char, void ()*)
       function int register_candev(net_device*)
       function int register_gifconf(unsigned int, gifconf_func_t*)
       function ctl_table_header* register_net_sysctl(net*, const char*, ctl_table*)
       function int register_netdev(net_device*)
       function int register_netdevice(net_device*)
       function int register_pernet_device(pernet_operations*)
       function int register_pernet_subsys(pernet_operations*)
       function int register_pppox_proto(int, const pppox_proto*)
       function int register_qdisc(Qdisc_ops*)
       function datalink_proto* register_snap_client(const unsigned char*, void ()*)
       function int register_tcf_proto_ops(tcf_proto_ops*)
       function int regulatory_hint(wiphy*, const char*)
       function bool regulatory_pre_cac_allowed(wiphy*)
       function int regulatory_set_wiphy_regd(wiphy*, ieee80211_regdomain*)
       function int regulatory_set_wiphy_regd_sync_rtnl(wiphy*, ieee80211_regdomain*)
       function void release_sock(sock*)
       function int reuseport_add_sock(sock*, sock*, bool)
       function int reuseport_alloc(sock*, bool)
       function int reuseport_attach_prog(sock*, bpf_prog*)
       function int reuseport_detach_prog(sock*)
       function void reuseport_detach_sock(sock*)
       function sock* reuseport_select_sock(sock*, u32, sk_buff*, int)
       function bool rps_may_expire_flow(net_device*, u16, u32, u16)
       function rt6_info* rt6_lookup(net*, const in6_addr*, const in6_addr*, int, const sk_buff*, int)
       function rtable* rt_dst_alloc(net_device*, unsigned int, u16, bool, bool, bool)
       function rtable* rt_dst_clone(net_device*, rtable*)
       function void rtnl_af_register(rtnl_af_ops*)
       function void rtnl_af_unregister(rtnl_af_ops*)
       function int rtnl_configure_link(net_device*, const ifinfomsg*)
       function net_device* rtnl_create_link(net*, const char*, unsigned char, const rtnl_link_ops*, nlattr**, netlink_ext_ack*)
       function int rtnl_delete_link(net_device*)
       function net* rtnl_get_net_ns_capable(sock*, int)
       function net* rtnl_link_get_net(net*, nlattr**)
       function int rtnl_link_register(rtnl_link_ops*)
       function void rtnl_link_unregister(rtnl_link_ops*)
       function void rtnl_notify(sk_buff*, net*, u32, u32, nlmsghdr*, gfp_t)
       function int rtnl_put_cacheinfo(sk_buff*, dst_entry*, u32, long int, u32)
       function void rtnl_set_sk_err(net*, u32, int)
       function int rtnl_unicast(sk_buff*, net*, u32)
       function can_priv* safe_candev_priv(net_device*)
       function sec_path* secpath_set(sk_buff*)
       function u32 secure_tcpv6_ts_off(const net*, const __be32*, const __be32*)
       function void setup_udp_tunnel_sock(net*, socket*, udp_tunnel_sock_cfg*)
       function sock* sk_alloc(net*, int, gfp_t, proto*, int)
       function int sk_attach_filter(sock_fprog*, sock*)
       function bool sk_capable(const sock*, int)
       function void sk_clear_memalloc(sock*)
       function sock* sk_clone_lock(const sock*, const gfp_t)
       function void sk_common_release(sock*)
       function int sk_detach_filter(sock*)
       function dst_entry* sk_dst_check(sock*, u32)
       function int sk_filter_trim_cap(sock*, sk_buff*, unsigned int)
       function void sk_free(sock*)
       function void sk_free_unlock_clone(sock*)
       function bool sk_mc_loop(sock*)
       function bool sk_net_capable(const sock*, int)
       function bool sk_ns_capable(const sock*, user_namespace*, int)
       function bool sk_page_frag_refill(sock*, page_frag*)
       function void sk_reset_timer(sock*, timer_list*, unsigned long int)
       function void sk_send_sigurg(sock*)
       function void sk_set_memalloc(sock*)
       function int sk_set_peek_off(sock*, int)
       function void sk_setup_caps(sock*, dst_entry*)
       function void sk_stop_timer(sock*, timer_list*)
       function int sk_stream_error(sock*, int, int)
       function void sk_stream_kill_queues(sock*)
       function void sk_stream_wait_close(sock*, long int)
       function int sk_stream_wait_connect(sock*, long int*)
       function int sk_stream_wait_memory(sock*, long int*)
       function int sk_wait_data(sock*, long int*, const sk_buff*)
       function void skb_consume_udp(sock*, sk_buff*, int)
       function void skb_free_datagram(sock*, sk_buff*)
       function int skb_kill_datagram(sock*, sk_buff*, unsigned int)
       function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*)
       function int skb_send_sock_locked(sock*, sk_buff*, int, int)
       function void skb_set_owner_w(sk_buff*, sock*)
       function int skb_splice_bits(sk_buff*, sock*, unsigned int, pipe_inode_info*, unsigned int, unsigned int)
       function int skb_zerocopy_iter_stream(sock*, sk_buff*, msghdr*, int, ubuf_info*)
       function socket* sock_alloc()
       function file* sock_alloc_file(socket*, int, const char*)
       function sk_buff* sock_alloc_send_pskb(sock*, unsigned long int, unsigned long int, int, int*, int)
       function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*)
       function int sock_cmsg_send(sock*, msghdr*, sockcm_cookie*)
       function int sock_common_getsockopt(socket*, int, int, char*, int*)
       function int sock_common_recvmsg(socket*, msghdr*, size_t, int)
       function int sock_common_setsockopt(socket*, int, int, char*, unsigned int)
       function int sock_create(int, int, int, socket**)
       function int sock_create_kern(net*, int, int, int, socket**)
       function int sock_create_lite(int, int, int, socket**)
       function sk_buff* sock_dequeue_err_skb(sock*)
       function int sock_diag_check_cookie(sock*, const __u32*)
       function int sock_diag_destroy(sock*, int)
       function int sock_diag_put_filterinfo(bool, sock*, sk_buff*, int)
       function int sock_diag_put_meminfo(sock*, sk_buff*, int)
       function int sock_diag_register(const sock_diag_handler*)
       function void sock_diag_save_cookie(sock*, __u32*)
       function void sock_diag_unregister(const sock_diag_handler*)
       function socket* sock_from_file(file*, int*)
       function void sock_gen_put(sock*)
       function int sock_gettstamp(socket*, void*, bool, bool)
       function unsigned long int sock_i_ino(sock*)
       function kuid_t sock_i_uid(sock*)
       function void sock_init_data(socket*, sock*)
       function int sock_inuse_get(net*)
       function void sock_kfree_s(sock*, void*, int)
       function void* sock_kmalloc(sock*, int, gfp_t)
       function void sock_kzfree_s(sock*, void*, int)
       function int sock_no_accept(socket*, socket*, int, bool)
       function int sock_no_bind(socket*, sockaddr*, int)
       function int sock_no_connect(socket*, sockaddr*, int, int)
       function int sock_no_getname(socket*, sockaddr*, int)
       function int sock_no_getsockopt(socket*, int, int, char*, int*)
       function int sock_no_ioctl(socket*, unsigned int, unsigned long int)
       function int sock_no_listen(socket*, int)
       function int sock_no_mmap(file*, socket*, vm_area_struct*)
       function int sock_no_recvmsg(socket*, msghdr*, size_t, int)
       function int sock_no_sendmsg(socket*, msghdr*, size_t)
       function int sock_no_sendmsg_locked(sock*, msghdr*, size_t)
       function ssize_t sock_no_sendpage(socket*, page*, int, size_t, int)
       function ssize_t sock_no_sendpage_locked(sock*, page*, int, size_t, int)
       function int sock_no_setsockopt(socket*, int, int, char*, unsigned int)
       function int sock_no_shutdown(socket*, int)
       function int sock_no_socketpair(socket*, socket*)
       function void sock_prot_inuse_add(net*, proto*, int)
       function int sock_prot_inuse_get(net*, proto*)
       function int sock_queue_err_skb(sock*, sk_buff*)
       function int sock_queue_rcv_skb(sock*, sk_buff*)
       function int sock_recv_errqueue(sock*, msghdr*, int, int, int)
       function int sock_recvmsg(socket*, msghdr*, int)
       function int sock_register(const net_proto_family*)
       function void sock_release(socket*)
       function int sock_sendmsg(socket*, msghdr*)
       function int sock_setsockopt(socket*, int, int, char*, unsigned int)
       function sk_buff* sock_wmalloc(sock*, unsigned long int, int, gfp_t)
       function ubuf_info* sock_zerocopy_alloc(sock*, size_t)
       function ubuf_info* sock_zerocopy_realloc(sock*, size_t, ubuf_info*)
       function socket* sockfd_lookup(int, int*)
       function int stp_proto_register(const stp_proto*)
       function void stp_proto_unregister(const stp_proto*)
       function void tc_cleanup_flow_action(flow_action*)
       function int tc_setup_cb_add(tcf_block*, tcf_proto*, tc_setup_type, void*, bool, u32*, unsigned int*, bool)
       function int tc_setup_cb_call(tcf_block*, tc_setup_type, void*, bool, bool)
       function int tc_setup_cb_destroy(tcf_block*, tcf_proto*, tc_setup_type, void*, bool, u32*, unsigned int*, bool)
       function int tc_setup_cb_reoffload(tcf_block*, tcf_proto*, bool, flow_setup_cb_t*, tc_setup_type, void*, void*, u32*, unsigned int*)
       function int tc_setup_cb_replace(tcf_block*, tcf_proto*, tc_setup_type, void*, bool, u32*, unsigned int*, u32*, unsigned int*, bool)
       function int tc_setup_flow_action(flow_action*, const tcf_exts*, bool)
       function int tcf_action_check_ctrlact(int, tcf_proto*, tcf_chain**, netlink_ext_ack*)
       function int tcf_action_dump_1(sk_buff*, tc_action*, int, int)
       function int tcf_action_exec(sk_buff*, tc_action**, int, tcf_result*)
       function tcf_chain* tcf_action_set_ctrlact(tc_action*, int, tcf_chain*)
       function int tcf_block_get(tcf_block**, tcf_proto**, Qdisc*, netlink_ext_ack*)
       function int tcf_block_get_ext(tcf_block**, Qdisc*, tcf_block_ext_info*, netlink_ext_ack*)
       function void tcf_block_netif_keep_dst(tcf_block*)
       function void tcf_block_put(tcf_block*)
       function void tcf_block_put_ext(tcf_block*, Qdisc*, tcf_block_ext_info*)
       function tcf_chain* tcf_chain_get_by_act(tcf_block*, u32)
       function void tcf_chain_put_by_act(tcf_chain*)
       function int tcf_classify(sk_buff*, const tcf_proto*, tcf_result*, bool)
       function int tcf_em_register(tcf_ematch_ops*)
       function void tcf_em_tree_destroy(tcf_ematch_tree*)
       function int tcf_em_tree_dump(sk_buff*, tcf_ematch_tree*, int)
       function int tcf_em_tree_validate(tcf_proto*, nlattr*, tcf_ematch_tree*)
       function void tcf_em_unregister(tcf_ematch_ops*)
       function void tcf_exts_change(tcf_exts*, tcf_exts*)
       function void tcf_exts_destroy(tcf_exts*)
       function int tcf_exts_dump(sk_buff*, tcf_exts*)
       function int tcf_exts_dump_stats(sk_buff*, tcf_exts*)
       function unsigned int tcf_exts_num_actions(tcf_exts*)
       function int tcf_exts_validate(net*, tcf_proto*, nlattr**, nlattr*, tcf_exts*, bool, bool, netlink_ext_ack*)
       function int tcf_generic_walker(tc_action_net*, sk_buff*, netlink_callback*, int, const tc_action_ops*, netlink_ext_ack*)
       function tcf_chain* tcf_get_next_chain(tcf_block*, tcf_chain*)
       function tcf_proto* tcf_get_next_proto(tcf_chain*, tcf_proto*, bool)
       function int tcf_idr_check_alloc(tc_action_net*, u32*, tc_action**, int)
       function void tcf_idr_cleanup(tc_action_net*, u32)
       function int tcf_idr_create(tc_action_net*, u32, nlattr*, tc_action**, const tc_action_ops*, int, bool)
       function void tcf_idr_insert(tc_action_net*, tc_action*)
       function int tcf_idr_search(tc_action_net*, tc_action**, u32)
       function void tcf_idrinfo_destroy(const tc_action_ops*, tcf_idrinfo*)
       function int tcf_register_action(tc_action_ops*, pernet_operations*)
       function int tcf_unregister_action(tc_action_ops*, pernet_operations*)
       function int tcp_abort(sock*, int)
       function bool tcp_add_backlog(sock*, sk_buff*)
       function u32 tcp_ca_get_key_by_name(net*, const char*, bool*)
       function void tcp_ca_openreq_child(sock*, const dst_entry*)
       function sock* tcp_check_req(sock*, sk_buff*, request_sock*, bool, bool*)
       function int tcp_child_process(sock*, sock*, sk_buff*)
       function void tcp_close(sock*, long int)
       function void tcp_cong_avoid_ai(tcp_sock*, u32, u32)
       function int tcp_conn_request(request_sock_ops*, const tcp_request_sock_ops*, sock*, sk_buff*)
       function int tcp_connect(sock*)
       function sock* tcp_create_openreq_child(const sock*, request_sock*, sk_buff*)
       function int tcp_disconnect(sock*, int)
       function void tcp_done(sock*)
       function void tcp_enter_cwr(sock*)
       function void tcp_enter_memory_pressure(sock*)
       function void tcp_enter_quickack_mode(sock*, unsigned int)
       function bool tcp_fastopen_defer_connect(sock*, int*)
       function int tcp_filter(sock*, sk_buff*)
       function void tcp_get_info(sock*, tcp_info*)
       function u16 tcp_get_syncookie_mss(request_sock_ops*, const tcp_request_sock_ops*, sock*, tcphdr*)
       function int tcp_getsockopt(sock*, int, int, char*, int*)
       function void tcp_init_sock(sock*)
       function void tcp_initialize_rcv_mss(sock*)
       function int tcp_ioctl(sock*, int, unsigned long int)
       function void tcp_leave_memory_pressure(sock*)
       function sk_buff* tcp_make_synack(const sock*, dst_entry*, request_sock*, tcp_fastopen_cookie*, tcp_synack_type)
       function int tcp_mmap(file*, socket*, vm_area_struct*)
       function int tcp_mss_to_mtu(sock*, int)
       function void tcp_mtup_init(sock*)
       function void tcp_openreq_init_rwin(request_sock*, const sock*, const dst_entry*)
       function void tcp_parse_options(const net*, const sk_buff*, tcp_options_received*, int, tcp_fastopen_cookie*)
       function int tcp_peek_len(socket*)
       function __poll_t tcp_poll(file*, socket*, poll_table*)
       function void tcp_rate_check_app_limited(sock*)
       function void tcp_rcv_established(sock*, sk_buff*)
       function int tcp_rcv_state_process(sock*, sk_buff*)
       function int tcp_read_sock(sock*, read_descriptor_t*, sk_read_actor_t)
       function int tcp_recvmsg(sock*, msghdr*, size_t, int, int, int*)
       function int tcp_register_ulp(tcp_ulp_ops*)
       function void tcp_release_cb(sock*)
       function void tcp_reno_cong_avoid(sock*, u32, u32)
       function u32 tcp_reno_ssthresh(sock*)
       function u32 tcp_reno_undo_cwnd(sock*)
       function void tcp_req_err(sock*, u32, bool)
       function int tcp_rtx_synack(const sock*, request_sock*)
       function void tcp_select_initial_window(const sock*, int, __u32, __u32*, __u32*, int, __u8*, __u32)
       function int tcp_sendmsg(sock*, msghdr*, size_t)
       function int tcp_sendmsg_locked(sock*, msghdr*, size_t)
       function int tcp_sendpage(sock*, page*, int, size_t, int)
       function int tcp_sendpage_locked(sock*, page*, int, size_t, int)
       function void tcp_set_keepalive(sock*, int)
       function int tcp_set_rcvlowat(sock*, int)
       function void tcp_set_state(sock*, int)
       function int tcp_setsockopt(sock*, int, int, char*, unsigned int)
       function void tcp_shutdown(sock*, int)
       function void tcp_simple_retransmit(sock*)
       function u32 tcp_slow_start(tcp_sock*, u32)
       function ssize_t tcp_splice_read(socket*, loff_t*, pipe_inode_info*, size_t, unsigned int)
       function void tcp_syn_ack_timeout(const request_sock*)
       function unsigned int tcp_sync_mss(sock*, u32)
       function void tcp_time_wait(sock*, int, int)
       function void tcp_twsk_destructor(sock*)
       function int tcp_twsk_unique(sock*, sock*, void*)
       function void tcp_unregister_ulp(tcp_ulp_ops*)
       function int tcp_v4_conn_request(sock*, sk_buff*)
       function int tcp_v4_connect(sock*, sockaddr*, int)
       function void tcp_v4_destroy_sock(sock*)
       function int tcp_v4_do_rcv(sock*, sk_buff*)
       function void tcp_v4_mtu_reduced(sock*)
       function void tcp_v4_send_check(sock*, sk_buff*)
       function sock* tcp_v4_syn_recv_sock(const sock*, sk_buff*, request_sock*, dst_entry*, request_sock*, bool*)
       function int tipc_nl_sk_walk(sk_buff*, netlink_callback*, void ()*)
       function int tipc_sk_fill_sock_diag(sk_buff*, netlink_callback*, tipc_sock*, u32, void ()*)
       function socket* tun_get_socket(file*)
       function sock* udp4_lib_lookup(net*, __be32, __be16, __be32, __be16, int)
       function sock* udp4_lib_lookup_skb(sk_buff*, __be16, __be16)
       function sock* udp6_lib_lookup(net*, const in6_addr*, __be16, const in6_addr*, __be16, int)
       function sock* udp6_lib_lookup_skb(sk_buff*, __be16, __be16)
       function int udp_abort(sock*, int)
       function int udp_cmsg_send(sock*, msghdr*, u16*)
       function void udp_destruct_sock(sock*)
       function int udp_disconnect(sock*, int)
       function void udp_flush_pending_frames(sock*)
       function int udp_gro_complete(sk_buff*, int, udp_lookup_t)
       function sk_buff* udp_gro_receive(list_head*, sk_buff*, udphdr*, udp_lookup_t)
       function int udp_init_sock(sock*)
       function int udp_ioctl(sock*, int, unsigned long int)
       function int udp_lib_get_port(sock*, unsigned short int, unsigned int)
       function int udp_lib_getsockopt(sock*, int, int, char*, int*)
       function void udp_lib_rehash(sock*, u16)
       function int udp_lib_setsockopt(sock*, int, int, char*, unsigned int, void ()*)
       function void udp_lib_unhash(sock*)
       function __poll_t udp_poll(file*, socket*, poll_table*)
       function int udp_pre_connect(sock*, sockaddr*, int)
       function int udp_push_pending_frames(sock*)
       function int udp_sendmsg(sock*, msghdr*, size_t)
       function bool udp_sk_rx_dst_set(sock*, dst_entry*)
       function void udp_skb_destructor(sock*, sk_buff*)
       function int udp_sock_create4(net*, udp_port_cfg*, socket**)
       function int udp_sock_create6(net*, udp_port_cfg*, socket**)
       function metadata_dst* udp_tun_rx_dst(sk_buff*, unsigned short int, __be16, __be64, int)
       function int udp_tunnel6_xmit_skb(dst_entry*, sock*, sk_buff*, net_device*, in6_addr*, in6_addr*, __u8, __u8, __be32, __be16, __be16, bool)
       function void udp_tunnel_drop_rx_port(net_device*, socket*, unsigned short int)
       function void udp_tunnel_notify_add_rx_port(socket*, unsigned short int)
       function void udp_tunnel_notify_del_rx_port(socket*, unsigned short int)
       function void udp_tunnel_push_rx_port(net_device*, socket*, unsigned short int)
       function void udp_tunnel_sock_release(socket*)
       function void udp_tunnel_xmit_skb(rtable*, sock*, sk_buff*, __be32, __be32, __u8, __u8, __be16, __be16, __be16, bool, bool)
       function sock* unix_get_socket(file*)
       function long int unix_inq_len(sock*)
       function long int unix_outq_len(sock*)
       function sock* unix_peer_get(sock*)
       function void unregister_8022_client(datalink_proto*)
       function void unregister_candev(net_device*)
       function void unregister_netdev(net_device*)
       function void unregister_netdevice_queue(net_device*, list_head*)
       function void unregister_pernet_device(pernet_operations*)
       function void unregister_pernet_subsys(pernet_operations*)
       function int unregister_qdisc(Qdisc_ops*)
       function void unregister_snap_client(datalink_proto*)
       function int unregister_tcf_proto_ops(tcf_proto_ops*)
       function int usbnet_change_mtu(net_device*, int)
       function void usbnet_defer_kevent(usbnet*, int)
       function void usbnet_device_suggests_idle(usbnet*)
       function void usbnet_get_drvinfo(net_device*, ethtool_drvinfo*)
       function int usbnet_get_endpoints(usbnet*, usb_interface*)
       function int usbnet_get_ethernet_addr(usbnet*, int)
       function u32 usbnet_get_link(net_device*)
       function int usbnet_get_link_ksettings(net_device*, ethtool_link_ksettings*)
       function u32 usbnet_get_msglevel(net_device*)
       function void usbnet_get_stats64(net_device*, rtnl_link_stats64*)
       function void usbnet_link_change(usbnet*, bool, bool)
       function int usbnet_manage_power(usbnet*, int)
       function int usbnet_nway_reset(net_device*)
       function int usbnet_open(net_device*)
       function void usbnet_pause_rx(usbnet*)
       function void usbnet_purge_paused_rxq(usbnet*)
       function int usbnet_read_cmd(usbnet*, u8, u8, u16, u16, void*, u16)
       function int usbnet_read_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)
       function void usbnet_resume_rx(usbnet*)
       function int usbnet_set_link_ksettings(net_device*, const ethtool_link_ksettings*)
       function void usbnet_set_msglevel(net_device*, u32)
       function void usbnet_skb_return(usbnet*, sk_buff*)
       function netdev_tx_t usbnet_start_xmit(sk_buff*, net_device*)
       function int usbnet_status_start(usbnet*, gfp_t)
       function void usbnet_status_stop(usbnet*)
       function int usbnet_stop(net_device*)
       function void usbnet_tx_timeout(net_device*)
       function void usbnet_unlink_rx_urbs(usbnet*)
       function void usbnet_update_max_qlen(usbnet*)
       function int usbnet_write_cmd(usbnet*, u8, u8, u16, u16, void*, u16)
       function int usbnet_write_cmd_async(usbnet*, u8, u8, u16, u16, void*, u16)
       function int usbnet_write_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)
       function sk_buff* validate_xmit_skb_list(sk_buff*, net_device*, bool*)
       function int virt_wifi_register_network_simulation(virt_wifi_network_simulation*)
       function int virtio_transport_connect(vsock_sock*)
       function void virtio_transport_deliver_tap_pkt(virtio_vsock_pkt*)
       function void virtio_transport_destruct(vsock_sock*)
       function int virtio_transport_dgram_bind(vsock_sock*, sockaddr_vm*)
       function int virtio_transport_dgram_dequeue(vsock_sock*, msghdr*, size_t, int)
       function int virtio_transport_dgram_enqueue(vsock_sock*, sockaddr_vm*, msghdr*, size_t)
       function int virtio_transport_do_socket_init(vsock_sock*, vsock_sock*)
       function void virtio_transport_free_pkt(virtio_vsock_pkt*)
       function u64 virtio_transport_get_buffer_size(vsock_sock*)
       function u32 virtio_transport_get_credit(virtio_vsock_sock*, u32)
       function u64 virtio_transport_get_max_buffer_size(vsock_sock*)
       function u64 virtio_transport_get_min_buffer_size(vsock_sock*)
       function void virtio_transport_inc_tx_pkt(virtio_vsock_sock*, virtio_vsock_pkt*)
       function int virtio_transport_notify_poll_in(vsock_sock*, size_t, bool*)
       function int virtio_transport_notify_poll_out(vsock_sock*, size_t, bool*)
       function int virtio_transport_notify_recv_init(vsock_sock*, size_t, vsock_transport_recv_notify_data*)
       function int virtio_transport_notify_recv_post_dequeue(vsock_sock*, size_t, ssize_t, bool, vsock_transport_recv_notify_data*)
       function int virtio_transport_notify_recv_pre_block(vsock_sock*, size_t, vsock_transport_recv_notify_data*)
       function int virtio_transport_notify_recv_pre_dequeue(vsock_sock*, size_t, vsock_transport_recv_notify_data*)
       function int virtio_transport_notify_send_init(vsock_sock*, vsock_transport_send_notify_data*)
       function int virtio_transport_notify_send_post_enqueue(vsock_sock*, ssize_t, vsock_transport_send_notify_data*)
       function int virtio_transport_notify_send_pre_block(vsock_sock*, vsock_transport_send_notify_data*)
       function int virtio_transport_notify_send_pre_enqueue(vsock_sock*, vsock_transport_send_notify_data*)
       function void virtio_transport_put_credit(virtio_vsock_sock*, u32)
       function void virtio_transport_recv_pkt(virtio_vsock_pkt*)
       function void virtio_transport_release(vsock_sock*)
       function void virtio_transport_set_buffer_size(vsock_sock*, u64)
       function void virtio_transport_set_max_buffer_size(vsock_sock*, u64)
       function void virtio_transport_set_min_buffer_size(vsock_sock*, u64)
       function int virtio_transport_shutdown(vsock_sock*, int)
       function ssize_t virtio_transport_stream_dequeue(vsock_sock*, msghdr*, size_t, int)
       function ssize_t virtio_transport_stream_enqueue(vsock_sock*, msghdr*, size_t)
       function s64 virtio_transport_stream_has_data(vsock_sock*)
       function s64 virtio_transport_stream_has_space(vsock_sock*)
       function bool virtio_transport_stream_is_active(vsock_sock*)
       function u64 virtio_transport_stream_rcvhiwat(vsock_sock*)
       function void vlan_ioctl_set(void ()*)
       function void vsock_add_pending(sock*, sock*)
       function int vsock_add_tap(vsock_tap*)
       function const vsock_transport* vsock_core_get_transport()
       function void vsock_enqueue_accept(sock*, sock*)
       function sock* vsock_find_bound_socket(sockaddr_vm*)
       function sock* vsock_find_connected_socket(sockaddr_vm*, sockaddr_vm*)
       function void vsock_insert_connected(vsock_sock*)
       function void vsock_remove_bound(vsock_sock*)
       function void vsock_remove_connected(vsock_sock*)
       function void vsock_remove_pending(sock*, sock*)
       function void vsock_remove_sock(vsock_sock*)
       function int vsock_remove_tap(vsock_tap*)
       function s64 vsock_stream_has_data(vsock_sock*)
       function s64 vsock_stream_has_space(vsock_sock*)
       function ieee80211_vif* wdev_to_ieee80211_vif(wireless_dev*)
       function void wiphy_apply_custom_regulatory(wiphy*, const ieee80211_regdomain*)
       function void wiphy_free(wiphy*)
       function wiphy* wiphy_new_nm(const cfg80211_ops*, int, const char*)
       function void wiphy_read_of_freq_limits(wiphy*)
       function int wiphy_register(wiphy*)
       function void wiphy_rfkill_set_hw_state(wiphy*, bool)
       function void wiphy_rfkill_start_polling(wiphy*)
       function void wiphy_rfkill_stop_polling(wiphy*)
       function ieee80211_hw* wiphy_to_ieee80211_hw(wiphy*)
       function void wiphy_unregister(wiphy*)
       function void wireless_send_event(net_device*, unsigned int, iwreq_data*, const char*)
       function void wireless_spy_update(net_device*, unsigned char*, iw_quality*)
       function bool xdp_attachment_flags_ok(xdp_attachment_info*, netdev_bpf*)
       function int xdp_attachment_query(xdp_attachment_info*, netdev_bpf*)
       function void xdp_attachment_setup(xdp_attachment_info*, netdev_bpf*)
       function int xdp_do_generic_redirect(net_device*, sk_buff*, xdp_buff*, bpf_prog*)
       function int xdp_do_redirect(net_device*, xdp_buff*, bpf_prog*)
       function int xdp_rxq_info_reg(xdp_rxq_info*, net_device*, u32)
       function int xfrm6_find_1stfragopt(xfrm_state*, sk_buff*, u8**)
       function __be32 xfrm6_tunnel_alloc_spi(net*, xfrm_address_t*)
       function __be32 xfrm6_tunnel_spi_lookup(net*, const xfrm_address_t*)
       function int xfrm_alloc_spi(xfrm_state*, u32, u32)
       function void xfrm_audit_state_add(xfrm_state*, int, bool)
       function void xfrm_audit_state_delete(xfrm_state*, int, bool)
       function void xfrm_audit_state_icvfail(xfrm_state*, sk_buff*, u8)
       function void xfrm_audit_state_replay(xfrm_state*, sk_buff*, __be32)
       function void xfrm_audit_state_replay_overflow(xfrm_state*, sk_buff*)
       function int xfrm_dev_state_flush(net*, net_device*, bool)
       function void xfrm_dst_ifdown(dst_entry*, net_device*)
       function xfrm_state* xfrm_find_acq(net*, const xfrm_mark*, u8, u32, u32, u8, const xfrm_address_t*, const xfrm_address_t*, int, unsigned short int)
       function xfrm_state* xfrm_find_acq_byseq(net*, u32, u32)
       function void xfrm_if_register_cb(const xfrm_if_cb*)
       function int xfrm_init_replay(xfrm_state*)
       function int xfrm_init_state(xfrm_state*)
       function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int)
       function dst_entry* xfrm_lookup_route(net*, dst_entry*, const flowi*, const sock*, int)
       function dst_entry* xfrm_lookup_with_ifid(net*, dst_entry*, const flowi*, const sock*, int, u32)
       function int xfrm_output(sock*, sk_buff*)
       function xfrm_policy* xfrm_policy_alloc(net*, gfp_t)
       function xfrm_policy* xfrm_policy_byid(net*, u32, u32, u8, int, u32, int, int*)
       function xfrm_policy* xfrm_policy_bysel_ctx(net*, u32, u32, u8, int, xfrm_selector*, xfrm_sec_ctx*, int, int*)
       function int xfrm_policy_flush(net*, u8, bool)
       function void xfrm_policy_hash_rebuild(net*)
       function int xfrm_policy_register_afinfo(const xfrm_policy_afinfo*, int)
       function void xfrm_policy_unregister_afinfo(const xfrm_policy_afinfo*)
       function int xfrm_policy_walk(net*, xfrm_policy_walk*, void ()*, void*)
       function void xfrm_policy_walk_done(xfrm_policy_walk*, net*)
       function int xfrm_register_km(xfrm_mgr*)
       function int xfrm_register_type(const xfrm_type*, unsigned short int)
       function int xfrm_register_type_offload(const xfrm_type_offload*, unsigned short int)
       function u32 xfrm_replay_seqhi(xfrm_state*, __be32)
       function void xfrm_sad_getinfo(net*, xfrmk_sadinfo*)
       function void xfrm_spd_getinfo(net*, xfrmk_spdinfo*)
       function int xfrm_state_add(xfrm_state*)
       function xfrm_state_afinfo* xfrm_state_afinfo_get_rcu(unsigned int)
       function xfrm_state* xfrm_state_alloc(net*)
       function int xfrm_state_check_expire(xfrm_state*)
       function int xfrm_state_delete(xfrm_state*)
       function void xfrm_state_delete_tunnel(xfrm_state*)
       function int xfrm_state_flush(net*, u8, bool, bool)
       function void xfrm_state_free(xfrm_state*)
       function void xfrm_state_insert(xfrm_state*)
       function xfrm_state* xfrm_state_lookup(net*, u32, const xfrm_address_t*, __be32, u8, unsigned short int)
       function xfrm_state* xfrm_state_lookup_byaddr(net*, u32, const xfrm_address_t*, const xfrm_address_t*, u8, unsigned short int)
       function xfrm_state* xfrm_state_lookup_byspi(net*, __be32, unsigned short int)
       function u32 xfrm_state_mtu(xfrm_state*, int)
       function int xfrm_state_register_afinfo(xfrm_state_afinfo*)
       function int xfrm_state_unregister_afinfo(xfrm_state_afinfo*)
       function int xfrm_state_update(xfrm_state*)
       function int xfrm_state_walk(net*, xfrm_state_walk*, void ()*, void*)
       function void xfrm_state_walk_done(xfrm_state_walk*, net*)
       function xfrm_state* xfrm_stateonly_find(net*, u32, u32, xfrm_address_t*, xfrm_address_t*, unsigned short int, u8, u8, u32)
       function int xfrm_trans_queue(sk_buff*, void ()*)
       function int xfrm_unregister_km(xfrm_mgr*)
       function void xfrm_unregister_type(const xfrm_type*, unsigned short int)
       function void xfrm_unregister_type_offload(const xfrm_type_offload*, unsigned short int)
       function int xfrm_user_policy(sock*, int, u8*, int)
       function int xt_check_match(xt_mtchk_param*, unsigned int, u16, bool)
       function int xt_check_target(xt_tgchk_param*, unsigned int, u16, bool)
       function void xt_compat_match_from_user(xt_entry_match*, void**, unsigned int*)
       function int xt_compat_match_offset(const xt_match*)
       function int xt_compat_match_to_user(const xt_entry_match*, void**, unsigned int*)
       function void xt_compat_target_from_user(xt_entry_target*, void**, unsigned int*)
       function int xt_compat_target_offset(const xt_target*)
       function int xt_compat_target_to_user(const xt_entry_target*, void**, unsigned int*)
       function xt_match* xt_find_match(u8, const char*, u8)
       function xt_table* xt_find_table_lock(net*, u_int8_t, const char*)
       function nf_hook_ops* xt_hook_ops_alloc(const xt_table*, nf_hookfn*)
       function int xt_match_to_user(const xt_entry_match*, xt_entry_match*)
       function void xt_proto_fini(net*, u_int8_t)
       function int xt_proto_init(net*, u_int8_t)
       function int xt_register_match(xt_match*)
       function int xt_register_matches(xt_match*, unsigned int)
       function xt_table* xt_register_table(net*, const xt_table*, xt_table_info*, xt_table_info*)
       function int xt_register_target(xt_target*)
       function int xt_register_targets(xt_target*, unsigned int)
       function xt_match* xt_request_find_match(uint8_t, const char*, uint8_t)
       function xt_table* xt_request_find_table_lock(net*, u_int8_t, const char*)
       function xt_target* xt_request_find_target(u8, const char*, u8)
       function int xt_target_to_user(const xt_entry_target*, xt_entry_target*)
       function void xt_unregister_match(xt_match*)
       function void xt_unregister_matches(xt_match*, unsigned int)
       function void xt_unregister_target(xt_target*)
       function void xt_unregister_targets(xt_target*, unsigned int)
       void ()* __fib6_flush_trees
       neigh_table arp_tbl
       net_device* blackhole_netdev
       net init_net
       neigh_table nd_tbl
       nf_ct_hook* nf_ct_hook
       netlink_table* nl_table
       pingv6_ops pingv6_ops
       softnet_data softnet_data

  1565 impacted interfaces:
    Qdisc_ops bfifo_qdisc_ops
    const Qdisc_ops* default_qdisc_ops
    const proto_ops inet_dgram_ops
    const proto_ops inet_stream_ops
    const inet_connection_sock_af_ops ipv4_specific
    const ipv6_bpf_stub* ipv6_bpf_stub
    const ipv6_stub* ipv6_stub
    const nf_ipv6_ops* nf_ipv6_ops
    Qdisc noop_qdisc
    Qdisc_ops pfifo_fast_ops
    Qdisc_ops pfifo_qdisc_ops
    function sk_buff* __cfg80211_alloc_event_skb(wiphy*, wireless_dev*, nl80211_commands, nl80211_attrs, unsigned int, int, int, gfp_t)
    function sk_buff* __cfg80211_alloc_reply_skb(wiphy*, nl80211_commands, nl80211_attrs, int)
    function int __cgroup_bpf_run_filter_getsockopt(sock*, int, int, char*, int*, int, int)
    function int __cgroup_bpf_run_filter_setsockopt(sock*, int*, int*, char*, int*, char**)
    function int __cgroup_bpf_run_filter_sk(sock*, bpf_attach_type)
    function int __cgroup_bpf_run_filter_skb(sock*, sk_buff*, bpf_attach_type)
    function int __cgroup_bpf_run_filter_sock_addr(sock*, sockaddr*, bpf_attach_type, void*)
    function int __cgroup_bpf_run_filter_sock_ops(sock*, bpf_sock_ops_kern*, bpf_attach_type)
    function int __dev_forward_skb(net_device*, sk_buff*)
    function net_device* __dev_get_by_flags(net*, unsigned short int, unsigned short int)
    function net_device* __dev_get_by_index(net*, int)
    function net_device* __dev_get_by_name(net*, const char*)
    function net_device* __dev_getfirstbyhwtype(net*, unsigned short int)
    function void __dev_remove_pack(packet_type*)
    function int __dev_set_mtu(net_device*, int)
    function void __dst_destroy_metrics_generic(dst_entry*, unsigned long int)
    function int __ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)
    function int __fib_lookup(net*, flowi4*, fib_result*, unsigned int)
    function ip6_flowlabel* __fl6_sock_lookup(sock*, __be32)
    function int __hw_addr_ref_sync_dev(netdev_hw_addr_list*, net_device*, void ()*, void ()*)
    function void __hw_addr_ref_unsync_dev(netdev_hw_addr_list*, net_device*, void ()*)
    function int __hw_addr_sync_dev(netdev_hw_addr_list*, net_device*, void ()*, void ()*)
    function void __hw_addr_unsync_dev(netdev_hw_addr_list*, net_device*, void ()*)
    function void __ieee80211_schedule_txq(ieee80211_hw*, ieee80211_txq*, bool)
    function sock* __inet6_lookup_established(net*, inet_hashinfo*, const in6_addr*, const __be16, const in6_addr*, const u16, const int, const int)
    function int __inet_hash(sock*, sock*)
    function int __inet_inherit_port(const sock*, sock*)
    function sock* __inet_lookup_established(net*, inet_hashinfo*, const __be32, const __be16, const __be32, const u16, const int, const int)
    function sock* __inet_lookup_listener(net*, inet_hashinfo*, sk_buff*, int, const __be32, __be16, const __be32, const unsigned short int, const int, const int)
    function int __inet_stream_connect(socket*, sockaddr*, int, int, int)
    function int __ip4_datagram_connect(sock*, sockaddr*, int)
    function int __ip6_datagram_connect(sock*, sockaddr*, int)
    function int __ip6_local_out(net*, sock*, sk_buff*)
    function net_device* __ip_dev_find(net*, __be32, bool)
    function void __ip_mc_dec_group(in_device*, __be32, gfp_t)
    function void __ip_mc_inc_group(in_device*, __be32, gfp_t)
    function int __ip_options_compile(net*, ip_options*, sk_buff*, __be32*)
    function int __ip_queue_xmit(sock*, sk_buff*, flowi*, __u8)
    function void __ip_select_ident(net*, iphdr*, int)
    function int __ip_tunnel_change_mtu(net_device*, int, bool)
    function void __l2tp_session_unhash(l2tp_session*)
    function sk_buff* __napi_alloc_skb(napi_struct*, unsigned int, gfp_t)
    function void __napi_schedule(napi_struct*)
    function void __napi_schedule_irqoff(napi_struct*)
    function neighbour* __neigh_create(neigh_table*, void*, net_device*, bool)
    function int __neigh_event_send(neighbour*, sk_buff*)
    function void __neigh_for_each_release(neigh_table*, void ()*)
    function void __neigh_set_probe_once(neighbour*)
    function sk_buff* __netdev_alloc_skb(net_device*, unsigned int, gfp_t)
    function void __netif_schedule(Qdisc*)
    function int __netif_set_xps_queue(net_device*, const unsigned long int*, u16, bool)
    function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*)
    function sock* __netlink_kernel_create(net*, int, module*, netlink_kernel_cfg*)
    function bool __netlink_ns_capable(const netlink_skb_parms*, user_namespace*, int)
    function nf_conntrack_expect* __nf_ct_expect_find(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)
    function int __nf_ip6_route(net*, dst_entry**, flowi*, bool)
    function int __phy_modify(phy_device*, u32, u16, u16)
    function int __phy_modify_changed(phy_device*, u32, u16, u16)
    function int __phy_modify_mmd(phy_device*, int, u32, u16, u16)
    function int __phy_modify_mmd_changed(phy_device*, int, u32, u16, u16)
    function int __phy_read_mmd(phy_device*, int, u32)
    function int __phy_write_mmd(phy_device*, int, u32, u16)
    function pneigh_entry* __pneigh_lookup(neigh_table*, net*, void*, net_device*)
    function sock* __raw_v4_lookup(net*, sock*, unsigned short int, __be32, __be32, int, int)
    function sock* __raw_v6_lookup(net*, sock*, unsigned short int, const in6_addr*, const in6_addr*, int, int)
    function int __rtnl_link_register(rtnl_link_ops*)
    function void __rtnl_link_unregister(rtnl_link_ops*)
    function int __scm_send(socket*, msghdr*, scm_cookie*)
    function int __sk_backlog_rcv(sock*, sk_buff*)
    function dst_entry* __sk_dst_check(sock*, u32)
    function int __sk_mem_raise_allocated(sock*, int, int, int)
    function void __sk_mem_reclaim(sock*, int)
    function void __sk_mem_reduce_allocated(sock*, int)
    function int __sk_mem_schedule(sock*, int, int)
    function int __sk_queue_drop_skb(sock*, sk_buff_head*, sk_buff*, unsigned int, void ()*)
    function int __sk_receive_skb(sock*, sk_buff*, const int, unsigned int, bool)
    function bool __skb_flow_dissect(const net*, const sk_buff*, flow_dissector*, void*, void*, __be16, int, int, unsigned int)
    function void __skb_free_datagram_locked(sock*, sk_buff*, int)
    function sk_buff* __skb_recv_datagram(sock*, unsigned int, void ()*, int*, int*)
    function sk_buff* __skb_recv_udp(sock*, unsigned int, int, int*, int*)
    function sk_buff* __skb_try_recv_datagram(sock*, unsigned int, void ()*, int*, int*, sk_buff**)
    function void __skb_tstamp_tx(sk_buff*, skb_shared_hwtstamps*, sock*, int)
    function int __skb_wait_for_more_packets(sock*, int*, long int*, const sk_buff*)
    function int __sock_cmsg_send(sock*, msghdr*, cmsghdr*, sockcm_cookie*)
    function int __sock_create(net*, int, int, int, socket**, int)
    function int __sock_queue_rcv_skb(sock*, sk_buff*)
    function void __sock_recv_timestamp(msghdr*, sock*, sk_buff*)
    function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*)
    function void __sock_recv_wifi_status(msghdr*, sock*, sk_buff*)
    function int __tcf_em_tree_match(sk_buff*, tcf_ematch_tree*, tcf_pkt_info*)
    function int __tcf_idr_release(tc_action*, bool, bool)
    function void __tcp_send_ack(sock*, u32)
    function sock* __udp4_lib_lookup(net*, __be32, __be16, __be32, __be16, int, int, udp_table*, sk_buff*)
    function sock* __udp6_lib_lookup(net*, const in6_addr*, __be16, const in6_addr*, __be16, int, int, udp_table*, sk_buff*)
    function int __udp_disconnect(sock*, int)
    function int __udp_enqueue_schedule_skb(sock*, sk_buff*)
    function int __vsock_core_init(const vsock_transport*, module*)
    function sock* __vsock_create(net*, socket*, sock*, gfp_t, unsigned short int, int)
    function dst_entry* __xfrm_dst_lookup(net*, int, int, const xfrm_address_t*, const xfrm_address_t*, int, u32)
    function int __xfrm_init_state(xfrm_state*, bool, bool)
    function int __xfrm_policy_check(sock*, int, sk_buff*, unsigned short int)
    function int __xfrm_state_delete(xfrm_state*)
    function void __xfrm_state_destroy(xfrm_state*, bool)
    function int __zerocopy_sg_from_iter(sock*, sk_buff*, iov_iter*, size_t)
    function void addrconf_add_linklocal(inet6_dev*, const in6_addr*, u32)
    function int addrconf_prefix_rcv_add_addr(net*, net_device*, const prefix_info*, inet6_dev*, const in6_addr*, int, u32, bool, bool, __u32, u32)
    function sk_buff* alloc_can_err_skb(net_device*, can_frame**)
    function sk_buff* alloc_can_skb(net_device*, can_frame**)
    function net_device* alloc_candev_mqs(int, unsigned int, unsigned int, unsigned int)
    function sk_buff* alloc_canfd_skb(net_device*, canfd_frame**)
    function net_device* alloc_etherdev_mqs(int, unsigned int, unsigned int)
    function net_device* alloc_netdev_mqs(int, const char*, unsigned char, void ()*, unsigned int, unsigned int)
    function bool arch_bpf_jit_check_func(const bpf_prog*)
    function sk_buff* arp_create(int, int, __be32, net_device*, __be32, const unsigned char*, const unsigned char*, const unsigned char*)
    function void arp_send(int, int, __be32, net_device*, __be32, const unsigned char*, const unsigned char*, const unsigned char*)
    function unsigned int arpt_do_table(sk_buff*, const nf_hook_state*, xt_table*)
    function int arpt_register_table(net*, const xt_table*, const arpt_replace*, const nf_hook_ops*, xt_table**)
    function void arpt_unregister_table(net*, xt_table*, const nf_hook_ops*)
    function bpf_offload_dev* bpf_offload_dev_create(const bpf_prog_offload_ops*, void*)
    function bool bpf_offload_dev_match(bpf_prog*, net_device*)
    function int bpf_offload_dev_netdev_register(bpf_offload_dev*, net_device*)
    function void bpf_offload_dev_netdev_unregister(bpf_offload_dev*, net_device*)
    function bpf_prog* bpf_prog_add(bpf_prog*, int)
    function bpf_prog* bpf_prog_alloc(unsigned int, gfp_t)
    function int bpf_prog_create(bpf_prog**, sock_fprog_kern*)
    function int bpf_prog_create_from_user(bpf_prog**, sock_fprog*, bpf_aux_classic_check_t, bool)
    function void bpf_prog_destroy(bpf_prog*)
    function void bpf_prog_free(bpf_prog*)
    function bpf_prog* bpf_prog_get_type_dev(u32, bpf_prog_type, bool)
    function bpf_prog* bpf_prog_get_type_path(const char*, bpf_prog_type)
    function bpf_prog* bpf_prog_inc(bpf_prog*)
    function bpf_prog* bpf_prog_inc_not_zero(bpf_prog*)
    function void bpf_prog_put(bpf_prog*)
    function bpf_prog* bpf_prog_select_runtime(bpf_prog*, int*)
    function void bpf_prog_sub(bpf_prog*, int)
    function void bpf_trace_run1(bpf_prog*, u64)
    function void bpf_trace_run10(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run11(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run12(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run2(bpf_prog*, u64, u64)
    function void bpf_trace_run3(bpf_prog*, u64, u64, u64)
    function void bpf_trace_run4(bpf_prog*, u64, u64, u64, u64)
    function void bpf_trace_run5(bpf_prog*, u64, u64, u64, u64, u64)
    function void bpf_trace_run6(bpf_prog*, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run7(bpf_prog*, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run8(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_trace_run9(bpf_prog*, u64, u64, u64, u64, u64, u64, u64, u64, u64)
    function void bpf_verifier_log_write(bpf_verifier_env*, const char*, ...)
    function int br_dev_queue_push_xmit(net*, sock*, sk_buff*)
    function void br_fdb_clear_offload(const net_device*, u16)
    function net_device* br_fdb_find_port(const net_device*, const unsigned char*, __u16)
    function void br_forward(const net_bridge_port*, sk_buff*, bool, bool)
    function int br_forward_finish(net*, sock*, sk_buff*)
    function int br_handle_frame_finish(net*, sock*, sk_buff*)
    function int br_ip6_fragment(net*, sock*, sk_buff*, nf_bridge_frag_data*, void ()*)
    function bool br_multicast_enabled(const net_device*)
    function bool br_multicast_has_querier_adjacent(net_device*, int)
    function bool br_multicast_has_querier_anywhere(net_device*, int)
    function int br_multicast_list_adjacent(net_device*, list_head*)
    function bool br_multicast_router(const net_device*)
    function bool br_port_flag_is_set(const net_device*, unsigned long int)
    function void brioctl_set(void ()*)
    function sock* bt_accept_dequeue(sock*, socket*)
    function void bt_accept_enqueue(sock*, sock*, bool)
    function void bt_accept_unlink(sock*)
    function void bt_procfs_cleanup(net*, const char*)
    function int bt_procfs_init(net*, const char*, bt_sock_list*, void ()*)
    function int bt_sock_ioctl(socket*, unsigned int, unsigned long int)
    function void bt_sock_link(bt_sock_list*, sock*)
    function __poll_t bt_sock_poll(file*, socket*, poll_table*)
    function void bt_sock_reclassify_lock(sock*, int)
    function int bt_sock_recvmsg(socket*, msghdr*, size_t, int)
    function int bt_sock_register(int, const net_proto_family*)
    function int bt_sock_stream_recvmsg(socket*, msghdr*, size_t, int)
    function void bt_sock_unlink(bt_sock_list*, sock*)
    function int bt_sock_wait_ready(sock*, unsigned long int)
    function int bt_sock_wait_state(sock*, int, unsigned long int)
    function int call_fib_notifier(notifier_block*, net*, fib_event_type, fib_notifier_info*)
    function int call_fib_notifiers(net*, fib_event_type, fib_notifier_info*)
    function int call_netdevice_notifiers(unsigned long int, net_device*)
    function void can_bus_off(net_device*)
    function int can_change_mtu(net_device*, int)
    function void can_change_state(net_device*, can_frame*, can_state, can_state)
    function void can_free_echo_skb(net_device*, unsigned int)
    function unsigned int can_get_echo_skb(net_device*, unsigned int)
    function int can_proto_register(const can_proto*)
    function void can_proto_unregister(const can_proto*)
    function void can_put_echo_skb(sk_buff*, net_device*, unsigned int)
    function int can_rx_offload_add_fifo(net_device*, can_rx_offload*, unsigned int)
    function int can_rx_offload_add_timestamp(net_device*, can_rx_offload*)
    function void can_rx_offload_del(can_rx_offload*)
    function void can_rx_offload_enable(can_rx_offload*)
    function unsigned int can_rx_offload_get_echo_skb(can_rx_offload*, unsigned int, u32)
    function int can_rx_offload_irq_offload_fifo(can_rx_offload*)
    function int can_rx_offload_irq_offload_timestamp(can_rx_offload*, u64)
    function int can_rx_offload_queue_sorted(can_rx_offload*, sk_buff*, u32)
    function int can_rx_offload_queue_tail(can_rx_offload*, sk_buff*)
    function void can_rx_offload_reset(can_rx_offload*)
    function int can_rx_register(net*, net_device*, canid_t, canid_t, void ()*, void*, char*, sock*)
    function void can_rx_unregister(net*, net_device*, canid_t, canid_t, void ()*, void*)
    function void can_sock_destruct(sock*)
    function void cfg80211_abandon_assoc(net_device*, cfg80211_bss*)
    function void cfg80211_assoc_timeout(net_device*, cfg80211_bss*)
    function void cfg80211_auth_timeout(net_device*, const u8*)
    function void cfg80211_bss_iter(wiphy*, cfg80211_chan_def*, void ()*, void*)
    function void cfg80211_cac_event(net_device*, const cfg80211_chan_def*, nl80211_radar_event, gfp_t)
    function void cfg80211_ch_switch_notify(net_device*, cfg80211_chan_def*)
    function void cfg80211_ch_switch_started_notify(net_device*, cfg80211_chan_def*, u8)
    function int cfg80211_chandef_dfs_required(wiphy*, const cfg80211_chan_def*, nl80211_iftype)
    function bool cfg80211_chandef_usable(wiphy*, const cfg80211_chan_def*, u32)
    function int cfg80211_check_combinations(wiphy*, iface_combination_params*)
    function int cfg80211_check_station_change(wiphy*, station_parameters*, cfg80211_station_type)
    function void cfg80211_conn_failed(net_device*, const u8*, nl80211_connect_failed_reason, gfp_t)
    function void cfg80211_connect_done(net_device*, cfg80211_connect_resp_params*, gfp_t)
    function void cfg80211_cqm_beacon_loss_notify(net_device*, gfp_t)
    function void cfg80211_cqm_pktloss_notify(net_device*, const u8*, u32, gfp_t)
    function void cfg80211_cqm_rssi_notify(net_device*, nl80211_cqm_rssi_threshold_event, s32, gfp_t)
    function void cfg80211_cqm_txe_notify(net_device*, const u8*, u32, u32, u32, gfp_t)
    function void cfg80211_crit_proto_stopped(wireless_dev*, gfp_t)
    function void cfg80211_del_sta_sinfo(net_device*, const u8*, station_info*, gfp_t)
    function void cfg80211_disconnected(net_device*, u16, const u8*, size_t, bool, gfp_t)
    function int cfg80211_external_auth_request(net_device*, cfg80211_external_auth_params*, gfp_t)
    function void cfg80211_ft_event(net_device*, cfg80211_ft_event_params*)
    function cfg80211_bss* cfg80211_get_bss(wiphy*, ieee80211_channel*, const u8*, const u8*, size_t, ieee80211_bss_type, ieee80211_privacy)
    function void cfg80211_get_drvinfo(net_device*, ethtool_drvinfo*)
    function int cfg80211_get_station(net_device*, const u8*, station_info*)
    function void cfg80211_gtk_rekey_notify(net_device*, const u8*, const u8*, gfp_t)
    function void cfg80211_ibss_joined(net_device*, const u8*, ieee80211_channel*, gfp_t)
    function bool cfg80211_iftype_allowed(wiphy*, nl80211_iftype, bool, u8)
    function cfg80211_bss* cfg80211_inform_bss_data(wiphy*, cfg80211_inform_bss*, cfg80211_bss_frame_type, const u8*, u64, u16, u16, const u8*, size_t, gfp_t)
    function cfg80211_bss* cfg80211_inform_bss_frame_data(wiphy*, cfg80211_inform_bss*, ieee80211_mgmt*, size_t, gfp_t)
    function int cfg80211_iter_combinations(wiphy*, iface_combination_params*, void ()*, void*)
    function void cfg80211_mgmt_tx_status(wireless_dev*, u64, const u8*, size_t, bool, gfp_t)
    function void cfg80211_michael_mic_failure(net_device*, const u8*, nl80211_key_type, int, const u8*, gfp_t)
    function void cfg80211_nan_func_terminated(wireless_dev*, u8, nl80211_nan_func_term_reason, u64, gfp_t)
    function void cfg80211_nan_match(wireless_dev*, cfg80211_nan_match_params*, gfp_t)
    function void cfg80211_new_sta(net_device*, const u8*, station_info*, gfp_t)
    function void cfg80211_notify_new_peer_candidate(net_device*, const u8*, const u8*, u8, int, gfp_t)
    function void cfg80211_pmksa_candidate_notify(net_device*, int, const u8*, bool, gfp_t)
    function void cfg80211_pmsr_complete(wireless_dev*, cfg80211_pmsr_request*, gfp_t)
    function void cfg80211_pmsr_report(wireless_dev*, cfg80211_pmsr_request*, cfg80211_pmsr_result*, gfp_t)
    function void cfg80211_port_authorized(net_device*, const u8*, gfp_t)
    function void cfg80211_probe_status(net_device*, const u8*, u64, bool, s32, bool, gfp_t)
    function void cfg80211_put_bss(wiphy*, cfg80211_bss*)
    function void cfg80211_radar_event(wiphy*, cfg80211_chan_def*, gfp_t)
    function void cfg80211_ready_on_channel(wireless_dev*, u64, ieee80211_channel*, unsigned int, gfp_t)
    function void cfg80211_ref_bss(wiphy*, cfg80211_bss*)
    function bool cfg80211_reg_can_beacon(wiphy*, cfg80211_chan_def*, nl80211_iftype)
    function bool cfg80211_reg_can_beacon_relax(wiphy*, cfg80211_chan_def*, nl80211_iftype)
    function void cfg80211_remain_on_channel_expired(wireless_dev*, u64, ieee80211_channel*, gfp_t)
    function void cfg80211_report_obss_beacon(wiphy*, const u8*, size_t, int, int)
    function void cfg80211_report_wowlan_wakeup(wireless_dev*, cfg80211_wowlan_wakeup*, gfp_t)
    function void cfg80211_roamed(net_device*, cfg80211_roam_info*, gfp_t)
    function void cfg80211_rx_assoc_resp(net_device*, cfg80211_bss*, const u8*, size_t, int, const u8*, size_t)
    function bool cfg80211_rx_control_port(net_device*, sk_buff*, bool)
    function bool cfg80211_rx_mgmt(wireless_dev*, int, int, const u8*, size_t, u32)
    function void cfg80211_rx_mlme_mgmt(net_device*, const u8*, size_t)
    function bool cfg80211_rx_spurious_frame(net_device*, const u8*, gfp_t)
    function bool cfg80211_rx_unexpected_4addr_frame(net_device*, const u8*, gfp_t)
    function void cfg80211_rx_unprot_mlme_mgmt(net_device*, const u8*, size_t)
    function void cfg80211_scan_done(cfg80211_scan_request*, cfg80211_scan_info*)
    function void cfg80211_sched_scan_results(wiphy*, u64)
    function void cfg80211_sched_scan_stopped(wiphy*, u64)
    function void cfg80211_sched_scan_stopped_rtnl(wiphy*, u64)
    function void cfg80211_send_layer2_update(net_device*, const u8*)
    function void cfg80211_shutdown_all_interfaces(wiphy*)
    function void cfg80211_sta_opmode_change_notify(net_device*, const u8*, sta_opmode_info*, gfp_t)
    function void cfg80211_stop_iface(wiphy*, wireless_dev*, gfp_t)
    function void cfg80211_tdls_oper_request(net_device*, const u8*, nl80211_tdls_operation, u16, gfp_t)
    function void cfg80211_tx_mgmt_expired(wireless_dev*, u64, ieee80211_channel*, gfp_t)
    function void cfg80211_tx_mlme_mgmt(net_device*, const u8*, size_t)
    function void cfg80211_unlink_bss(wiphy*, cfg80211_bss*)
    function void cfg80211_unregister_wdev(wireless_dev*)
    function void cfg80211_update_owe_info_event(net_device*, cfg80211_update_owe_info*, gfp_t)
    function unsigned int cfg80211_vendor_cmd_get_sender(wiphy*)
    function void close_candev(net_device*)
    function int compat_ip_getsockopt(sock*, int, int, char*, int*)
    function int compat_ip_setsockopt(sock*, int, int, char*, unsigned int)
    function int compat_ipv6_getsockopt(sock*, int, int, char*, int*)
    function int compat_ipv6_setsockopt(sock*, int, int, char*, unsigned int)
    function int compat_mc_getsockopt(sock*, int, int, char*, int*, void ()*)
    function int compat_mc_setsockopt(sock*, int, int, char*, unsigned int, void ()*)
    function int compat_nf_getsockopt(sock*, u_int8_t, int, char*, int*)
    function int compat_nf_setsockopt(sock*, u_int8_t, int, char*, unsigned int)
    function int compat_sock_common_getsockopt(socket*, int, int, char*, int*)
    function int compat_sock_common_setsockopt(socket*, int, int, char*, unsigned int)
    function int compat_tcp_getsockopt(sock*, int, int, char*, int*)
    function int compat_tcp_setsockopt(sock*, int, int, char*, unsigned int)
    function __poll_t datagram_poll(file*, socket*, poll_table*)
    function void dev_activate(net_device*)
    function void dev_add_pack(packet_type*)
    function int dev_addr_add(net_device*, const unsigned char*, unsigned char)
    function int dev_addr_del(net_device*, const unsigned char*, unsigned char)
    function void dev_addr_flush(net_device*)
    function int dev_addr_init(net_device*)
    function int dev_alloc_name(net_device*, const char*)
    function int dev_change_carrier(net_device*, bool)
    function int dev_change_flags(net_device*, unsigned int, netlink_ext_ack*)
    function int dev_change_net_namespace(net_device*, net*, const char*)
    function int dev_change_proto_down(net_device*, bool)
    function int dev_change_proto_down_generic(net_device*, bool)
    function void dev_close(net_device*)
    function void dev_deactivate(net_device*)
    function void dev_disable_lro(net_device*)
    function int dev_fill_metadata_dst(net_device*, sk_buff*)
    function int dev_forward_skb(net_device*, sk_buff*)
    function net_device* dev_get_by_index(net*, int)
    function net_device* dev_get_by_index_rcu(net*, int)
    function net_device* dev_get_by_name(net*, const char*)
    function net_device* dev_get_by_name_rcu(net*, const char*)
    function net_device* dev_get_by_napi_id(unsigned int)
    function unsigned int dev_get_flags(const net_device*)
    function int dev_get_iflink(const net_device*)
    function int dev_get_phys_port_id(net_device*, netdev_phys_item_id*)
    function int dev_get_phys_port_name(net_device*, char*, size_t)
    function int dev_get_port_parent_id(net_device*, netdev_phys_item_id*, bool)
    function rtnl_link_stats64* dev_get_stats(net_device*, rtnl_link_stats64*)
    function int dev_get_valid_name(net*, net_device*, const char*)
    function net_device* dev_getbyhwaddr_rcu(net*, unsigned short int, const char*)
    function net_device* dev_getfirstbyhwtype(net*, unsigned short int)
    function Qdisc* dev_graft_qdisc(netdev_queue*, Qdisc*)
    function void dev_load(net*, const char*)
    function int dev_loopback_xmit(net*, sock*, sk_buff*)
    function int dev_mc_add(net_device*, const unsigned char*)
    function int dev_mc_add_excl(net_device*, const unsigned char*)
    function int dev_mc_add_global(net_device*, const unsigned char*)
    function int dev_mc_del(net_device*, const unsigned char*)
    function int dev_mc_del_global(net_device*, const unsigned char*)
    function void dev_mc_flush(net_device*)
    function void dev_mc_init(net_device*)
    function int dev_mc_sync(net_device*, net_device*)
    function int dev_mc_sync_multiple(net_device*, net_device*)
    function void dev_mc_unsync(net_device*, net_device*)
    function bool dev_nit_active(net_device*)
    function int dev_open(net_device*, netlink_ext_ack*)
    function u16 dev_pick_tx_cpu_id(net_device*, sk_buff*, net_device*)
    function u16 dev_pick_tx_zero(net_device*, sk_buff*, net_device*)
    function int dev_pre_changeaddr_notify(net_device*, const char*, netlink_ext_ack*)
    function int dev_queue_xmit_accel(sk_buff*, net_device*)
    function void dev_queue_xmit_nit(sk_buff*, net_device*)
    function void dev_remove_pack(packet_type*)
    function int dev_set_alias(net_device*, const char*, size_t)
    function int dev_set_allmulti(net_device*, int)
    function void dev_set_group(net_device*, int)
    function int dev_set_mac_address(net_device*, sockaddr*, netlink_ext_ack*)
    function int dev_set_mtu(net_device*, int)
    function int dev_set_promiscuity(net_device*, int)
    function unsigned long int dev_trans_start(net_device*)
    function int dev_uc_add(net_device*, const unsigned char*)
    function int dev_uc_add_excl(net_device*, const unsigned char*)
    function int dev_uc_del(net_device*, const unsigned char*)
    function void dev_uc_flush(net_device*)
    function void dev_uc_init(net_device*)
    function int dev_uc_sync(net_device*, net_device*)
    function int dev_uc_sync_multiple(net_device*, net_device*)
    function void dev_uc_unsync(net_device*, net_device*)
    function net_device* devm_alloc_etherdev_mqs(device*, int, unsigned int, unsigned int)
    function ssize_t do_tcp_sendpages(sock*, page*, int, size_t, int)
    function int do_xdp_generic(bpf_prog*, sk_buff*)
    function void* dst_alloc(dst_ops*, net_device*, int, int, unsigned short int)
    function dst_entry* dst_cache_get(dst_cache*)
    function rtable* dst_cache_get_ip4(dst_cache*, __be32*)
    function dst_entry* dst_cache_get_ip6(dst_cache*, in6_addr*)
    function void dst_cache_set_ip4(dst_cache*, dst_entry*, __be32)
    function void dst_cache_set_ip6(dst_cache*, dst_entry*, const in6_addr*)
    function u32* dst_cow_metrics_generic(dst_entry*, unsigned long int)
    function dst_entry* dst_destroy(dst_entry*)
    function void dst_dev_put(dst_entry*)
    function int dst_discard_out(net*, sock*, sk_buff*)
    function void dst_init(dst_entry*, dst_ops*, net_device*, int, int, unsigned short int)
    function void dst_release(dst_entry*)
    function void dst_release_immediate(dst_entry*)
    function int esp6_output_head(xfrm_state*, sk_buff*, esp_info*)
    function int esp6_output_tail(xfrm_state*, sk_buff*, esp_info*)
    function int esp_output_head(xfrm_state*, sk_buff*, esp_info*)
    function int esp_output_tail(xfrm_state*, sk_buff*, esp_info*)
    function int eth_change_mtu(net_device*, int)
    function void eth_commit_mac_addr_change(net_device*, void*)
    function u32 eth_get_headlen(const net_device*, void*, unsigned int)
    function int eth_header(sk_buff*, net_device*, unsigned short int, void*, void*, unsigned int)
    function int eth_header_cache(const neighbour*, hh_cache*, __be16)
    function void eth_header_cache_update(hh_cache*, const net_device*, const unsigned char*)
    function int eth_mac_addr(net_device*, void*)
    function int eth_prepare_mac_addr_change(net_device*, void*)
    function __be16 eth_type_trans(sk_buff*, net_device*)
    function int eth_validate_addr(net_device*)
    function void ether_setup(net_device*)
    function u32 ethtool_op_get_link(net_device*)
    function int ethtool_op_get_ts_info(net_device*, ethtool_ts_info*)
    function ethtool_rx_flow_rule* ethtool_rx_flow_rule_create(const ethtool_rx_flow_spec_input*)
    function void ethtool_rx_flow_rule_destroy(ethtool_rx_flow_rule*)
    function failover* failover_register(net_device*, failover_ops*)
    function int failover_slave_unregister(net_device*)
    function void failover_unregister(failover*)
    function bool fib4_rule_default(const fib_rule*)
    function int fib6_check_nexthop(nexthop*, fib6_config*, netlink_ext_ack*)
    function fib6_table* fib6_get_table(net*, u32)
    function fib6_table* fib6_new_table(net*, u32)
    function bool fib6_rule_default(const fib_rule*)
    function int fib_add_nexthop(sk_buff*, const fib_nh_common*, int, u8)
    function int fib_default_rule_add(fib_rules_ops*, u32, u32, u32)
    function bool fib_info_nh_uses_dev(fib_info*, const net_device*)
    function fib_table* fib_new_table(net*, u32)
    function int fib_nexthop_info(sk_buff*, const fib_nh_common*, u8, unsigned char*, bool)
    function int fib_nh_common_init(fib_nh_common*, nlattr*, u16, void*, gfp_t, netlink_ext_ack*)
    function void fib_nh_common_release(fib_nh_common*)
    function fib_notifier_ops* fib_notifier_ops_register(const fib_notifier_ops*, net*)
    function void fib_notifier_ops_unregister(fib_notifier_ops*)
    function bool fib_rule_matchall(const fib_rule*)
    function int fib_rules_dump(net*, notifier_block*, int)
    function int fib_rules_lookup(fib_rules_ops*, flowi*, int, fib_lookup_arg*)
    function fib_rules_ops* fib_rules_register(const fib_rules_ops*, net*)
    function unsigned int fib_rules_seq_read(net*, int)
    function void fib_rules_unregister(fib_rules_ops*)
    function int fib_table_lookup(fib_table*, const flowi4*, fib_result*, int)
    function Qdisc* fifo_create_dflt(Qdisc*, Qdisc_ops*, unsigned int, netlink_ext_ack*)
    function int fifo_set_limit(Qdisc*, unsigned int)
    function int fixed_phy_change_carrier(net_device*, bool)
    function phy_device* fixed_phy_register(unsigned int, fixed_phy_status*, device_node*)
    function phy_device* fixed_phy_register_with_gpiod(unsigned int, fixed_phy_status*, gpio_desc*)
    function int fixed_phy_set_link_update(phy_device*, void ()*)
    function void fixed_phy_unregister(phy_device*)
    function ipv6_txoptions* fl6_merge_options(ipv6_txoptions*, ip6_flowlabel*, ipv6_txoptions*)
    function int flow_block_cb_setup_simple(flow_block_offload*, list_head*, flow_setup_cb_t*, void*, void*, bool)
    function void flow_indr_block_call(net_device*, flow_block_offload*, flow_block_command)
    function flow_rule* flow_rule_alloc(unsigned int)
    function void flow_rule_match_basic(const flow_rule*, flow_match_basic*)
    function void flow_rule_match_control(const flow_rule*, flow_match_control*)
    function void flow_rule_match_cvlan(const flow_rule*, flow_match_vlan*)
    function void flow_rule_match_enc_control(const flow_rule*, flow_match_control*)
    function void flow_rule_match_enc_ip(const flow_rule*, flow_match_ip*)
    function void flow_rule_match_enc_ipv4_addrs(const flow_rule*, flow_match_ipv4_addrs*)
    function void flow_rule_match_enc_ipv6_addrs(const flow_rule*, flow_match_ipv6_addrs*)
    function void flow_rule_match_enc_keyid(const flow_rule*, flow_match_enc_keyid*)
    function void flow_rule_match_enc_opts(const flow_rule*, flow_match_enc_opts*)
    function void flow_rule_match_enc_ports(const flow_rule*, flow_match_ports*)
    function void flow_rule_match_eth_addrs(const flow_rule*, flow_match_eth_addrs*)
    function void flow_rule_match_icmp(const flow_rule*, flow_match_icmp*)
    function void flow_rule_match_ip(const flow_rule*, flow_match_ip*)
    function void flow_rule_match_ipv4_addrs(const flow_rule*, flow_match_ipv4_addrs*)
    function void flow_rule_match_ipv6_addrs(const flow_rule*, flow_match_ipv6_addrs*)
    function void flow_rule_match_meta(const flow_rule*, flow_match_meta*)
    function void flow_rule_match_mpls(const flow_rule*, flow_match_mpls*)
    function void flow_rule_match_ports(const flow_rule*, flow_match_ports*)
    function void flow_rule_match_tcp(const flow_rule*, flow_match_tcp*)
    function void flow_rule_match_vlan(const flow_rule*, flow_match_vlan*)
    function void fqdir_exit(fqdir*)
    function int fqdir_init(fqdir**, inet_frags*, net*)
    function void free_candev(net_device*)
    function void free_fib_info(fib_info*)
    function void free_netdev(net_device*)
    function const ieee80211_reg_rule* freq_reg_info(wiphy*, u32)
    function int gen10g_config_aneg(phy_device*)
    function int generic_mii_ioctl(mii_if_info*, mii_ioctl_data*, int, unsigned int*)
    function void generic_xdp_tx(sk_buff*, bpf_prog*)
    function nlattr** genl_family_attrbuf(const genl_family*)
    function void genl_notify(const genl_family*, sk_buff*, genl_info*, u32, gfp_t)
    function int genl_register_family(genl_family*)
    function int genl_unregister_family(const genl_family*)
    function int genlmsg_multicast_allns(const genl_family*, sk_buff*, u32, unsigned int, gfp_t)
    function void* genlmsg_put(sk_buff*, u32, u32, const genl_family*, int, u8)
    function int genphy_c45_an_config_aneg(phy_device*)
    function int genphy_c45_an_disable_aneg(phy_device*)
    function int genphy_c45_aneg_done(phy_device*)
    function int genphy_c45_check_and_restart_aneg(phy_device*, bool)
    function int genphy_c45_config_aneg(phy_device*)
    function int genphy_c45_pma_read_abilities(phy_device*)
    function int genphy_c45_pma_setup_forced(phy_device*)
    function int genphy_c45_read_link(phy_device*)
    function int genphy_c45_read_lpa(phy_device*)
    function int genphy_c45_read_mdix(phy_device*)
    function int genphy_c45_read_pma(phy_device*)
    function int genphy_c45_read_status(phy_device*)
    function int genphy_c45_restart_aneg(phy_device*)
    function net* get_net_ns_by_fd(int)
    function net* get_net_ns_by_pid(pid_t)
    function void gro_cells_destroy(gro_cells*)
    function int gro_cells_init(gro_cells*, net_device*)
    function int gro_cells_receive(gro_cells*, sk_buff*)
    function int hci_mgmt_chan_register(hci_mgmt_chan*)
    function void hci_mgmt_chan_unregister(hci_mgmt_chan*)
    function ieee80211_hw* ieee80211_alloc_hw_nm(size_t, const ieee80211_ops*, const char*)
    function sk_buff* ieee80211_ap_probereq_get(ieee80211_hw*, ieee80211_vif*)
    function sk_buff* ieee80211_beacon_get_template(ieee80211_hw*, ieee80211_vif*, ieee80211_mutable_offsets*)
    function sk_buff* ieee80211_beacon_get_tim(ieee80211_hw*, ieee80211_vif*, u16*, u16*)
    function __le16 ieee80211_ctstoself_duration(ieee80211_hw*, ieee80211_vif*, size_t, const ieee80211_tx_info*)
    function void ieee80211_ctstoself_get(ieee80211_hw*, ieee80211_vif*, void*, size_t, const ieee80211_tx_info*, ieee80211_cts*)
    function ieee80211_sta* ieee80211_find_sta_by_ifaddr(ieee80211_hw*, const u8*, const u8*)
    function void ieee80211_free_hw(ieee80211_hw*)
    function void ieee80211_free_txskb(ieee80211_hw*, sk_buff*)
    function __le16 ieee80211_generic_frame_duration(ieee80211_hw*, ieee80211_vif*, nl80211_band, size_t, ieee80211_rate*)
    function sk_buff* ieee80211_get_buffered_bc(ieee80211_hw*, ieee80211_vif*)
    function ieee80211_channel* ieee80211_get_channel(wiphy*, int)
    function unsigned int ieee80211_get_num_supported_channels(wiphy*)
    function void ieee80211_iter_chan_contexts_atomic(ieee80211_hw*, void ()*, void*)
    function void ieee80211_iter_keys(ieee80211_hw*, ieee80211_vif*, void ()*, void*)
    function void ieee80211_iter_keys_rcu(ieee80211_hw*, ieee80211_vif*, void ()*, void*)
    function void ieee80211_iterate_active_interfaces_atomic(ieee80211_hw*, u32, void ()*, void*)
    function void ieee80211_iterate_active_interfaces_rtnl(ieee80211_hw*, u32, void ()*, void*)
    function void ieee80211_iterate_interfaces(ieee80211_hw*, u32, void ()*, void*)
    function void ieee80211_iterate_stations_atomic(ieee80211_hw*, void ()*, void*)
    function ieee80211_txq* ieee80211_next_txq(ieee80211_hw*, u8)
    function sk_buff* ieee80211_nullfunc_get(ieee80211_hw*, ieee80211_vif*, bool)
    function sk_buff* ieee80211_probereq_get(ieee80211_hw*, const u8*, const u8*, size_t, size_t)
    function sk_buff* ieee80211_proberesp_get(ieee80211_hw*, ieee80211_vif*)
    function sk_buff* ieee80211_pspoll_get(ieee80211_hw*, ieee80211_vif*)
    function void ieee80211_queue_delayed_work(ieee80211_hw*, delayed_work*, unsigned long int)
    function int ieee80211_queue_stopped(ieee80211_hw*, int)
    function void ieee80211_queue_work(ieee80211_hw*, work_struct*)
    function void ieee80211_radar_detected(ieee80211_hw*)
    function int ieee80211_rate_control_register(const rate_control_ops*)
    function void ieee80211_rate_control_unregister(const rate_control_ops*)
    function void ieee80211_ready_on_channel(ieee80211_hw*)
    function int ieee80211_register_hw(ieee80211_hw*)
    function void ieee80211_remain_on_channel_expired(ieee80211_hw*)
    function void ieee80211_restart_hw(ieee80211_hw*)
    function __le16 ieee80211_rts_duration(ieee80211_hw*, ieee80211_vif*, size_t, const ieee80211_tx_info*)
    function void ieee80211_rts_get(ieee80211_hw*, ieee80211_vif*, void*, size_t, const ieee80211_tx_info*, ieee80211_rts*)
    function void ieee80211_rx_irqsafe(ieee80211_hw*, sk_buff*)
    function void ieee80211_rx_napi(ieee80211_hw*, ieee80211_sta*, sk_buff*, napi_struct*)
    function void ieee80211_scan_completed(ieee80211_hw*, cfg80211_scan_info*)
    function void ieee80211_sched_scan_results(ieee80211_hw*)
    function void ieee80211_sched_scan_stopped(ieee80211_hw*)
    function void ieee80211_sta_block_awake(ieee80211_hw*, ieee80211_sta*, bool)
    function void ieee80211_stop_queue(ieee80211_hw*, int)
    function void ieee80211_stop_queues(ieee80211_hw*)
    function sk_buff* ieee80211_tx_dequeue(ieee80211_hw*, ieee80211_txq*)
    function bool ieee80211_tx_prepare_skb(ieee80211_hw*, ieee80211_vif*, sk_buff*, int, ieee80211_sta**)
    function void ieee80211_tx_rate_update(ieee80211_hw*, ieee80211_sta*, ieee80211_tx_info*)
    function void ieee80211_tx_status(ieee80211_hw*, sk_buff*)
    function void ieee80211_tx_status_ext(ieee80211_hw*, ieee80211_tx_status*)
    function void ieee80211_tx_status_irqsafe(ieee80211_hw*, sk_buff*)
    function bool ieee80211_txq_may_transmit(ieee80211_hw*, ieee80211_txq*)
    function void ieee80211_txq_schedule_start(ieee80211_hw*, u8)
    function void ieee80211_unregister_hw(ieee80211_hw*)
    function wireless_dev* ieee80211_vif_to_wdev(ieee80211_vif*)
    function void ieee80211_wake_queue(ieee80211_hw*, int)
    function void ieee80211_wake_queues(ieee80211_hw*)
    function void in_dev_finish_destroy(in_device*)
    function int inet6_bind(socket*, sockaddr*, int)
    function void inet6_csk_addr2sockaddr(sock*, sockaddr*)
    function dst_entry* inet6_csk_route_req(const sock*, flowi6*, const request_sock*, u8)
    function dst_entry* inet6_csk_update_pmtu(sock*, u32)
    function int inet6_csk_xmit(sock*, sk_buff*, flowi*)
    function void inet6_destroy_sock(sock*)
    function int inet6_getname(socket*, sockaddr*, int)
    function int inet6_hash(sock*)
    function int inet6_hash_connect(inet_timewait_death_row*, sock*)
    function int inet6_ioctl(socket*, unsigned int, unsigned long int)
    function sock* inet6_lookup(net*, inet_hashinfo*, sk_buff*, int, const in6_addr*, const __be16, const in6_addr*, const __be16, const int)
    function sock* inet6_lookup_listener(net*, inet_hashinfo*, sk_buff*, int, const in6_addr*, const __be16, const in6_addr*, const unsigned short int, const int, const int)
    function int inet6_register_protosw(inet_protosw*)
    function int inet6_release(socket*)
    function int inet6_sk_rebuild_header(sock*)
    function void inet6_unregister_protosw(inet_protosw*)
    function int inet_accept(socket*, socket*, int, bool)
    function unsigned int inet_addr_type(net*, __be32)
    function unsigned int inet_addr_type_dev_table(net*, const net_device*, __be32)
    function unsigned int inet_addr_type_table(net*, __be32, u32)
    function int inet_bind(socket*, sockaddr*, int)
    function __be32 inet_confirm_addr(net*, in_device*, __be32, __be32, int)
    function sock* inet_csk_accept(sock*, int, int*, bool)
    function void inet_csk_addr2sockaddr(sock*, sockaddr*)
    function void inet_csk_clear_xmit_timers(sock*)
    function sock* inet_csk_clone_lock(const sock*, const request_sock*, const gfp_t)
    function int inet_csk_compat_getsockopt(sock*, int, int, char*, int*)
    function int inet_csk_compat_setsockopt(sock*, int, int, char*, unsigned int)
    function sock* inet_csk_complete_hashdance(sock*, sock*, request_sock*, bool)
    function void inet_csk_delete_keepalive_timer(sock*)
    function void inet_csk_destroy_sock(sock*)
    function int inet_csk_get_port(sock*, unsigned short int)
    function void inet_csk_init_xmit_timers(sock*, void ()*, void ()*, void ()*)
    function int inet_csk_listen_start(sock*, int)
    function void inet_csk_listen_stop(sock*)
    function void inet_csk_prepare_forced_close(sock*)
    function sock* inet_csk_reqsk_queue_add(sock*, request_sock*, sock*)
    function void inet_csk_reqsk_queue_drop(sock*, request_sock*)
    function void inet_csk_reqsk_queue_drop_and_put(sock*, request_sock*)
    function void inet_csk_reqsk_queue_hash_add(sock*, request_sock*, unsigned long int)
    function void inet_csk_reset_keepalive_timer(sock*, unsigned long int)
    function dst_entry* inet_csk_route_child_sock(const sock*, sock*, const request_sock*)
    function dst_entry* inet_csk_route_req(const sock*, flowi4*, const request_sock*)
    function dst_entry* inet_csk_update_pmtu(sock*, u32)
    function int inet_ctl_sock_create(sock**, unsigned short int, unsigned short int, unsigned char, net*)
    function unsigned int inet_dev_addr_type(net*, const net_device*, __be32)
    function int inet_dgram_connect(socket*, sockaddr*, int, int)
    function int inet_diag_bc_sk(const nlattr*, sock*)
    function sock* inet_diag_find_one_icsk(net*, inet_hashinfo*, const inet_diag_req_v2*)
    function int inet_diag_msg_attrs_fill(sock*, sk_buff*, inet_diag_msg*, int, user_namespace*, bool)
    function void inet_diag_msg_common_fill(inet_diag_msg*, sock*)
    function int inet_diag_register(const inet_diag_handler*)
    function void inet_diag_unregister(const inet_diag_handler*)
    function bool inet_ehash_nolisten(sock*, sock*)
    function inet_frag_queue* inet_frag_find(fqdir*, void*)
    function void inet_get_local_port_range(net*, int*, int*)
    function int inet_getname(socket*, sockaddr*, int)
    function int inet_hash(sock*)
    function int inet_hash_connect(inet_timewait_death_row*, sock*)
    function int inet_ioctl(socket*, unsigned int, unsigned long int)
    function int inet_listen(socket*, int)
    function int inet_pton_with_scope(net*, __kernel_sa_family_t, const char*, const char*, __kernel_sockaddr_storage*)
    function void inet_put_port(sock*)
    function bool inet_rcv_saddr_equal(const sock*, const sock*, bool)
    function int inet_recvmsg(socket*, msghdr*, size_t, int)
    function void inet_register_protosw(inet_protosw*)
    function int inet_release(socket*)
    function request_sock* inet_reqsk_alloc(const request_sock_ops*, sock*, bool)
    function int inet_rtx_syn_ack(const sock*, request_sock*)
    function __be32 inet_select_addr(const net_device*, __be32, int)
    function int inet_send_prepare(sock*)
    function int inet_sendmsg(socket*, msghdr*, size_t)
    function ssize_t inet_sendpage(socket*, page*, int, size_t, int)
    function int inet_shutdown(socket*, int)
    function int inet_sk_diag_fill(sock*, inet_connection_sock*, sk_buff*, const inet_diag_req_v2*, user_namespace*, u32, u32, u16, const nlmsghdr*, bool)
    function int inet_sk_rebuild_header(sock*)
    function void inet_sk_rx_dst_set(sock*, const sk_buff*)
    function void inet_sk_set_state(sock*, int)
    function void inet_sock_destruct(sock*)
    function int inet_stream_connect(socket*, sockaddr*, int, int)
    function inet_timewait_sock* inet_twsk_alloc(const sock*, inet_timewait_death_row*, const int)
    function void inet_twsk_hashdance(inet_timewait_sock*, sock*, inet_hashinfo*)
    function void inet_unhash(sock*)
    function void inet_unregister_protosw(inet_protosw*)
    function in_device* inetdev_by_index(net*, int)
    function int init_dummy_netdev(net_device*)
    function sock* io_uring_get_socket(file*)
    function int ip4_datagram_connect(sock*, sockaddr*, int)
    function void ip4_datagram_release_cb(sock*)
    function int ip6_append_data(sock*, void ()*, void*, int, int, ipcm6_cookie*, flowi6*, rt6_info*, unsigned int)
    function int ip6_datagram_connect(sock*, sockaddr*, int)
    function int ip6_datagram_connect_v6_only(sock*, sockaddr*, int)
    function void ip6_datagram_recv_ctl(sock*, msghdr*, sk_buff*)
    function void ip6_datagram_release_cb(sock*)
    function int ip6_datagram_send_ctl(net*, sock*, msghdr*, flowi6*, ipcm6_cookie*)
    function rt6_info* ip6_dst_alloc(net*, net_device*, int)
    function int ip6_dst_hoplimit(dst_entry*)
    function int ip6_dst_lookup(net*, sock*, dst_entry**, flowi6*)
    function dst_entry* ip6_dst_lookup_flow(const sock*, flowi6*, const in6_addr*)
    function void ip6_flush_pending_frames(sock*)
    function int ip6_local_out(net*, sock*, sk_buff*)
    function rt6_info* ip6_pol_route(net*, fib6_table*, int, flowi6*, const sk_buff*, int)
    function int ip6_push_pending_frames(sock*)
    function void ip6_redirect(sk_buff*, net*, int, u32, kuid_t)
    function dst_entry* ip6_route_input_lookup(net*, net_device*, flowi6*, const sk_buff*, int)
    function dst_entry* ip6_route_lookup(net*, flowi6*, const sk_buff*, int)
    function int ip6_route_me_harder(net*, sk_buff*)
    function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int)
    function dst_entry* ip6_route_output_flags_noref(net*, const sock*, flowi6*, int)
    function dst_entry* ip6_sk_dst_lookup_flow(sock*, flowi6*, const in6_addr*, bool)
    function void ip6_sk_redirect(sk_buff*, sock*)
    function void ip6_sk_update_pmtu(sk_buff*, sock*, __be32)
    function int ip6_tnl_change_mtu(net_device*, int)
    function int ip6_tnl_get_iflink(const net_device*)
    function net* ip6_tnl_get_link_net(const net_device*)
    function int ip6_tnl_rcv(ip6_tnl*, sk_buff*, const tnl_ptk_info*, metadata_dst*, bool)
    function int ip6_tnl_xmit(sk_buff*, net_device*, __u8, flowi6*, int, __u32*, __u8)
    function void ip6_update_pmtu(sk_buff*, net*, __be32, int, u32, kuid_t)
    function int ip6_xmit(const sock*, sk_buff*, flowi6*, __u32, ipv6_txoptions*, int, u32)
    function unsigned int ip6t_do_table(sk_buff*, const nf_hook_state*, xt_table*)
    function int ip6t_register_table(net*, const xt_table*, const ip6t_replace*, const nf_hook_ops*, xt_table**)
    function void ip6t_unregister_table(net*, xt_table*, const nf_hook_ops*)
    function int ip_build_and_send_pkt(sk_buff*, const sock*, __be32, __be32, ip_options_rcu*)
    function sk_buff* ip_check_defrag(net*, sk_buff*, u32)
    function void ip_cmsg_recv_offset(msghdr*, sock*, sk_buff*, int, int)
    function int ip_defrag(net*, sk_buff*, u32)
    function int ip_do_fragment(net*, sock*, sk_buff*, void ()*)
    function dst_metrics* ip_fib_metrics_init(net*, nlattr*, int, netlink_ext_ack*)
    function int ip_getsockopt(sock*, int, int, char*, int*)
    function int ip_local_out(net*, sock*, sk_buff*)
    function void ip_mc_inc_group(in_device*, __be32)
    function int ip_mc_join_group(sock*, ip_mreqn*)
    function int ip_mc_leave_group(sock*, ip_mreqn*)
    function void ip_md_tunnel_xmit(sk_buff*, net_device*, u8, int)
    function int ip_options_compile(net*, ip_options*, sk_buff*)
    function int ip_options_rcv_srr(sk_buff*, net_device*)
    function int ip_route_input_noref(sk_buff*, __be32, __be32, u8, net_device*)
    function int ip_route_me_harder(net*, sk_buff*, unsigned int)
    function rtable* ip_route_output_flow(net*, flowi4*, const sock*)
    function rtable* ip_route_output_key_hash(net*, flowi4*, const sk_buff*)
    function int ip_setsockopt(sock*, int, int, char*, unsigned int)
    function int ip_tunnel_change_mtu(net_device*, int)
    function int ip_tunnel_changelink(net_device*, nlattr**, ip_tunnel_parm*, __u32)
    function void ip_tunnel_delete_nets(list_head*, unsigned int, rtnl_link_ops*)
    function void ip_tunnel_dellink(net_device*, list_head*)
    function int ip_tunnel_encap_setup(ip_tunnel*, ip_tunnel_encap*)
    function int ip_tunnel_get_iflink(const net_device*)
    function net* ip_tunnel_get_link_net(const net_device*)
    function void ip_tunnel_get_stats64(net_device*, rtnl_link_stats64*)
    function int ip_tunnel_init(net_device*)
    function int ip_tunnel_init_net(net*, unsigned int, rtnl_link_ops*, char*)
    function int ip_tunnel_ioctl(net_device*, ip_tunnel_parm*, int)
    function ip_tunnel* ip_tunnel_lookup(ip_tunnel_net*, int, __be16, __be32, __be32, __be32)
    function int ip_tunnel_newlink(net_device*, nlattr**, ip_tunnel_parm*, __u32)
    function int ip_tunnel_rcv(ip_tunnel*, sk_buff*, const tnl_ptk_info*, metadata_dst*, bool)
    function void ip_tunnel_setup(net_device*, unsigned int)
    function void ip_tunnel_uninit(net_device*)
    function void ip_tunnel_xmit(sk_buff*, net_device*, const iphdr*, u8)
    function int ip_valid_fib_dump_req(net*, const nlmsghdr*, fib_dump_filter*, netlink_callback*)
    function void ipcomp_destroy(xfrm_state*)
    function int ipcomp_init_state(xfrm_state*)
    function int ipcomp_input(xfrm_state*, sk_buff*)
    function int ipcomp_output(xfrm_state*, sk_buff*)
    function unsigned int ipt_do_table(sk_buff*, const nf_hook_state*, xt_table*)
    function int ipt_register_table(net*, const xt_table*, const ipt_replace*, const nf_hook_ops*, xt_table**)
    function void ipt_unregister_table(net*, xt_table*, const nf_hook_ops*)
    function metadata_dst* iptunnel_metadata_reply(metadata_dst*, gfp_t)
    function void iptunnel_xmit(sock*, rtable*, sk_buff*, __be32, __be32, __u8, __u8, __u8, __be16, bool)
    function void ipv4_redirect(sk_buff*, net*, int, u8)
    function void ipv4_sk_redirect(sk_buff*, sock*)
    function void ipv4_sk_update_pmtu(sk_buff*, sock*, u32)
    function void ipv4_update_pmtu(sk_buff*, net*, u32, int, u8)
    function int ipv6_chk_addr(net*, const in6_addr*, const net_device*, int)
    function int ipv6_chk_addr_and_flags(net*, const in6_addr*, const net_device*, bool, int, u32)
    function bool ipv6_chk_custom_prefix(const in6_addr*, const unsigned int, net_device*)
    function int ipv6_chk_prefix(const in6_addr*, net_device*)
    function int ipv6_dev_get_saddr(net*, const net_device*, const in6_addr*, unsigned int, in6_addr*)
    function int ipv6_dev_mc_dec(net_device*, const in6_addr*)
    function int ipv6_dev_mc_inc(net_device*, const in6_addr*)
    function ipv6_txoptions* ipv6_dup_options(sock*, ipv6_txoptions*)
    function int ipv6_getsockopt(sock*, int, int, char*, int*)
    function bool ipv6_opt_accepted(const sock*, const sk_buff*, const inet6_skb_parm*)
    function __be32 ipv6_proxy_select_ident(net*, sk_buff*)
    function int ipv6_recv_error(sock*, msghdr*, int, int*)
    function __be32 ipv6_select_ident(net*, const in6_addr*, const in6_addr*)
    function int ipv6_setsockopt(sock*, int, int, char*, unsigned int)
    function int ipv6_sock_mc_drop(sock*, int, const in6_addr*)
    function int ipv6_sock_mc_join(sock*, int, const in6_addr*)
    function bool is_skb_forwardable(const net_device*, const sk_buff*)
    function int iw_handler_get_spy(net_device*, iw_request_info*, iwreq_data*, char*)
    function int iw_handler_get_thrspy(net_device*, iw_request_info*, iwreq_data*, char*)
    function int iw_handler_set_spy(net_device*, iw_request_info*, iwreq_data*, char*)
    function int iw_handler_set_thrspy(net_device*, iw_request_info*, iwreq_data*, char*)
    function int kernel_accept(socket*, socket**, int)
    function int kernel_bind(socket*, sockaddr*, int)
    function int kernel_connect(socket*, sockaddr*, int, int)
    function int kernel_getpeername(socket*, sockaddr*)
    function int kernel_getsockname(socket*, sockaddr*)
    function int kernel_getsockopt(socket*, int, int, char*, int*)
    function int kernel_listen(socket*, int)
    function int kernel_recvmsg(socket*, msghdr*, kvec*, size_t, size_t, int)
    function int kernel_sendmsg(socket*, msghdr*, kvec*, size_t, size_t)
    function int kernel_sendmsg_locked(sock*, msghdr*, kvec*, size_t, size_t)
    function int kernel_sendpage(socket*, page*, int, size_t, int)
    function int kernel_sendpage_locked(sock*, page*, int, size_t, int)
    function int kernel_setsockopt(socket*, int, int, char*, unsigned int)
    function u32 kernel_sock_ip_overhead(sock*)
    function int kernel_sock_shutdown(socket*, sock_shutdown_cmd)
    function int km_new_mapping(xfrm_state*, xfrm_address_t*, __be16)
    function void km_policy_notify(xfrm_policy*, int, const km_event*)
    function int km_query(xfrm_state*, xfrm_tmpl*, xfrm_policy*)
    function int km_report(net*, u8, xfrm_selector*, xfrm_address_t*)
    function void km_state_expired(xfrm_state*, int, u32)
    function void km_state_notify(xfrm_state*, const km_event*)
    function bool l2cap_is_socket(socket*)
    function void l2tp_recv_common(l2tp_session*, sk_buff*, unsigned char*, unsigned char*, u16, int)
    function l2tp_session* l2tp_session_create(int, l2tp_tunnel*, u32, u32, l2tp_session_cfg*)
    function int l2tp_session_delete(l2tp_session*)
    function void l2tp_session_free(l2tp_session*)
    function l2tp_session* l2tp_session_get(const net*, u32)
    function l2tp_session* l2tp_session_get_by_ifname(const net*, const char*)
    function l2tp_session* l2tp_session_get_nth(l2tp_tunnel*, int)
    function int l2tp_session_register(l2tp_session*, l2tp_tunnel*)
    function void l2tp_session_set_header_len(l2tp_session*, int)
    function int l2tp_tunnel_create(net*, int, int, u32, u32, l2tp_tunnel_cfg*, l2tp_tunnel**)
    function void l2tp_tunnel_delete(l2tp_tunnel*)
    function void l2tp_tunnel_free(l2tp_tunnel*)
    function l2tp_tunnel* l2tp_tunnel_get(const net*, u32)
    function l2tp_tunnel* l2tp_tunnel_get_nth(const net*, int)
    function l2tp_session* l2tp_tunnel_get_session(l2tp_tunnel*, u32)
    function int l2tp_tunnel_register(l2tp_tunnel*, net*, l2tp_tunnel_cfg*)
    function int l2tp_udp_encap_recv(sock*, sk_buff*)
    function int l2tp_xmit_skb(l2tp_session*, sk_buff*, int)
    function void linkwatch_fire_event(net_device*)
    function void llc_add_pack(int, void ()*)
    function int llc_build_and_send_ui_pkt(llc_sap*, sk_buff*, unsigned char*, unsigned char)
    function void llc_sap_close(llc_sap*)
    function llc_sap* llc_sap_find(unsigned char)
    function llc_sap* llc_sap_open(unsigned char, void ()*)
    function bool lock_sock_fast(sock*)
    function void lock_sock_nested(sock*, int)
    function phy_device* mdiobus_get_phy(mii_bus*, int)
    function phy_device* mdiobus_scan(mii_bus*, int)
    function metadata_dst* metadata_dst_alloc(u8, metadata_type, gfp_t)
    function metadata_dst* metadata_dst_alloc_percpu(u8, metadata_type, gfp_t)
    function void metadata_dst_free(metadata_dst*)
    function void metadata_dst_free_percpu(metadata_dst*)
    function int mii_check_gmii_support(mii_if_info*)
    function void mii_check_link(mii_if_info*)
    function unsigned int mii_check_media(mii_if_info*, unsigned int, unsigned int)
    function void mii_ethtool_get_link_ksettings(mii_if_info*, ethtool_link_ksettings*)
    function int mii_ethtool_gset(mii_if_info*, ethtool_cmd*)
    function int mii_ethtool_set_link_ksettings(mii_if_info*, const ethtool_link_ksettings*)
    function int mii_ethtool_sset(mii_if_info*, ethtool_cmd*)
    function int mii_link_ok(mii_if_info*)
    function int mii_nway_restart(mii_if_info*)
    function void mini_qdisc_pair_init(mini_Qdisc_pair*, Qdisc*, mini_Qdisc**)
    function void mini_qdisc_pair_swap(mini_Qdisc_pair*, tcf_proto*)
    function bool napi_complete_done(napi_struct*, int)
    function void napi_disable(napi_struct*)
    function sk_buff* napi_get_frags(napi_struct*)
    function void napi_gro_flush(napi_struct*, bool)
    function gro_result_t napi_gro_frags(napi_struct*)
    function gro_result_t napi_gro_receive(napi_struct*, sk_buff*)
    function bool napi_hash_del(napi_struct*)
    function bool napi_schedule_prep(napi_struct*)
    function int ndisc_mc_map(const in6_addr*, char*, net_device*, int)
    function int ndo_dflt_bridge_getlink(sk_buff*, u32, u32, net_device*, u16, u32, u32, int, u32, void ()*)
    function int ndo_dflt_fdb_add(ndmsg*, nlattr**, net_device*, const unsigned char*, u16, u16)
    function int ndo_dflt_fdb_del(ndmsg*, nlattr**, net_device*, const unsigned char*, u16)
    function int ndo_dflt_fdb_dump(sk_buff*, netlink_callback*, net_device*, net_device*, int*)
    function void neigh_app_ns(neighbour*)
    function int neigh_carrier_down(neigh_table*, net_device*)
    function void neigh_changeaddr(neigh_table*, net_device*)
    function int neigh_connected_output(neighbour*, sk_buff*)
    function void neigh_destroy(neighbour*)
    function int neigh_direct_output(neighbour*, sk_buff*)
    function neighbour* neigh_event_ns(neigh_table*, u8*, void*, net_device*)
    function void neigh_for_each(neigh_table*, void ()*, void*)
    function int neigh_ifdown(neigh_table*, net_device*)
    function neighbour* neigh_lookup(neigh_table*, void*, net_device*)
    function neighbour* neigh_lookup_nodev(neigh_table*, net*, void*)
    function neigh_parms* neigh_parms_alloc(net_device*, neigh_table*)
    function void neigh_parms_release(neigh_table*, neigh_parms*)
    function int neigh_resolve_output(neighbour*, sk_buff*)
    function void* neigh_seq_start(seq_file*, loff_t*, neigh_table*, unsigned int)
    function int neigh_sysctl_register(net_device*, neigh_parms*, proc_handler*)
    function void neigh_sysctl_unregister(neigh_parms*)
    function int neigh_table_clear(int, neigh_table*)
    function void neigh_table_init(int, neigh_table*)
    function int neigh_update(neighbour*, const u8*, u8, u32, u32)
    function int neigh_xmit(int, net_device*, void*, sk_buff*)
    function failover* net_failover_create(net_device*)
    function void net_failover_destroy(failover*)
    function void netdev_adjacent_change_abort(net_device*, net_device*, net_device*)
    function void netdev_adjacent_change_commit(net_device*, net_device*, net_device*)
    function int netdev_adjacent_change_prepare(net_device*, net_device*, net_device*, netlink_ext_ack*)
    function void netdev_alert(const net_device*, const char*, ...)
    function int netdev_bind_sb_channel_queue(net_device*, net_device*, u8, u16, u16)
    function void netdev_bonding_info_change(net_device*, netdev_bonding_info*)
    function int netdev_boot_setup_check(net_device*)
    function void netdev_change_features(net_device*)
    function void netdev_crit(const net_device*, const char*, ...)
    function void netdev_emerg(const net_device*, const char*, ...)
    function void netdev_err(const net_device*, const char*, ...)
    function void netdev_features_change(net_device*)
    function bool netdev_has_any_upper_dev(net_device*)
    function bool netdev_has_upper_dev(net_device*, net_device*)
    function bool netdev_has_upper_dev_all_rcu(net_device*, net_device*)
    function void netdev_info(const net_device*, const char*, ...)
    function bool netdev_is_rx_handler_busy(net_device*)
    function void* netdev_lower_dev_get_private(net_device*, net_device*)
    function void* netdev_lower_get_first_private_rcu(net_device*)
    function void* netdev_lower_get_next(net_device*, list_head**)
    function void* netdev_lower_get_next_private(net_device*, list_head**)
    function void* netdev_lower_get_next_private_rcu(net_device*, list_head**)
    function void netdev_lower_state_changed(net_device*, void*)
    function net_device* netdev_master_upper_dev_get(net_device*)
    function net_device* netdev_master_upper_dev_get_rcu(net_device*)
    function int netdev_master_upper_dev_link(net_device*, net_device*, void*, void*, netlink_ext_ack*)
    function void netdev_notice(const net_device*, const char*, ...)
    function void netdev_notify_peers(net_device*)
    function u16 netdev_pick_tx(net_device*, sk_buff*, net_device*)
    function bool netdev_port_same_parent_id(net_device*, net_device*)
    function void netdev_printk(const char*, const net_device*, const char*, ...)
    function int netdev_refcnt_read(const net_device*)
    function void netdev_reset_tc(net_device*)
    function void netdev_rx_csum_fault(net_device*, sk_buff*)
    function int netdev_rx_handler_register(net_device*, rx_handler_func_t*, void*)
    function void netdev_rx_handler_unregister(net_device*)
    function void netdev_set_default_ethtool_ops(net_device*, const ethtool_ops*)
    function int netdev_set_num_tc(net_device*, u8)
    function int netdev_set_sb_channel(net_device*, u16)
    function int netdev_set_tc_queue(net_device*, u8, u16, u16)
    function void netdev_state_change(net_device*)
    function int netdev_txq_to_tc(net_device*, unsigned int)
    function void netdev_unbind_sb_channel(net_device*, net_device*)
    function void netdev_update_features(net_device*)
    function void netdev_update_lockdep_key(net_device*)
    function int netdev_upper_dev_link(net_device*, net_device*, netlink_ext_ack*)
    function void netdev_upper_dev_unlink(net_device*, net_device*)
    function net_device* netdev_upper_get_next_dev_rcu(net_device*, list_head**)
    function int netdev_walk_all_lower_dev(net_device*, void ()*, void*)
    function int netdev_walk_all_lower_dev_rcu(net_device*, void ()*, void*)
    function int netdev_walk_all_upper_dev_rcu(net_device*, void ()*, void*)
    function void netdev_warn(const net_device*, const char*, ...)
    function void netif_carrier_off(net_device*)
    function void netif_carrier_on(net_device*)
    function void netif_device_attach(net_device*)
    function void netif_device_detach(net_device*)
    function void netif_napi_add(net_device*, napi_struct*, void ()*, int)
    function void netif_napi_del(napi_struct*)
    function void netif_schedule_queue(netdev_queue*)
    function int netif_set_real_num_rx_queues(net_device*, unsigned int)
    function int netif_set_real_num_tx_queues(net_device*, unsigned int)
    function int netif_set_xps_queue(net_device*, const cpumask*, u16)
    function void netif_stacked_transfer_operstate(const net_device*, net_device*)
    function void netif_tx_stop_all_queues(net_device*)
    function void netif_tx_wake_queue(netdev_queue*)
    function int netlink_add_tap(netlink_tap*)
    function int netlink_broadcast(sock*, sk_buff*, u32, u32, gfp_t)
    function int netlink_broadcast_filtered(sock*, sk_buff*, u32, u32, gfp_t, void ()*, void*)
    function int netlink_has_listeners(sock*, unsigned int)
    function void netlink_kernel_release(sock*)
    function int netlink_remove_tap(netlink_tap*)
    function int netlink_set_err(sock*, u32, u32, int)
    function int netlink_unicast(sock*, sk_buff*, u32, int)
    function nexthop* nexthop_find_by_id(net*, u32)
    function int nexthop_for_each_fib6_nh(nexthop*, void ()*, void*)
    function nexthop* nexthop_select_path(nexthop*, int)
    function int nf_conncount_add(net*, nf_conncount_list*, const nf_conntrack_tuple*, const nf_conntrack_zone*)
    function unsigned int nf_conncount_count(net*, nf_conncount_data*, const u32*, const nf_conntrack_tuple*, const nf_conntrack_zone*)
    function void nf_conncount_destroy(net*, unsigned int, nf_conncount_data*)
    function bool nf_conncount_gc_list(net*, nf_conncount_list*)
    function nf_conncount_data* nf_conncount_init(net*, unsigned int, unsigned int)
    function nf_conn* nf_conntrack_alloc(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*, const nf_conntrack_tuple*, gfp_t)
    function nf_conntrack_tuple_hash* nf_conntrack_find_get(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)
    function unsigned int nf_conntrack_in(sk_buff*, const nf_hook_state*)
    function int nf_conntrack_register_notifier(net*, nf_ct_event_notifier*)
    function void nf_conntrack_unregister_notifier(net*, nf_ct_event_notifier*)
    function void nf_ct_bridge_register(nf_ct_bridge_info*)
    function void nf_ct_bridge_unregister(nf_ct_bridge_info*)
    function nf_conntrack_expect* nf_ct_expect_find_get(net*, const nf_conntrack_zone*, const nf_conntrack_tuple*)
    function void nf_ct_expect_iterate_net(net*, void ()*, void*, u32, int)
    function int nf_ct_expect_register_notifier(net*, nf_exp_event_notifier*)
    function void nf_ct_expect_unregister_notifier(net*, nf_exp_event_notifier*)
    function int nf_ct_frag6_gather(net*, sk_buff*, u32)
    function bool nf_ct_get_tuplepr(const sk_buff*, unsigned int, u_int16_t, net*, nf_conntrack_tuple*)
    function void nf_ct_iterate_cleanup_net(net*, void ()*, void*, u32, int)
    function const nf_conntrack_l4proto* nf_ct_l4proto_find(u8)
    function int nf_ct_netns_get(net*, u8)
    function void nf_ct_netns_put(net*, uint8_t)
    function nf_conn* nf_ct_tmpl_alloc(net*, const nf_conntrack_zone*, gfp_t)
    function void nf_ct_unconfirmed_destroy(net*)
    function int nf_defrag_ipv4_enable(net*)
    function int nf_defrag_ipv6_enable(net*)
    function int nf_getsockopt(sock*, u_int8_t, int, char*, int*)
    function void nf_hook_entries_delete_raw(nf_hook_entries**, const nf_hook_ops*)
    function int nf_hook_entries_insert_raw(nf_hook_entries**, const nf_hook_ops*)
    function int nf_hook_slow(sk_buff*, nf_hook_state*, const nf_hook_entries*, unsigned int)
    function int nf_ip_route(net*, dst_entry**, flowi*, bool)
    function void nf_l4proto_log_invalid(const sk_buff*, net*, u16, u8, const char*, ...)
    function int nf_log_bind_pf(net*, u_int8_t, const nf_logger*)
    function void nf_log_packet(net*, u_int8_t, unsigned int, const sk_buff*, const net_device*, const net_device*, const nf_loginfo*, const char*, ...)
    function int nf_log_set(net*, u_int8_t, const nf_logger*)
    function void nf_log_trace(net*, u_int8_t, unsigned int, const sk_buff*, const net_device*, const net_device*, const nf_loginfo*, const char*, ...)
    function void nf_log_unbind_pf(net*, u_int8_t)
    function void nf_log_unset(net*, const nf_logger*)
    function unsigned int nf_nat_inet_fn(void*, sk_buff*, const nf_hook_state*)
    function int nf_nat_ipv4_register_fn(net*, const nf_hook_ops*)
    function void nf_nat_ipv4_unregister_fn(net*, const nf_hook_ops*)
    function int nf_nat_ipv6_register_fn(net*, const nf_hook_ops*)
    function void nf_nat_ipv6_unregister_fn(net*, const nf_hook_ops*)
    function unsigned int nf_nat_masquerade_ipv4(sk_buff*, unsigned int, const nf_nat_range2*, const net_device*)
    function unsigned int nf_nat_masquerade_ipv6(sk_buff*, const nf_nat_range2*, const net_device*)
    function int nf_queue(sk_buff*, nf_hook_state*, unsigned int, unsigned int)
    function void nf_queue_entry_get_refs(nf_queue_entry*)
    function void nf_queue_entry_release_refs(nf_queue_entry*)
    function void nf_queue_nf_hook_drop(net*)
    function int nf_register_net_hook(net*, const nf_hook_ops*)
    function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int)
    function void nf_register_queue_handler(net*, const nf_queue_handler*)
    function int nf_register_sockopt(nf_sockopt_ops*)
    function void nf_reinject(nf_queue_entry*, unsigned int)
    function int nf_route(net*, dst_entry**, flowi*, bool, unsigned short int)
    function void nf_send_reset(net*, sk_buff*, int)
    function void nf_send_reset6(net*, sk_buff*, int)
    function void nf_send_unreach6(net*, sk_buff*, unsigned char, unsigned int)
    function int nf_setsockopt(sock*, u_int8_t, int, char*, unsigned int)
    function sock* nf_sk_lookup_slow_v4(net*, const sk_buff*, const net_device*)
    function sock* nf_sk_lookup_slow_v6(net*, const sk_buff*, const net_device*)
    function sock* nf_tproxy_get_sock_v4(net*, sk_buff*, const u8, const __be32, const __be32, const __be16, const __be16, const net_device*, const nf_tproxy_lookup_t)
    function sock* nf_tproxy_get_sock_v6(net*, sk_buff*, int, const u8, const in6_addr*, const in6_addr*, const __be16, const __be16, const net_device*, const nf_tproxy_lookup_t)
    function sock* nf_tproxy_handle_time_wait4(net*, sk_buff*, __be32, __be16, sock*)
    function sock* nf_tproxy_handle_time_wait6(sk_buff*, int, int, net*, const in6_addr*, const __be16, sock*)
    function void nf_unregister_net_hook(net*, const nf_hook_ops*)
    function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int)
    function void nf_unregister_queue_handler(net*)
    function void nf_unregister_sockopt(nf_sockopt_ops*)
    function int nf_xfrm_me_harder(net*, sk_buff*, unsigned int)
    function int nfnetlink_has_listeners(net*, unsigned int)
    function int nfnetlink_send(sk_buff*, net*, u32, unsigned int, int, gfp_t)
    function int nfnetlink_set_err(net*, u32, u32, int)
    function int nfnetlink_subsys_register(const nfnetlink_subsystem*)
    function int nfnetlink_subsys_unregister(const nfnetlink_subsystem*)
    function int nfnetlink_unicast(sk_buff*, net*, u32, int)
    function int nlmsg_notify(sock*, sk_buff*, u32, unsigned int, int, gfp_t)
    function void of_can_transceiver(net_device*)
    function net_device* of_find_net_device_by_node(device_node*)
    function phy_device* of_phy_attach(net_device*, device_node*, u32, phy_interface_t)
    function phy_device* of_phy_connect(net_device*, device_node*, void ()*, u32, phy_interface_t)
    function phy_device* of_phy_find_device(device_node*)
    function phy_device* of_phy_get_and_connect(net_device*, device_node*, void ()*)
    function int open_candev(net_device*)
    function netdev_features_t passthru_features_check(sk_buff*, net_device*, netdev_features_t)
    function int peernet2id(net*, net*)
    function int peernet2id_alloc(net*, net*, gfp_t)
    function phy_device* phy_attach(net_device*, const char*, phy_interface_t)
    function int phy_attach_direct(net_device*, phy_device*, u32, phy_interface_t)
    function phy_device* phy_connect(net_device*, const char*, void ()*, phy_interface_t)
    function int phy_connect_direct(net_device*, phy_device*, void ()*, phy_interface_t)
    function int phy_ethtool_get_link_ksettings(net_device*, ethtool_link_ksettings*)
    function int phy_ethtool_nway_reset(net_device*)
    function int phy_ethtool_set_link_ksettings(net_device*, const ethtool_link_ksettings*)
    function int phy_modify(phy_device*, u32, u16, u16)
    function int phy_modify_changed(phy_device*, u32, u16, u16)
    function int phy_modify_mmd(phy_device*, int, u32, u16, u16)
    function int phy_modify_mmd_changed(phy_device*, int, u32, u16, u16)
    function int phy_modify_paged(phy_device*, int, u32, u16, u16)
    function int phy_modify_paged_changed(phy_device*, int, u32, u16, u16)
    function int phy_read_mmd(phy_device*, int, u32)
    function int phy_read_paged(phy_device*, int, u32)
    function void phy_resolve_aneg_linkmode(phy_device*)
    function void phy_resolve_aneg_pause(phy_device*)
    function int phy_restore_page(phy_device*, int, int)
    function int phy_save_page(phy_device*)
    function int phy_select_page(phy_device*, int)
    function int phy_set_max_speed(phy_device*, u32)
    function int phy_write_mmd(phy_device*, int, u32, u16)
    function int phy_write_paged(phy_device*, int, u32, u16)
    function int ping_bind(sock*, sockaddr*, int)
    function void ping_close(sock*, long int)
    function int ping_get_port(sock*, unsigned short int)
    function int ping_hash(sock*)
    function int ping_init_sock(sock*)
    function int ping_queue_rcv_skb(sock*, sk_buff*)
    function int ping_recvmsg(sock*, msghdr*, size_t, int, int, int*)
    function void ping_unhash(sock*)
    function void pneigh_enqueue(neigh_table*, neigh_parms*, sk_buff*)
    function pneigh_entry* pneigh_lookup(neigh_table*, net*, void*, net_device*, int)
    function int ppp_register_net_channel(net*, ppp_channel*)
    function int pppox_compat_ioctl(socket*, unsigned int, unsigned long int)
    function int pppox_ioctl(socket*, unsigned int, unsigned long int)
    function void pppox_unbind_sock(sock*)
    function void print_tuple(seq_file*, const nf_conntrack_tuple*, const nf_conntrack_l4proto*)
    function void qdisc_class_hash_grow(Qdisc*, Qdisc_class_hash*)
    function Qdisc* qdisc_create_dflt(netdev_queue*, const Qdisc_ops*, unsigned int, netlink_ext_ack*)
    function void qdisc_hash_add(Qdisc*, bool)
    function void qdisc_hash_del(Qdisc*)
    function int qdisc_offload_dump_helper(Qdisc*, tc_setup_type, void*)
    function void qdisc_offload_graft_helper(net_device*, Qdisc*, Qdisc*, Qdisc*, tc_setup_type, void*, netlink_ext_ack*)
    function void qdisc_put(Qdisc*)
    function void qdisc_put_unlocked(Qdisc*)
    function void qdisc_reset(Qdisc*)
    function void qdisc_tree_reduce_backlog(Qdisc*, int, int)
    function void qdisc_warn_nonwc(const char*, Qdisc*)
    function void qdisc_watchdog_cancel(qdisc_watchdog*)
    function void qdisc_watchdog_init(qdisc_watchdog*, Qdisc*)
    function void qdisc_watchdog_init_clockid(qdisc_watchdog*, Qdisc*, clockid_t)
    function void qdisc_watchdog_schedule_ns(qdisc_watchdog*, u64)
    function int rate_control_set_rates(ieee80211_hw*, ieee80211_sta*, ieee80211_sta_rates*)
    function int raw_abort(sock*, int)
    function int raw_hash_sk(sock*)
    function void raw_unhash_sk(sock*)
    function datalink_proto* register_8022_client(unsigned char, void ()*)
    function int register_candev(net_device*)
    function int register_gifconf(unsigned int, gifconf_func_t*)
    function ctl_table_header* register_net_sysctl(net*, const char*, ctl_table*)
    function int register_netdev(net_device*)
    function int register_netdevice(net_device*)
    function int register_pernet_device(pernet_operations*)
    function int register_pernet_subsys(pernet_operations*)
    function int register_pppox_proto(int, const pppox_proto*)
    function int register_qdisc(Qdisc_ops*)
    function datalink_proto* register_snap_client(const unsigned char*, void ()*)
    function int register_tcf_proto_ops(tcf_proto_ops*)
    function int regulatory_hint(wiphy*, const char*)
    function bool regulatory_pre_cac_allowed(wiphy*)
    function int regulatory_set_wiphy_regd(wiphy*, ieee80211_regdomain*)
    function int regulatory_set_wiphy_regd_sync_rtnl(wiphy*, ieee80211_regdomain*)
    function void release_sock(sock*)
    function int reuseport_add_sock(sock*, sock*, bool)
    function int reuseport_alloc(sock*, bool)
    function int reuseport_attach_prog(sock*, bpf_prog*)
    function int reuseport_detach_prog(sock*)
    function void reuseport_detach_sock(sock*)
    function sock* reuseport_select_sock(sock*, u32, sk_buff*, int)
    function bool rps_may_expire_flow(net_device*, u16, u32, u16)
    function rt6_info* rt6_lookup(net*, const in6_addr*, const in6_addr*, int, const sk_buff*, int)
    function rtable* rt_dst_alloc(net_device*, unsigned int, u16, bool, bool, bool)
    function rtable* rt_dst_clone(net_device*, rtable*)
    function void rtnl_af_register(rtnl_af_ops*)
    function void rtnl_af_unregister(rtnl_af_ops*)
    function int rtnl_configure_link(net_device*, const ifinfomsg*)
    function net_device* rtnl_create_link(net*, const char*, unsigned char, const rtnl_link_ops*, nlattr**, netlink_ext_ack*)
    function int rtnl_delete_link(net_device*)
    function net* rtnl_get_net_ns_capable(sock*, int)
    function net* rtnl_link_get_net(net*, nlattr**)
    function int rtnl_link_register(rtnl_link_ops*)
    function void rtnl_link_unregister(rtnl_link_ops*)
    function void rtnl_notify(sk_buff*, net*, u32, u32, nlmsghdr*, gfp_t)
    function int rtnl_put_cacheinfo(sk_buff*, dst_entry*, u32, long int, u32)
    function void rtnl_set_sk_err(net*, u32, int)
    function int rtnl_unicast(sk_buff*, net*, u32)
    function can_priv* safe_candev_priv(net_device*)
    function sec_path* secpath_set(sk_buff*)
    function u32 secure_tcpv6_ts_off(const net*, const __be32*, const __be32*)
    function void setup_udp_tunnel_sock(net*, socket*, udp_tunnel_sock_cfg*)
    function sock* sk_alloc(net*, int, gfp_t, proto*, int)
    function int sk_attach_filter(sock_fprog*, sock*)
    function bool sk_capable(const sock*, int)
    function void sk_clear_memalloc(sock*)
    function sock* sk_clone_lock(const sock*, const gfp_t)
    function void sk_common_release(sock*)
    function int sk_detach_filter(sock*)
    function dst_entry* sk_dst_check(sock*, u32)
    function int sk_filter_trim_cap(sock*, sk_buff*, unsigned int)
    function void sk_free(sock*)
    function void sk_free_unlock_clone(sock*)
    function bool sk_mc_loop(sock*)
    function bool sk_net_capable(const sock*, int)
    function bool sk_ns_capable(const sock*, user_namespace*, int)
    function bool sk_page_frag_refill(sock*, page_frag*)
    function void sk_reset_timer(sock*, timer_list*, unsigned long int)
    function void sk_send_sigurg(sock*)
    function void sk_set_memalloc(sock*)
    function int sk_set_peek_off(sock*, int)
    function void sk_setup_caps(sock*, dst_entry*)
    function void sk_stop_timer(sock*, timer_list*)
    function int sk_stream_error(sock*, int, int)
    function void sk_stream_kill_queues(sock*)
    function void sk_stream_wait_close(sock*, long int)
    function int sk_stream_wait_connect(sock*, long int*)
    function int sk_stream_wait_memory(sock*, long int*)
    function int sk_wait_data(sock*, long int*, const sk_buff*)
    function void skb_consume_udp(sock*, sk_buff*, int)
    function void skb_free_datagram(sock*, sk_buff*)
    function int skb_kill_datagram(sock*, sk_buff*, unsigned int)
    function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*)
    function int skb_send_sock_locked(sock*, sk_buff*, int, int)
    function void skb_set_owner_w(sk_buff*, sock*)
    function int skb_splice_bits(sk_buff*, sock*, unsigned int, pipe_inode_info*, unsigned int, unsigned int)
    function int skb_zerocopy_iter_stream(sock*, sk_buff*, msghdr*, int, ubuf_info*)
    function socket* sock_alloc()
    function file* sock_alloc_file(socket*, int, const char*)
    function sk_buff* sock_alloc_send_pskb(sock*, unsigned long int, unsigned long int, int, int*, int)
    function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*)
    function int sock_cmsg_send(sock*, msghdr*, sockcm_cookie*)
    function int sock_common_getsockopt(socket*, int, int, char*, int*)
    function int sock_common_recvmsg(socket*, msghdr*, size_t, int)
    function int sock_common_setsockopt(socket*, int, int, char*, unsigned int)
    function int sock_create(int, int, int, socket**)
    function int sock_create_kern(net*, int, int, int, socket**)
    function int sock_create_lite(int, int, int, socket**)
    function sk_buff* sock_dequeue_err_skb(sock*)
    function int sock_diag_check_cookie(sock*, const __u32*)
    function int sock_diag_destroy(sock*, int)
    function int sock_diag_put_filterinfo(bool, sock*, sk_buff*, int)
    function int sock_diag_put_meminfo(sock*, sk_buff*, int)
    function int sock_diag_register(const sock_diag_handler*)
    function void sock_diag_save_cookie(sock*, __u32*)
    function void sock_diag_unregister(const sock_diag_handler*)
    function socket* sock_from_file(file*, int*)
    function void sock_gen_put(sock*)
    function int sock_gettstamp(socket*, void*, bool, bool)
    function unsigned long int sock_i_ino(sock*)
    function kuid_t sock_i_uid(sock*)
    function void sock_init_data(socket*, sock*)
    function int sock_inuse_get(net*)
    function void sock_kfree_s(sock*, void*, int)
    function void* sock_kmalloc(sock*, int, gfp_t)
    function void sock_kzfree_s(sock*, void*, int)
    function int sock_no_accept(socket*, socket*, int, bool)
    function int sock_no_bind(socket*, sockaddr*, int)
    function int sock_no_connect(socket*, sockaddr*, int, int)
    function int sock_no_getname(socket*, sockaddr*, int)
    function int sock_no_getsockopt(socket*, int, int, char*, int*)
    function int sock_no_ioctl(socket*, unsigned int, unsigned long int)
    function int sock_no_listen(socket*, int)
    function int sock_no_mmap(file*, socket*, vm_area_struct*)
    function int sock_no_recvmsg(socket*, msghdr*, size_t, int)
    function int sock_no_sendmsg(socket*, msghdr*, size_t)
    function int sock_no_sendmsg_locked(sock*, msghdr*, size_t)
    function ssize_t sock_no_sendpage(socket*, page*, int, size_t, int)
    function ssize_t sock_no_sendpage_locked(sock*, page*, int, size_t, int)
    function int sock_no_setsockopt(socket*, int, int, char*, unsigned int)
    function int sock_no_shutdown(socket*, int)
    function int sock_no_socketpair(socket*, socket*)
    function void sock_prot_inuse_add(net*, proto*, int)
    function int sock_prot_inuse_get(net*, proto*)
    function int sock_queue_err_skb(sock*, sk_buff*)
    function int sock_queue_rcv_skb(sock*, sk_buff*)
    function int sock_recv_errqueue(sock*, msghdr*, int, int, int)
    function int sock_recvmsg(socket*, msghdr*, int)
    function int sock_register(const net_proto_family*)
    function void sock_release(socket*)
    function int sock_sendmsg(socket*, msghdr*)
    function int sock_setsockopt(socket*, int, int, char*, unsigned int)
    function sk_buff* sock_wmalloc(sock*, unsigned long int, int, gfp_t)
    function ubuf_info* sock_zerocopy_alloc(sock*, size_t)
    function ubuf_info* sock_zerocopy_realloc(sock*, size_t, ubuf_info*)
    function socket* sockfd_lookup(int, int*)
    function int stp_proto_register(const stp_proto*)
    function void stp_proto_unregister(const stp_proto*)
    function void tc_cleanup_flow_action(flow_action*)
    function int tc_setup_cb_add(tcf_block*, tcf_proto*, tc_setup_type, void*, bool, u32*, unsigned int*, bool)
    function int tc_setup_cb_call(tcf_block*, tc_setup_type, void*, bool, bool)
    function int tc_setup_cb_destroy(tcf_block*, tcf_proto*, tc_setup_type, void*, bool, u32*, unsigned int*, bool)
    function int tc_setup_cb_reoffload(tcf_block*, tcf_proto*, bool, flow_setup_cb_t*, tc_setup_type, void*, void*, u32*, unsigned int*)
    function int tc_setup_cb_replace(tcf_block*, tcf_proto*, tc_setup_type, void*, bool, u32*, unsigned int*, u32*, unsigned int*, bool)
    function int tc_setup_flow_action(flow_action*, const tcf_exts*, bool)
    function int tcf_action_check_ctrlact(int, tcf_proto*, tcf_chain**, netlink_ext_ack*)
    function int tcf_action_dump_1(sk_buff*, tc_action*, int, int)
    function int tcf_action_exec(sk_buff*, tc_action**, int, tcf_result*)
    function tcf_chain* tcf_action_set_ctrlact(tc_action*, int, tcf_chain*)
    function int tcf_block_get(tcf_block**, tcf_proto**, Qdisc*, netlink_ext_ack*)
    function int tcf_block_get_ext(tcf_block**, Qdisc*, tcf_block_ext_info*, netlink_ext_ack*)
    function void tcf_block_netif_keep_dst(tcf_block*)
    function void tcf_block_put(tcf_block*)
    function void tcf_block_put_ext(tcf_block*, Qdisc*, tcf_block_ext_info*)
    function tcf_chain* tcf_chain_get_by_act(tcf_block*, u32)
    function void tcf_chain_put_by_act(tcf_chain*)
    function int tcf_classify(sk_buff*, const tcf_proto*, tcf_result*, bool)
    function int tcf_em_register(tcf_ematch_ops*)
    function void tcf_em_tree_destroy(tcf_ematch_tree*)
    function int tcf_em_tree_dump(sk_buff*, tcf_ematch_tree*, int)
    function int tcf_em_tree_validate(tcf_proto*, nlattr*, tcf_ematch_tree*)
    function void tcf_em_unregister(tcf_ematch_ops*)
    function void tcf_exts_change(tcf_exts*, tcf_exts*)
    function void tcf_exts_destroy(tcf_exts*)
    function int tcf_exts_dump(sk_buff*, tcf_exts*)
    function int tcf_exts_dump_stats(sk_buff*, tcf_exts*)
    function unsigned int tcf_exts_num_actions(tcf_exts*)
    function int tcf_exts_validate(net*, tcf_proto*, nlattr**, nlattr*, tcf_exts*, bool, bool, netlink_ext_ack*)
    function int tcf_generic_walker(tc_action_net*, sk_buff*, netlink_callback*, int, const tc_action_ops*, netlink_ext_ack*)
    function tcf_chain* tcf_get_next_chain(tcf_block*, tcf_chain*)
    function tcf_proto* tcf_get_next_proto(tcf_chain*, tcf_proto*, bool)
    function int tcf_idr_check_alloc(tc_action_net*, u32*, tc_action**, int)
    function void tcf_idr_cleanup(tc_action_net*, u32)
    function int tcf_idr_create(tc_action_net*, u32, nlattr*, tc_action**, const tc_action_ops*, int, bool)
    function void tcf_idr_insert(tc_action_net*, tc_action*)
    function int tcf_idr_search(tc_action_net*, tc_action**, u32)
    function void tcf_idrinfo_destroy(const tc_action_ops*, tcf_idrinfo*)
    function int tcf_register_action(tc_action_ops*, pernet_operations*)
    function int tcf_unregister_action(tc_action_ops*, pernet_operations*)
    function int tcp_abort(sock*, int)
    function bool tcp_add_backlog(sock*, sk_buff*)
    function u32 tcp_ca_get_key_by_name(net*, const char*, bool*)
    function void tcp_ca_openreq_child(sock*, const dst_entry*)
    function sock* tcp_check_req(sock*, sk_buff*, request_sock*, bool, bool*)
    function int tcp_child_process(sock*, sock*, sk_buff*)
    function void tcp_close(sock*, long int)
    function void tcp_cong_avoid_ai(tcp_sock*, u32, u32)
    function int tcp_conn_request(request_sock_ops*, const tcp_request_sock_ops*, sock*, sk_buff*)
    function int tcp_connect(sock*)
    function sock* tcp_create_openreq_child(const sock*, request_sock*, sk_buff*)
    function int tcp_disconnect(sock*, int)
    function void tcp_done(sock*)
    function void tcp_enter_cwr(sock*)
    function void tcp_enter_memory_pressure(sock*)
    function void tcp_enter_quickack_mode(sock*, unsigned int)
    function bool tcp_fastopen_defer_connect(sock*, int*)
    function int tcp_filter(sock*, sk_buff*)
    function void tcp_get_info(sock*, tcp_info*)
    function u16 tcp_get_syncookie_mss(request_sock_ops*, const tcp_request_sock_ops*, sock*, tcphdr*)
    function int tcp_getsockopt(sock*, int, int, char*, int*)
    function void tcp_init_sock(sock*)
    function void tcp_initialize_rcv_mss(sock*)
    function int tcp_ioctl(sock*, int, unsigned long int)
    function void tcp_leave_memory_pressure(sock*)
    function sk_buff* tcp_make_synack(const sock*, dst_entry*, request_sock*, tcp_fastopen_cookie*, tcp_synack_type)
    function int tcp_mmap(file*, socket*, vm_area_struct*)
    function int tcp_mss_to_mtu(sock*, int)
    function void tcp_mtup_init(sock*)
    function void tcp_openreq_init_rwin(request_sock*, const sock*, const dst_entry*)
    function void tcp_parse_options(const net*, const sk_buff*, tcp_options_received*, int, tcp_fastopen_cookie*)
    function int tcp_peek_len(socket*)
    function __poll_t tcp_poll(file*, socket*, poll_table*)
    function void tcp_rate_check_app_limited(sock*)
    function void tcp_rcv_established(sock*, sk_buff*)
    function int tcp_rcv_state_process(sock*, sk_buff*)
    function int tcp_read_sock(sock*, read_descriptor_t*, sk_read_actor_t)
    function int tcp_recvmsg(sock*, msghdr*, size_t, int, int, int*)
    function int tcp_register_ulp(tcp_ulp_ops*)
    function void tcp_release_cb(sock*)
    function void tcp_reno_cong_avoid(sock*, u32, u32)
    function u32 tcp_reno_ssthresh(sock*)
    function u32 tcp_reno_undo_cwnd(sock*)
    function void tcp_req_err(sock*, u32, bool)
    function int tcp_rtx_synack(const sock*, request_sock*)
    function void tcp_select_initial_window(const sock*, int, __u32, __u32*, __u32*, int, __u8*, __u32)
    function int tcp_sendmsg(sock*, msghdr*, size_t)
    function int tcp_sendmsg_locked(sock*, msghdr*, size_t)
    function int tcp_sendpage(sock*, page*, int, size_t, int)
    function int tcp_sendpage_locked(sock*, page*, int, size_t, int)
    function void tcp_set_keepalive(sock*, int)
    function int tcp_set_rcvlowat(sock*, int)
    function void tcp_set_state(sock*, int)
    function int tcp_setsockopt(sock*, int, int, char*, unsigned int)
    function void tcp_shutdown(sock*, int)
    function void tcp_simple_retransmit(sock*)
    function u32 tcp_slow_start(tcp_sock*, u32)
    function ssize_t tcp_splice_read(socket*, loff_t*, pipe_inode_info*, size_t, unsigned int)
    function void tcp_syn_ack_timeout(const request_sock*)
    function unsigned int tcp_sync_mss(sock*, u32)
    function void tcp_time_wait(sock*, int, int)
    function void tcp_twsk_destructor(sock*)
    function int tcp_twsk_unique(sock*, sock*, void*)
    function void tcp_unregister_ulp(tcp_ulp_ops*)
    function int tcp_v4_conn_request(sock*, sk_buff*)
    function int tcp_v4_connect(sock*, sockaddr*, int)
    function void tcp_v4_destroy_sock(sock*)
    function int tcp_v4_do_rcv(sock*, sk_buff*)
    function void tcp_v4_mtu_reduced(sock*)
    function void tcp_v4_send_check(sock*, sk_buff*)
    function sock* tcp_v4_syn_recv_sock(const sock*, sk_buff*, request_sock*, dst_entry*, request_sock*, bool*)
    function int tipc_nl_sk_walk(sk_buff*, netlink_callback*, void ()*)
    function int tipc_sk_fill_sock_diag(sk_buff*, netlink_callback*, tipc_sock*, u32, void ()*)
    function socket* tun_get_socket(file*)
    function sock* udp4_lib_lookup(net*, __be32, __be16, __be32, __be16, int)
    function sock* udp4_lib_lookup_skb(sk_buff*, __be16, __be16)
    function sock* udp6_lib_lookup(net*, const in6_addr*, __be16, const in6_addr*, __be16, int)
    function sock* udp6_lib_lookup_skb(sk_buff*, __be16, __be16)
    function int udp_abort(sock*, int)
    function int udp_cmsg_send(sock*, msghdr*, u16*)
    function void udp_destruct_sock(sock*)
    function int udp_disconnect(sock*, int)
    function void udp_flush_pending_frames(sock*)
    function int udp_gro_complete(sk_buff*, int, udp_lookup_t)
    function sk_buff* udp_gro_receive(list_head*, sk_buff*, udphdr*, udp_lookup_t)
    function int udp_init_sock(sock*)
    function int udp_ioctl(sock*, int, unsigned long int)
    function int udp_lib_get_port(sock*, unsigned short int, unsigned int)
    function int udp_lib_getsockopt(sock*, int, int, char*, int*)
    function void udp_lib_rehash(sock*, u16)
    function int udp_lib_setsockopt(sock*, int, int, char*, unsigned int, void ()*)
    function void udp_lib_unhash(sock*)
    function __poll_t udp_poll(file*, socket*, poll_table*)
    function int udp_pre_connect(sock*, sockaddr*, int)
    function int udp_push_pending_frames(sock*)
    function int udp_sendmsg(sock*, msghdr*, size_t)
    function bool udp_sk_rx_dst_set(sock*, dst_entry*)
    function void udp_skb_destructor(sock*, sk_buff*)
    function int udp_sock_create4(net*, udp_port_cfg*, socket**)
    function int udp_sock_create6(net*, udp_port_cfg*, socket**)
    function metadata_dst* udp_tun_rx_dst(sk_buff*, unsigned short int, __be16, __be64, int)
    function int udp_tunnel6_xmit_skb(dst_entry*, sock*, sk_buff*, net_device*, in6_addr*, in6_addr*, __u8, __u8, __be32, __be16, __be16, bool)
    function void udp_tunnel_drop_rx_port(net_device*, socket*, unsigned short int)
    function void udp_tunnel_notify_add_rx_port(socket*, unsigned short int)
    function void udp_tunnel_notify_del_rx_port(socket*, unsigned short int)
    function void udp_tunnel_push_rx_port(net_device*, socket*, unsigned short int)
    function void udp_tunnel_sock_release(socket*)
    function void udp_tunnel_xmit_skb(rtable*, sock*, sk_buff*, __be32, __be32, __u8, __u8, __be16, __be16, __be16, bool, bool)
    function sock* unix_get_socket(file*)
    function long int unix_inq_len(sock*)
    function long int unix_outq_len(sock*)
    function sock* unix_peer_get(sock*)
    function void unregister_8022_client(datalink_proto*)
    function void unregister_candev(net_device*)
    function void unregister_netdev(net_device*)
    function void unregister_netdevice_queue(net_device*, list_head*)
    function void unregister_pernet_device(pernet_operations*)
    function void unregister_pernet_subsys(pernet_operations*)
    function int unregister_qdisc(Qdisc_ops*)
    function void unregister_snap_client(datalink_proto*)
    function int unregister_tcf_proto_ops(tcf_proto_ops*)
    function int usbnet_change_mtu(net_device*, int)
    function void usbnet_defer_kevent(usbnet*, int)
    function void usbnet_device_suggests_idle(usbnet*)
    function void usbnet_get_drvinfo(net_device*, ethtool_drvinfo*)
    function int usbnet_get_endpoints(usbnet*, usb_interface*)
    function int usbnet_get_ethernet_addr(usbnet*, int)
    function u32 usbnet_get_link(net_device*)
    function int usbnet_get_link_ksettings(net_device*, ethtool_link_ksettings*)
    function u32 usbnet_get_msglevel(net_device*)
    function void usbnet_get_stats64(net_device*, rtnl_link_stats64*)
    function void usbnet_link_change(usbnet*, bool, bool)
    function int usbnet_manage_power(usbnet*, int)
    function int usbnet_nway_reset(net_device*)
    function int usbnet_open(net_device*)
    function void usbnet_pause_rx(usbnet*)
    function void usbnet_purge_paused_rxq(usbnet*)
    function int usbnet_read_cmd(usbnet*, u8, u8, u16, u16, void*, u16)
    function int usbnet_read_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)
    function void usbnet_resume_rx(usbnet*)
    function int usbnet_set_link_ksettings(net_device*, const ethtool_link_ksettings*)
    function void usbnet_set_msglevel(net_device*, u32)
    function void usbnet_skb_return(usbnet*, sk_buff*)
    function netdev_tx_t usbnet_start_xmit(sk_buff*, net_device*)
    function int usbnet_status_start(usbnet*, gfp_t)
    function void usbnet_status_stop(usbnet*)
    function int usbnet_stop(net_device*)
    function void usbnet_tx_timeout(net_device*)
    function void usbnet_unlink_rx_urbs(usbnet*)
    function void usbnet_update_max_qlen(usbnet*)
    function int usbnet_write_cmd(usbnet*, u8, u8, u16, u16, void*, u16)
    function int usbnet_write_cmd_async(usbnet*, u8, u8, u16, u16, void*, u16)
    function int usbnet_write_cmd_nopm(usbnet*, u8, u8, u16, u16, void*, u16)
    function sk_buff* validate_xmit_skb_list(sk_buff*, net_device*, bool*)
    function int virt_wifi_register_network_simulation(virt_wifi_network_simulation*)
    function int virtio_transport_connect(vsock_sock*)
    function void virtio_transport_deliver_tap_pkt(virtio_vsock_pkt*)
    function void virtio_transport_destruct(vsock_sock*)
    function int virtio_transport_dgram_bind(vsock_sock*, sockaddr_vm*)
    function int virtio_transport_dgram_dequeue(vsock_sock*, msghdr*, size_t, int)
    function int virtio_transport_dgram_enqueue(vsock_sock*, sockaddr_vm*, msghdr*, size_t)
    function int virtio_transport_do_socket_init(vsock_sock*, vsock_sock*)
    function void virtio_transport_free_pkt(virtio_vsock_pkt*)
    function u64 virtio_transport_get_buffer_size(vsock_sock*)
    function u32 virtio_transport_get_credit(virtio_vsock_sock*, u32)
    function u64 virtio_transport_get_max_buffer_size(vsock_sock*)
    function u64 virtio_transport_get_min_buffer_size(vsock_sock*)
    function void virtio_transport_inc_tx_pkt(virtio_vsock_sock*, virtio_vsock_pkt*)
    function int virtio_transport_notify_poll_in(vsock_sock*, size_t, bool*)
    function int virtio_transport_notify_poll_out(vsock_sock*, size_t, bool*)
    function int virtio_transport_notify_recv_init(vsock_sock*, size_t, vsock_transport_recv_notify_data*)
    function int virtio_transport_notify_recv_post_dequeue(vsock_sock*, size_t, ssize_t, bool, vsock_transport_recv_notify_data*)
    function int virtio_transport_notify_recv_pre_block(vsock_sock*, size_t, vsock_transport_recv_notify_data*)
    function int virtio_transport_notify_recv_pre_dequeue(vsock_sock*, size_t, vsock_transport_recv_notify_data*)
    function int virtio_transport_notify_send_init(vsock_sock*, vsock_transport_send_notify_data*)
    function int virtio_transport_notify_send_post_enqueue(vsock_sock*, ssize_t, vsock_transport_send_notify_data*)
    function int virtio_transport_notify_send_pre_block(vsock_sock*, vsock_transport_send_notify_data*)
    function int virtio_transport_notify_send_pre_enqueue(vsock_sock*, vsock_transport_send_notify_data*)
    function void virtio_transport_put_credit(virtio_vsock_sock*, u32)
    function void virtio_transport_recv_pkt(virtio_vsock_pkt*)
    function void virtio_transport_release(vsock_sock*)
    function void virtio_transport_set_buffer_size(vsock_sock*, u64)
    function void virtio_transport_set_max_buffer_size(vsock_sock*, u64)
    function void virtio_transport_set_min_buffer_size(vsock_sock*, u64)
    function int virtio_transport_shutdown(vsock_sock*, int)
    function ssize_t virtio_transport_stream_dequeue(vsock_sock*, msghdr*, size_t, int)
    function ssize_t virtio_transport_stream_enqueue(vsock_sock*, msghdr*, size_t)
    function s64 virtio_transport_stream_has_data(vsock_sock*)
    function s64 virtio_transport_stream_has_space(vsock_sock*)
    function bool virtio_transport_stream_is_active(vsock_sock*)
    function u64 virtio_transport_stream_rcvhiwat(vsock_sock*)
    function void vlan_ioctl_set(void ()*)
    function void vsock_add_pending(sock*, sock*)
    function int vsock_add_tap(vsock_tap*)
    function const vsock_transport* vsock_core_get_transport()
    function void vsock_enqueue_accept(sock*, sock*)
    function sock* vsock_find_bound_socket(sockaddr_vm*)
    function sock* vsock_find_connected_socket(sockaddr_vm*, sockaddr_vm*)
    function void vsock_insert_connected(vsock_sock*)
    function void vsock_remove_bound(vsock_sock*)
    function void vsock_remove_connected(vsock_sock*)
    function void vsock_remove_pending(sock*, sock*)
    function void vsock_remove_sock(vsock_sock*)
    function int vsock_remove_tap(vsock_tap*)
    function s64 vsock_stream_has_data(vsock_sock*)
    function s64 vsock_stream_has_space(vsock_sock*)
    function ieee80211_vif* wdev_to_ieee80211_vif(wireless_dev*)
    function void wiphy_apply_custom_regulatory(wiphy*, const ieee80211_regdomain*)
    function void wiphy_free(wiphy*)
    function wiphy* wiphy_new_nm(const cfg80211_ops*, int, const char*)
    function void wiphy_read_of_freq_limits(wiphy*)
    function int wiphy_register(wiphy*)
    function void wiphy_rfkill_set_hw_state(wiphy*, bool)
    function void wiphy_rfkill_start_polling(wiphy*)
    function void wiphy_rfkill_stop_polling(wiphy*)
    function ieee80211_hw* wiphy_to_ieee80211_hw(wiphy*)
    function void wiphy_unregister(wiphy*)
    function void wireless_send_event(net_device*, unsigned int, iwreq_data*, const char*)
    function void wireless_spy_update(net_device*, unsigned char*, iw_quality*)
    function bool xdp_attachment_flags_ok(xdp_attachment_info*, netdev_bpf*)
    function int xdp_attachment_query(xdp_attachment_info*, netdev_bpf*)
    function void xdp_attachment_setup(xdp_attachment_info*, netdev_bpf*)
    function int xdp_do_generic_redirect(net_device*, sk_buff*, xdp_buff*, bpf_prog*)
    function int xdp_do_redirect(net_device*, xdp_buff*, bpf_prog*)
    function int xdp_rxq_info_reg(xdp_rxq_info*, net_device*, u32)
    function int xfrm6_find_1stfragopt(xfrm_state*, sk_buff*, u8**)
    function __be32 xfrm6_tunnel_alloc_spi(net*, xfrm_address_t*)
    function __be32 xfrm6_tunnel_spi_lookup(net*, const xfrm_address_t*)
    function int xfrm_alloc_spi(xfrm_state*, u32, u32)
    function void xfrm_audit_state_add(xfrm_state*, int, bool)
    function void xfrm_audit_state_delete(xfrm_state*, int, bool)
    function void xfrm_audit_state_icvfail(xfrm_state*, sk_buff*, u8)
    function void xfrm_audit_state_replay(xfrm_state*, sk_buff*, __be32)
    function void xfrm_audit_state_replay_overflow(xfrm_state*, sk_buff*)
    function int xfrm_dev_state_flush(net*, net_device*, bool)
    function void xfrm_dst_ifdown(dst_entry*, net_device*)
    function xfrm_state* xfrm_find_acq(net*, const xfrm_mark*, u8, u32, u32, u8, const xfrm_address_t*, const xfrm_address_t*, int, unsigned short int)
    function xfrm_state* xfrm_find_acq_byseq(net*, u32, u32)
    function void xfrm_if_register_cb(const xfrm_if_cb*)
    function int xfrm_init_replay(xfrm_state*)
    function int xfrm_init_state(xfrm_state*)
    function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int)
    function dst_entry* xfrm_lookup_route(net*, dst_entry*, const flowi*, const sock*, int)
    function dst_entry* xfrm_lookup_with_ifid(net*, dst_entry*, const flowi*, const sock*, int, u32)
    function int xfrm_output(sock*, sk_buff*)
    function xfrm_policy* xfrm_policy_alloc(net*, gfp_t)
    function xfrm_policy* xfrm_policy_byid(net*, u32, u32, u8, int, u32, int, int*)
    function xfrm_policy* xfrm_policy_bysel_ctx(net*, u32, u32, u8, int, xfrm_selector*, xfrm_sec_ctx*, int, int*)
    function int xfrm_policy_flush(net*, u8, bool)
    function void xfrm_policy_hash_rebuild(net*)
    function int xfrm_policy_register_afinfo(const xfrm_policy_afinfo*, int)
    function void xfrm_policy_unregister_afinfo(const xfrm_policy_afinfo*)
    function int xfrm_policy_walk(net*, xfrm_policy_walk*, void ()*, void*)
    function void xfrm_policy_walk_done(xfrm_policy_walk*, net*)
    function int xfrm_register_km(xfrm_mgr*)
    function int xfrm_register_type(const xfrm_type*, unsigned short int)
    function int xfrm_register_type_offload(const xfrm_type_offload*, unsigned short int)
    function u32 xfrm_replay_seqhi(xfrm_state*, __be32)
    function void xfrm_sad_getinfo(net*, xfrmk_sadinfo*)
    function void xfrm_spd_getinfo(net*, xfrmk_spdinfo*)
    function int xfrm_state_add(xfrm_state*)
    function xfrm_state_afinfo* xfrm_state_afinfo_get_rcu(unsigned int)
    function xfrm_state* xfrm_state_alloc(net*)
    function int xfrm_state_check_expire(xfrm_state*)
    function int xfrm_state_delete(xfrm_state*)
    function void xfrm_state_delete_tunnel(xfrm_state*)
    function int xfrm_state_flush(net*, u8, bool, bool)
    function void xfrm_state_free(xfrm_state*)
    function void xfrm_state_insert(xfrm_state*)
    function xfrm_state* xfrm_state_lookup(net*, u32, const xfrm_address_t*, __be32, u8, unsigned short int)
    function xfrm_state* xfrm_state_lookup_byaddr(net*, u32, const xfrm_address_t*, const xfrm_address_t*, u8, unsigned short int)
    function xfrm_state* xfrm_state_lookup_byspi(net*, __be32, unsigned short int)
    function u32 xfrm_state_mtu(xfrm_state*, int)
    function int xfrm_state_register_afinfo(xfrm_state_afinfo*)
    function int xfrm_state_unregister_afinfo(xfrm_state_afinfo*)
    function int xfrm_state_update(xfrm_state*)
    function int xfrm_state_walk(net*, xfrm_state_walk*, void ()*, void*)
    function void xfrm_state_walk_done(xfrm_state_walk*, net*)
    function xfrm_state* xfrm_stateonly_find(net*, u32, u32, xfrm_address_t*, xfrm_address_t*, unsigned short int, u8, u8, u32)
    function int xfrm_trans_queue(sk_buff*, void ()*)
    function int xfrm_unregister_km(xfrm_mgr*)
    function void xfrm_unregister_type(const xfrm_type*, unsigned short int)
    function void xfrm_unregister_type_offload(const xfrm_type_offload*, unsigned short int)
    function int xfrm_user_policy(sock*, int, u8*, int)
    function int xt_check_match(xt_mtchk_param*, unsigned int, u16, bool)
    function int xt_check_target(xt_tgchk_param*, unsigned int, u16, bool)
    function void xt_compat_match_from_user(xt_entry_match*, void**, unsigned int*)
    function int xt_compat_match_offset(const xt_match*)
    function int xt_compat_match_to_user(const xt_entry_match*, void**, unsigned int*)
    function void xt_compat_target_from_user(xt_entry_target*, void**, unsigned int*)
    function int xt_compat_target_offset(const xt_target*)
    function int xt_compat_target_to_user(const xt_entry_target*, void**, unsigned int*)
    function xt_match* xt_find_match(u8, const char*, u8)
    function xt_table* xt_find_table_lock(net*, u_int8_t, const char*)
    function nf_hook_ops* xt_hook_ops_alloc(const xt_table*, nf_hookfn*)
    function int xt_match_to_user(const xt_entry_match*, xt_entry_match*)
    function void xt_proto_fini(net*, u_int8_t)
    function int xt_proto_init(net*, u_int8_t)
    function int xt_register_match(xt_match*)
    function int xt_register_matches(xt_match*, unsigned int)
    function xt_table* xt_register_table(net*, const xt_table*, xt_table_info*, xt_table_info*)
    function int xt_register_target(xt_target*)
    function int xt_register_targets(xt_target*, unsigned int)
    function xt_match* xt_request_find_match(uint8_t, const char*, uint8_t)
    function xt_table* xt_request_find_table_lock(net*, u_int8_t, const char*)
    function xt_target* xt_request_find_target(u8, const char*, u8)
    function int xt_target_to_user(const xt_entry_target*, xt_entry_target*)
    function void xt_unregister_match(xt_match*)
    function void xt_unregister_matches(xt_match*, unsigned int)
    function void xt_unregister_target(xt_target*)
    function void xt_unregister_targets(xt_target*, unsigned int)
    void ()* __fib6_flush_trees
    neigh_table arp_tbl
    net_device* blackhole_netdev
    net init_net
    neigh_table nd_tbl
    nf_ct_hook* nf_ct_hook
    netlink_table* nl_table
    pingv6_ops pingv6_ops
    softnet_data softnet_data

'struct netns_ipv4 at ipv4.h:43:1' changed:
  details were reported earlier

Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Todd Kjos <tkjos@google.com>
Change-Id: I9e89ec640132cf0810a7592fb8e2ac4c11cfa8c2
2019-12-13 13:11:06 -08:00
Maciej Żenczykowski
05665fed98 BACKPORT: FROMLIST: net: introduce ip_local_unbindable_ports sysctl
and associated inet_is_local_unbindable_port() helper function:
use it to make explicitly binding to an unbindable port return
-EPERM 'Operation not permitted'.

Autobind doesn't honour this new sysctl since:
  (a) you can simply set both if that's the behaviour you desire
  (b) there could be a use for preventing explicit while allowing auto
  (c) it's faster in the relatively critical path of doing port selection
      during connect() to only check one bitmap instead of both

Various ports may have special use cases which are not suitable for
use by general userspace applications. Currently, ports specified in
ip_local_reserved_ports sysctl will not be returned only in case of
automatic port assignment, but nothing prevents you from explicitly
binding to them - even from an entirely unprivileged process.

In certain cases it is desirable to prevent the host from assigning the
ports even in case of explicit binds, even from superuser processes.

Example use cases might be:
 - a port being stolen by the nic for remote serial console, remote
   power management or some other sort of debugging functionality
   (crash collection, gdb, direct access to some other microcontroller
   on the nic or motherboard, remote management of the nic itself).
 - a transparent proxy where packets are being redirected: in case
   a socket matches this connection, packets from this application
   would be incorrectly sent to one of the endpoints.

Initially I wanted to solve this problem via the simple one line:

static inline bool inet_port_requires_bind_service(struct net *net, unsigned short port) {
-       return port < net->ipv4.sysctl_ip_prot_sock;
+       return port < net->ipv4.sysctl_ip_prot_sock || inet_is_local_reserved_port(net, port);
}

However, this doesn't work for two reasons:
  (a) it changes userspace visible behaviour of the existing local
      reserved ports sysctl, and there appears to be enough documentation
      on the internet talking about setting it to make this a bad idea
  (b) it doesn't prevent privileged apps from using these ports,
      CAP_BIND_SERVICE is relatively likely to be available to, for example,
      a recursive DNS server so it can listed on port 53, which also needs
      to do src port randomization for outgoing queries due to security
      reasons (and it thus does manual port binding).

If we *know* that certain ports are simply unusable, then it's better
nothing even gets the opportunity to try to use them.  This way we at
least get a quick failure, instead of some sort of timeout (or possibly
even corruption of the data stream of the non-kernel based use case).

Test:
  vm:~# cat /proc/sys/net/ipv4/ip_local_unbindable_ports

  vm:~# python -c 'import socket; s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0); s.bind(("::", 3967))'
  vm:~# python -c 'import socket; s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, 0); s.bind(("::", 3967))'
  vm:~# echo 3967 > /proc/sys/net/ipv4/ip_local_unbindable_ports
  vm:~# cat /proc/sys/net/ipv4/ip_local_unbindable_ports
  3967
  vm:~# python -c 'import socket; s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0); s.bind(("::", 3967))'
  socket.error: (1, 'Operation not permitted')
  vm:~# python -c 'import socket; s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, 0); s.bind(("::", 3967))'
  socket.error: (1, 'Operation not permitted')

Cc: Sean Tranchetti <stranche@codeaurora.org>
Cc: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Linux SCTP <linux-sctp@vger.kernel.org>
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Bug: 140404597
Link: https://patchwork.ozlabs.org/patch/1206704/
Change-Id: Ie96207bea90ae1345adf7b45724d0caf4d6e52c2
Signed-off-by: Todd Kjos <tkjos@google.com>
2019-12-13 09:50:32 -08:00
Greg Kroah-Hartman
cc2c50fd67 ANDROID: update abi for 5.4.3 merge
Leaf changes summary: 4 artifacts changed (2 filtered out)
Changed leaf types summary: 4 (2 filtered out) leaf types changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

'struct kernfs_root at kernfs.h:183:1' changed:
  type size hasn't changed
  1 data member insertion:
    'u32 kernfs_root::last_ino', at offset 320 (in bits) at kernfs.h:190:1
  there are data member changes:
   'u32 kernfs_root::next_generation' offset changed from 320 to 352 (in bits) (by +32 bits)

  6981 impacted interfaces:
    bus_type ac97_bus_type
	<snip>

'struct scsi_device at scsi_device.h:101:1' changed:
  type size hasn't changed
  1 data member insertion:
    'unsigned int scsi_device::set_dbd_for_ms', at offset 14 (in bits) at scsi_device.h:173:1
  there are data member changes:
   'unsigned int scsi_device::select_no_atn' offset changed from 1 to 2272 (in bits) (by +2271 bits)
   'unsigned int scsi_device::no_uld_attach' offset changed from 2 to 1 (in bits) (by -1 bits)
   'unsigned int scsi_device::start_stop_pwr_cond' offset changed from 3 to 2 (in bits) (by -1 bits)
   'unsigned int scsi_device::manage_start_stop' offset changed from 4 to 3 (in bits) (by -1 bits)
   'unsigned int scsi_device::allow_restart' offset changed from 5 to 4 (in bits) (by -1 bits)
   'unsigned int scsi_device::no_start_on_add' offset changed from 6 to 5 (in bits) (by -1 bits)
   'unsigned int scsi_device::use_192_bytes_for_3f' offset changed from 7 to 6 (in bits) (by -1 bits)
   'unsigned int scsi_device::try_vpd_pages' offset changed from 8 to 7 (in bits) (by -1 bits)
   'unsigned int scsi_device::skip_vpd_pages' offset changed from 9 to 8 (in bits) (by -1 bits)
   'unsigned int scsi_device::skip_ms_page_3f' offset changed from 10 to 9 (in bits) (by -1 bits)
   'unsigned int scsi_device::skip_ms_page_8' offset changed from 11 to 10 (in bits) (by -1 bits)
   'unsigned int scsi_device::use_16_for_rw' offset changed from 12 to 11 (in bits) (by -1 bits)
   'unsigned int scsi_device::no_write_same' offset changed from 13 to 12 (in bits) (by -1 bits)
   'unsigned int scsi_device::no_report_opcodes' offset changed from 14 to 13 (in bits) (by -1 bits)
   'unsigned int scsi_device::rpm_autosuspend' offset changed from 18 to 17 (in bits) (by -1 bits)
   'unsigned int scsi_device::unmap_limit_for_ws' offset changed from 19 to 18 (in bits) (by -1 bits)
   'unsigned int scsi_device::lun_in_cdb' offset changed from 20 to 19 (in bits) (by -1 bits)
   'unsigned int scsi_device::broken_fua' offset changed from 21 to 20 (in bits) (by -1 bits)
   'unsigned int scsi_device::no_dif' offset changed from 22 to 21 (in bits) (by -1 bits)
   'unsigned int scsi_device::wce_default_on' offset changed from 23 to 22 (in bits) (by -1 bits)
   'unsigned int scsi_device::is_visible' offset changed from 24 to 23 (in bits) (by -1 bits)
   'unsigned int scsi_device::security_supported' offset changed from 25 to 24 (in bits) (by -1 bits)
   'unsigned int scsi_device::try_rc_10_first' offset changed from 26 to 25 (in bits) (by -1 bits)
   'unsigned int scsi_device::no_read_capacity_16' offset changed from 27 to 26 (in bits) (by -1 bits)
   'unsigned int scsi_device::no_read_disc_info' offset changed from 28 to 27 (in bits) (by -1 bits)
   'unsigned int scsi_device::last_sector_bug' offset changed from 29 to 28 (in bits) (by -1 bits)
   'unsigned int scsi_device::retry_hwerror' offset changed from 30 to 29 (in bits) (by -1 bits)
   'unsigned int scsi_device::guess_capacity' offset changed from 31 to 30 (in bits) (by -1 bits)
   'unsigned int scsi_device::fix_capacity' offset changed from 2272 to 31 (in bits) (by -2241 bits)

  100 impacted interfaces:
    function scsi_device* __scsi_add_device(Scsi_Host*, uint, uint, u64, void*)
    function scsi_device* __scsi_device_lookup(Scsi_Host*, uint, uint, u64)
    function scsi_device* __scsi_device_lookup_by_target(scsi_target*, u64)
    function int __scsi_execute(scsi_device*, const unsigned char*, int, void*, unsigned int, unsigned char*, scsi_sense_hdr*, int, int, u64, req_flags_t, int*)
    function void __scsi_init_queue(Scsi_Host*, request_queue*)
    function scsi_device* __scsi_iterate_devices(Scsi_Host*, scsi_device*)
    function void __scsi_print_sense(const scsi_device*, const char*, const unsigned char*, int)
    function void __starget_for_each_device(scsi_target*, void*, void ()*)
    function void scmd_printk(const char*, const scsi_cmnd*, const char*, ...)
    function int scsi_add_device(Scsi_Host*, uint, uint, u64)
    function int scsi_add_host_with_dma(Scsi_Host*, device*, device*)
    function int scsi_autopm_get_device(scsi_device*)
    function void scsi_autopm_put_device(scsi_device*)
    function void scsi_block_requests(Scsi_Host*)
    function int scsi_block_when_processing_errors(scsi_device*)
    function int scsi_change_queue_depth(scsi_device*, int)
    function int scsi_check_sense(scsi_cmnd*)
    function bool scsi_command_normalize_sense(const scsi_cmnd*, scsi_sense_hdr*)
    function scsi_device* scsi_device_from_queue(request_queue*)
    function int scsi_device_get(scsi_device*)
    function scsi_device* scsi_device_lookup(Scsi_Host*, uint, uint, u64)
    function scsi_device* scsi_device_lookup_by_target(scsi_target*, u64)
    function void scsi_device_put(scsi_device*)
    function int scsi_device_quiesce(scsi_device*)
    function void scsi_device_resume(scsi_device*)
    function int scsi_device_set_state(scsi_device*, scsi_device_state)
    function void scsi_eh_finish_cmd(scsi_cmnd*, list_head*)
    function void scsi_eh_prep_cmnd(scsi_cmnd*, scsi_eh_save*, unsigned char*, int, unsigned int)
    function void scsi_eh_ready_devs(Scsi_Host*, list_head*, list_head*)
    function void scsi_eh_restore_cmnd(scsi_cmnd*, scsi_eh_save*)
    function void scsi_flush_work(Scsi_Host*)
    function void scsi_free_host_dev(scsi_device*)
    function blist_flags_t scsi_get_device_flags_keyed(scsi_device*, const unsigned char*, const unsigned char*, scsi_devinfo_key)
    function scsi_device* scsi_get_host_dev(Scsi_Host*)
    function int scsi_get_vpd_page(scsi_device*, u8, unsigned char*, int)
    function Scsi_Host* scsi_host_alloc(scsi_host_template*, int)
    function int scsi_host_busy(Scsi_Host*)
    function Scsi_Host* scsi_host_get(Scsi_Host*)
    function Scsi_Host* scsi_host_lookup(unsigned short int)
    function void scsi_host_put(Scsi_Host*)
    function blk_status_t scsi_init_io(scsi_cmnd*)
    function int scsi_internal_device_block_nowait(scsi_device*)
    function int scsi_internal_device_unblock_nowait(scsi_device*, scsi_device_state)
    function int scsi_ioctl(scsi_device*, int, void*)
    function int scsi_ioctl_block_when_processing_errors(scsi_device*, int, bool)
    function int scsi_mode_select(scsi_device*, int, int, int, unsigned char*, int, int, int, scsi_mode_data*, scsi_sense_hdr*)
    function int scsi_mode_sense(scsi_device*, int, int, unsigned char*, int, int, int, scsi_mode_data*, scsi_sense_hdr*)
    function void scsi_print_command(scsi_cmnd*)
    function void scsi_print_result(const scsi_cmnd*, const char*, int)
    function void scsi_print_sense(const scsi_cmnd*)
    function void scsi_print_sense_hdr(const scsi_device*, const char*, const scsi_sense_hdr*)
    function int scsi_queue_work(Scsi_Host*, work_struct*)
    function void scsi_remove_device(scsi_device*)
    function void scsi_remove_host(Scsi_Host*)
    function void scsi_report_bus_reset(Scsi_Host*, int)
    function void scsi_report_device_reset(Scsi_Host*, int, int)
    function int scsi_report_opcode(scsi_device*, unsigned char*, unsigned int, unsigned char)
    function void scsi_scan_host(Scsi_Host*)
    function void scsi_schedule_eh(Scsi_Host*)
    function int scsi_set_medium_removal(scsi_device*, char)
    function void scsi_target_quiesce(scsi_target*)
    function void scsi_target_resume(scsi_target*)
    function int scsi_test_unit_ready(scsi_device*, int, int, scsi_sense_hdr*)
    function int scsi_track_queue_full(scsi_device*, int)
    function void scsi_unblock_requests(Scsi_Host*)
    function int scsi_vpd_lun_id(scsi_device*, char*, size_t)
    function int scsi_vpd_tpg_id(scsi_device*, int*)
    function void sdev_disable_disk_events(scsi_device*)
    function void sdev_enable_disk_events(scsi_device*)
    function void sdev_evt_send(scsi_device*, scsi_event*)
    function void sdev_evt_send_simple(scsi_device*, scsi_device_event, gfp_t)
    function void sdev_prefix_printk(const char*, const scsi_device*, const char*, const char*, ...)
    function void starget_for_each_device(scsi_target*, void*, void ()*)
    function int ufshcd_alloc_host(device*, ufs_hba**)
    function int ufshcd_config_pwr_mode(ufs_hba*, ufs_pa_layer_attr*)
    function void ufshcd_crypto_destroy_rq_keyslot_manager_spec(ufs_hba*, request_queue*)
    function void ufshcd_crypto_disable_spec(ufs_hba*)
    function void ufshcd_crypto_enable_spec(ufs_hba*)
    function void ufshcd_crypto_setup_rq_keyslot_manager_spec(ufs_hba*, request_queue*)
    function void ufshcd_dealloc_host(ufs_hba*)
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hba_init_crypto_spec(ufs_hba*, const keyslot_mgmt_ll_ops*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_init(ufs_hba*, void*, unsigned int)
    function int ufshcd_map_desc_id_to_length(ufs_hba*, desc_idn, int*)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function int ufshcd_prepare_lrbp_crypto_spec(ufs_hba*, scsi_cmnd*, ufshcd_lrb*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_runtime_idle(ufs_hba*)
    function int ufshcd_runtime_resume(ufs_hba*)
    function int ufshcd_runtime_suspend(ufs_hba*)
    function int ufshcd_shutdown(ufs_hba*)
    function int ufshcd_system_resume(ufs_hba*)
    function int ufshcd_system_suspend(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)

'struct ufs_dev_info at ufs.h:529:1' changed:
  type size changed from 16 to 64 (in bits)
  2 data member insertions:
    'u16 ufs_dev_info::spec_version', at offset 16 (in bits) at ufs.h:534:1
    'u32 ufs_dev_info::clk_gating_wait_us', at offset 32 (in bits) at ufs.h:535:1

  27 impacted interfaces:
    function int ufshcd_alloc_host(device*, ufs_hba**)
    function int ufshcd_config_pwr_mode(ufs_hba*, ufs_pa_layer_attr*)
    function void ufshcd_crypto_destroy_rq_keyslot_manager_spec(ufs_hba*, request_queue*)
    function void ufshcd_crypto_disable_spec(ufs_hba*)
    function void ufshcd_crypto_enable_spec(ufs_hba*)
    function void ufshcd_crypto_setup_rq_keyslot_manager_spec(ufs_hba*, request_queue*)
    function void ufshcd_dealloc_host(ufs_hba*)
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hba_init_crypto_spec(ufs_hba*, const keyslot_mgmt_ll_ops*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_init(ufs_hba*, void*, unsigned int)
    function int ufshcd_map_desc_id_to_length(ufs_hba*, desc_idn, int*)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function int ufshcd_prepare_lrbp_crypto_spec(ufs_hba*, scsi_cmnd*, ufshcd_lrb*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_runtime_idle(ufs_hba*)
    function int ufshcd_runtime_resume(ufs_hba*)
    function int ufshcd_runtime_suspend(ufs_hba*)
    function int ufshcd_shutdown(ufs_hba*)
    function int ufshcd_system_resume(ufs_hba*)
    function int ufshcd_system_suspend(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)

'struct ufs_hba at ufshcd.h:562:1' changed:
  type size changed from 27456 to 27520 (in bits)
  2 data member deletions:
    'bool ufs_hba::is_init_prefetch', at offset 3128 (in bits) at ufshcd.h:701:1

    'ufs_init_prefetch ufs_hba::init_prefetch_data', at offset 3136 (in bits) at ufshcd.h:702:1

  1 data member insertion:
    'bool ufs_hba::silence_err_logs', at offset 14720 (in bits) at ufshcd.h:702:1
  there are data member changes:
   'work_struct ufs_hba::eh_work' offset changed from 3200 to 3136 (in bits) (by -64 bits)
   'work_struct ufs_hba::eeh_work' offset changed from 3456 to 3392 (in bits) (by -64 bits)
   'u32 ufs_hba::errors' offset changed from 3712 to 3648 (in bits) (by -64 bits)
   'u32 ufs_hba::uic_error' offset changed from 3744 to 3680 (in bits) (by -64 bits)
   'u32 ufs_hba::saved_err' offset changed from 3776 to 3712 (in bits) (by -64 bits)
   'u32 ufs_hba::saved_uic_err' offset changed from 3808 to 3744 (in bits) (by -64 bits)
   'ufs_stats ufs_hba::ufs_stats' offset changed from 3840 to 3776 (in bits) (by -64 bits)
   type 'struct ufs_dev_info' of 'ufs_hba::dev_info' changed as reported earlier
   and size changed from 16 to 64 (in bits) (by +48 bits)
   'bool ufs_hba::auto_bkops_enabled' offset changed from 15888 to 15936 (in bits) (by +48 bits)
   'ufs_vreg_info ufs_hba::vreg_info' offset changed from 15936 to 16000 (in bits) (by +64 bits)
   'list_head ufs_hba::clk_list_head' offset changed from 16192 to 16256 (in bits) (by +64 bits)
   'bool ufs_hba::wlun_dev_clr_ua' offset changed from 16320 to 16384 (in bits) (by +64 bits)
   'int ufs_hba::req_abort_count' offset changed from 16352 to 16416 (in bits) (by +64 bits)
   'u32 ufs_hba::lanes_per_direction' offset changed from 16384 to 16448 (in bits) (by +64 bits)
   'ufs_pa_layer_attr ufs_hba::pwr_info' offset changed from 16416 to 16480 (in bits) (by +64 bits)
   'ufs_pwr_mode_info ufs_hba::max_pwr_info' offset changed from 16640 to 16704 (in bits) (by +64 bits)
   'ufs_clk_gating ufs_hba::clk_gating' offset changed from 16896 to 16960 (in bits) (by +64 bits)
   'u32 ufs_hba::caps' offset changed from 18688 to 18752 (in bits) (by +64 bits)
   'devfreq* ufs_hba::devfreq' offset changed from 18752 to 18816 (in bits) (by +64 bits)
   'ufs_clk_scaling ufs_hba::clk_scaling' offset changed from 18816 to 18880 (in bits) (by +64 bits)
   'bool ufs_hba::is_sys_suspended' offset changed from 20224 to 20288 (in bits) (by +64 bits)
   'bkops_status ufs_hba::urgent_bkops_lvl' offset changed from 20256 to 20320 (in bits) (by +64 bits)
   'bool ufs_hba::is_urgent_bkops_lvl_checked' offset changed from 20288 to 20352 (in bits) (by +64 bits)
   'rw_semaphore ufs_hba::clk_scaling_lock' offset changed from 20352 to 20416 (in bits) (by +64 bits)
   'ufs_desc_size ufs_hba::desc_size' offset changed from 20672 to 20736 (in bits) (by +64 bits)
   'atomic_t ufs_hba::scsi_block_reqs_cnt' offset changed from 20896 to 20960 (in bits) (by +64 bits)
   'device ufs_hba::bsg_dev' offset changed from 20928 to 20992 (in bits) (by +64 bits)
   'request_queue* ufs_hba::bsg_queue' offset changed from 27072 to 27136 (in bits) (by +64 bits)
   'ufs_crypto_capabilities ufs_hba::crypto_capabilities' offset changed from 27136 to 27200 (in bits) (by +64 bits)
   'ufs_crypto_cap_entry* ufs_hba::crypto_cap_array' offset changed from 27200 to 27264 (in bits) (by +64 bits)
   'u32 ufs_hba::crypto_cfg_register' offset changed from 27264 to 27328 (in bits) (by +64 bits)
   'ufs_crypto_cfg_entry* ufs_hba::crypto_cfgs' offset changed from 27328 to 27392 (in bits) (by +64 bits)
   'keyslot_manager* ufs_hba::ksm' offset changed from 27392 to 27456 (in bits) (by +64 bits)

  27 impacted interfaces:
    function int ufshcd_alloc_host(device*, ufs_hba**)
    function int ufshcd_config_pwr_mode(ufs_hba*, ufs_pa_layer_attr*)
    function void ufshcd_crypto_destroy_rq_keyslot_manager_spec(ufs_hba*, request_queue*)
    function void ufshcd_crypto_disable_spec(ufs_hba*)
    function void ufshcd_crypto_enable_spec(ufs_hba*)
    function void ufshcd_crypto_setup_rq_keyslot_manager_spec(ufs_hba*, request_queue*)
    function void ufshcd_dealloc_host(ufs_hba*)
    function int ufshcd_dme_get_attr(ufs_hba*, u32, u32*, u8)
    function int ufshcd_dme_set_attr(ufs_hba*, u32, u8, u32, u8)
    function int ufshcd_dump_regs(ufs_hba*, size_t, size_t, const char*)
    function u32 ufshcd_get_local_unipro_ver(ufs_hba*)
    function int ufshcd_hba_init_crypto_spec(ufs_hba*, const keyslot_mgmt_ll_ops*)
    function int ufshcd_hold(ufs_hba*, bool)
    function int ufshcd_init(ufs_hba*, void*, unsigned int)
    function int ufshcd_map_desc_id_to_length(ufs_hba*, desc_idn, int*)
    function int ufshcd_pltfrm_init(platform_device*, const ufs_hba_variant_ops*)
    function int ufshcd_prepare_lrbp_crypto_spec(ufs_hba*, scsi_cmnd*, ufshcd_lrb*)
    function void ufshcd_release(ufs_hba*)
    function void ufshcd_remove(ufs_hba*)
    function int ufshcd_runtime_idle(ufs_hba*)
    function int ufshcd_runtime_resume(ufs_hba*)
    function int ufshcd_runtime_suspend(ufs_hba*)
    function int ufshcd_shutdown(ufs_hba*)
    function int ufshcd_system_resume(ufs_hba*)
    function int ufshcd_system_suspend(ufs_hba*)
    function int ufshcd_uic_hibern8_enter(ufs_hba*)
    function int ufshcd_uic_hibern8_exit(ufs_hba*)

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Ied924a96364f4b3d5148d95a809c26c6ed680b2f
2019-12-13 17:21:18 +01:00
Greg Kroah-Hartman
7e59225e4e This is the 5.4.3 stable release
-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl3zQekACgkQONu9yGCS
 aT4v0xAAi39hk/9NMVQkOVJEAw7KtrqaidZ21c8DIZKwEEdmh5cgVTKjuF+PggXR
 VrSPSMuvCK9Xp4p4ZUPNr6WFYATxfUINZFvRc5gh1c9XtHrxjlWX9oi4XQ4a3zWC
 56Ak17gCt42eWcArHUslPQLFnq3XBDARs7qK8gv+6Vxt8w/3EaPkm4MKB8nGkdnK
 ItfkxGWnkKyUnwsE/01p1iR+LrbxnALXS+OM1izWBBA6ex2Zl6QDmmwZXXgKHOVt
 RAdO04t8k9jKrydo43DF/icUrYZuLbpIHaKIV6T0YH1Hco5qTZAz5+REmZelcEDH
 /vBNVxTVma5vAdYQsztEITv+qKNEkM2i+xoSoGierE8EPbRqo/ed3tDNdNxTmMcq
 zku+yztWm5VGicSbsGKRElwXt8+eyduIyEHyGKt5AON7n0NRDBmGl+HCnEU7Agoy
 XKJ+aDHjWK4AAYZL9osZ0MQ3QF55Dpaylijjnihc9VlMTVOTDY49MD8XSfoj0VFq
 pOdH7NWNDvh5eJfd+DQQHMtlMxN2dMppRlclh/ecXZ+2r6oKB/E11D9lzCguFZtQ
 HR1vDHl6HpnP08MXn++AZj0/hCx+zS/GzXJccGqjP5GWH10BAA+Kfig+ooo/t9We
 SJc8WcySU+0lmJN8yegcEintDyv/HkPQzJApRw3P0iL0t8oN8Ac=
 =8yzT
 -----END PGP SIGNATURE-----

Merge 5.4.3 into android-5.4

Changes in 5.4.3
	rsi: release skb if rsi_prepare_beacon fails
	arm64: tegra: Fix 'active-low' warning for Jetson TX1 regulator
	arm64: tegra: Fix 'active-low' warning for Jetson Xavier regulator
	perf scripts python: exported-sql-viewer.py: Fix use of TRUE with SQLite
	sparc64: implement ioremap_uc
	lp: fix sparc64 LPSETTIMEOUT ioctl
	time: Zero the upper 32-bits in __kernel_timespec on 32-bit
	mailbox: tegra: Fix superfluous IRQ error message
	staging/octeon: Use stubs for MIPS && !CAVIUM_OCTEON_SOC
	usb: gadget: u_serial: add missing port entry locking
	serial: 8250-mtk: Use platform_get_irq_optional() for optional irq
	tty: serial: fsl_lpuart: use the sg count from dma_map_sg
	tty: serial: msm_serial: Fix flow control
	serial: pl011: Fix DMA ->flush_buffer()
	serial: serial_core: Perform NULL checks for break_ctl ops
	serial: stm32: fix clearing interrupt error flags
	serial: 8250_dw: Avoid double error messaging when IRQ absent
	serial: ifx6x60: add missed pm_runtime_disable
	mwifiex: Re-work support for SDIO HW reset
	io_uring: fix dead-hung for non-iter fixed rw
	io_uring: transform send/recvmsg() -ERESTARTSYS to -EINTR
	fuse: fix leak of fuse_io_priv
	fuse: verify nlink
	fuse: verify write return
	fuse: verify attributes
	io_uring: fix missing kmap() declaration on powerpc
	io_uring: ensure req->submit is copied when req is deferred
	SUNRPC: Avoid RPC delays when exiting suspend
	ALSA: hda/realtek - Enable internal speaker of ASUS UX431FLC
	ALSA: hda/realtek - Enable the headset-mic on a Xiaomi's laptop
	ALSA: hda/realtek - Dell headphone has noise on unmute for ALC236
	ALSA: hda/realtek - Fix inverted bass GPIO pin on Acer 8951G
	ALSA: pcm: oss: Avoid potential buffer overflows
	ALSA: hda - Add mute led support for HP ProBook 645 G4
	ALSA: hda: Modify stream stripe mask only when needed
	soc: mediatek: cmdq: fixup wrong input order of write api
	Input: synaptics - switch another X1 Carbon 6 to RMI/SMbus
	Input: synaptics-rmi4 - re-enable IRQs in f34v7_do_reflash
	Input: synaptics-rmi4 - don't increment rmiaddr for SMBus transfers
	Input: goodix - add upside-down quirk for Teclast X89 tablet
	coresight: etm4x: Fix input validation for sysfs.
	Input: Fix memory leak in psxpad_spi_probe
	media: rc: mark input device as pointing stick
	x86/mm/32: Sync only to VMALLOC_END in vmalloc_sync_all()
	x86/PCI: Avoid AMD FCH XHCI USB PME# from D0 defect
	CIFS: Fix NULL-pointer dereference in smb2_push_mandatory_locks
	CIFS: Fix SMB2 oplock break processing
	tty: vt: keyboard: reject invalid keycodes
	can: slcan: Fix use-after-free Read in slcan_open
	nfsd: Ensure CLONE persists data and metadata changes to the target file
	nfsd: restore NFSv3 ACL support
	kernfs: fix ino wrap-around detection
	jbd2: Fix possible overflow in jbd2_log_space_left()
	drm/msm: fix memleak on release
	drm: damage_helper: Fix race checking plane->state->fb
	drm/i810: Prevent underflow in ioctl
	arm64: Validate tagged addresses in access_ok() called from kernel threads
	arm64: dts: exynos: Revert "Remove unneeded address space mapping for soc node"
	KVM: PPC: Book3S HV: XIVE: Free previous EQ page when setting up a new one
	KVM: PPC: Book3S HV: XIVE: Fix potential page leak on error path
	KVM: PPC: Book3S HV: XIVE: Set kvm->arch.xive when VPs are allocated
	KVM: nVMX: Always write vmcs02.GUEST_CR3 during nested VM-Enter
	KVM: arm/arm64: vgic: Don't rely on the wrong pending table
	KVM: x86: do not modify masked bits of shared MSRs
	KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES
	KVM: x86: Remove a spurious export of a static function
	KVM: x86: Grab KVM's srcu lock when setting nested state
	crypto: crypto4xx - fix double-free in crypto4xx_destroy_sdr
	crypto: atmel-aes - Fix IV handling when req->nbytes < ivsize
	crypto: af_alg - cast ki_complete ternary op to int
	crypto: geode-aes - switch to skcipher for cbc(aes) fallback
	crypto: ccp - fix uninitialized list head
	crypto: ecdh - fix big endian bug in ECC library
	crypto: user - fix memory leak in crypto_report
	crypto: user - fix memory leak in crypto_reportstat
	spi: spi-fsl-qspi: Clear TDH bits in FLSHCR register
	spi: stm32-qspi: Fix kernel oops when unbinding driver
	spi: atmel: Fix CS high support
	spi: Fix SPI_CS_HIGH setting when using native and GPIO CS
	spi: Fix NULL pointer when setting SPI_CS_HIGH for GPIO CS
	can: ucan: fix non-atomic allocation in completion handler
	RDMA/qib: Validate ->show()/store() callbacks before calling them
	rfkill: allocate static minor
	bdev: Factor out bdev revalidation into a common helper
	bdev: Refresh bdev size for disks without partitioning
	iomap: Fix pipe page leakage during splicing
	thermal: Fix deadlock in thermal thermal_zone_device_check
	vcs: prevent write access to vcsu devices
	Revert "serial/8250: Add support for NI-Serial PXI/PXIe+485 devices"
	binder: Fix race between mmap() and binder_alloc_print_pages()
	binder: Prevent repeated use of ->mmap() via NULL mapping
	binder: Handle start==NULL in binder_update_page_range()
	KVM: x86: fix out-of-bounds write in KVM_GET_EMULATED_CPUID (CVE-2019-19332)
	ALSA: hda - Fix pending unsol events at shutdown
	cpufreq: imx-cpufreq-dt: Correct i.MX8MN's default speed grade value
	md/raid0: Fix an error message in raid0_make_request()
	drm/mcde: Fix an error handling path in 'mcde_probe()'
	watchdog: aspeed: Fix clock behaviour for ast2600
	EDAC/ghes: Fix locking and memory barrier issues
	perf script: Fix invalid LBR/binary mismatch error
	kselftest: Fix NULL INSTALL_PATH for TARGETS runlist
	Linux 5.4.3

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I4dabe2d29ae191e3c99ade22b1c385f68b5a77d4
2019-12-13 17:03:53 +01:00
Alistair Delva
e92b86005a ANDROID: update abi_gki_aarch64.xml for ion, drm changes
Leaf changes summary: 2 artifacts changed
Changed leaf types summary: 0 leaf type changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 2 Added functions
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

2 Added functions:

  [A] 'function int drm_mode_convert_umode(drm_device*, drm_display_mode*, const drm_mode_modeinfo*)'
  [A] 'function void ion_buffer_prep_noncached(ion_buffer*)'

Bug: 139653858
Change-Id: I94e105aab84fdfd632e06d79b9aa42c32c38aaa3
Signed-off-by: Alistair Delva <adelva@google.com>
2019-12-13 15:19:17 +00:00
Shashank Babu Chinta Venkata
c9b38cbd86 ANDROID: drivers: gpu: drm: export drm_mode_convert_umode symbol
Export drm_mode_convert_umode symbol for module consumption.

Bug: 139653858
Signed-off-by: Shashank Babu Chinta Venkata <sbchin@codeaurora.org>
Change-Id: I5d4c15a5edb28616a2ff01d5acdf498bad6973d8
2019-12-13 15:19:06 +00:00
Vincent Donnefort
20a9f3da0e ANDROID: ion: flush cache before exporting non-cached buffers
The memory allocated from the page pool might be in the CPU cache, as the
zeroing can have been done through cache. e.g GFP_ZERO, or if the buffer
was used as cached memory previously. To map this memory as non-cached, we
need to flush the CPU cache first, to avoid any memory corruption when the
corresponding dirty cache line gets evicted.

A proper fix would be to flush the cache using the Linux DMA API. The
problem is that the buffer can be used without a device attached, which is
not covered since the introduction of:

  commit 1dccb598df ("arm64: simplify dma_get_ops")

This patch is then a dirty fix, calling directly cache flush function, to
cover the export of non-cached to an ION client. It ensures that the cache
line is actually cleaned before the memory is used as non-cached.

Change-Id: I9179c2f644a29ae71820c4ae63c880195f55e45d
Signed-off-by: Vincent Donnefort <vincent.donnefort@arm.com>
2019-12-13 15:18:49 +00:00
Greg Kroah-Hartman
f7688b48ac Linux 5.4.3 2019-12-13 08:43:32 +01:00
Prabhakar Kushwaha
57e4b1c3e3 kselftest: Fix NULL INSTALL_PATH for TARGETS runlist
[ Upstream commit 02bf1f8b3c43eec5053c35c14fb9f138186b4123 ]

As per commit 131b30c94f ("kselftest: exclude failed TARGETS from
runlist") failed targets were excluded from the runlist. But value
$$INSTALL_PATH is always NULL. It should be $INSTALL_PATH instead
$$INSTALL_PATH.

So, fix Makefile to use $INSTALL_PATH.

Fixes: 131b30c94f ("kselftest: exclude failed TARGETS from runlist")
Signed-off-by: Prabhakar Kushwaha <pkushwaha@marvell.com>
Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:31 +01:00
Adrian Hunter
7da7a701e2 perf script: Fix invalid LBR/binary mismatch error
[ Upstream commit 5172672da02e483d9b3c4d814c3482d0c8ffb1a6 ]

The 'len' returned by grab_bb() includes an extra MAXINSN bytes to allow
for the last instruction, so the the final 'offs' will not be 'len'.
Fix the error condition logic accordingly.

Before:

  $ perf record -e '{intel_pt//,cpu/mem_inst_retired.all_loads,aux-sample-size=8192/pp}:u' grep -rqs jhgjhg /boot
  [ perf record: Woken up 19 times to write data ]
  [ perf record: Captured and wrote 2.274 MB perf.data ]
  $ perf script -F +brstackinsn --xed --itrace=i1usl100 | head
            grep 13759 [002]  8091.310257:       1862                                        instructions:uH:      5641d58069eb bmexec+0x86b (/bin/grep)
        bmexec+2485:
        00005641d5806b35                        jnz 0x5641d5806bd0              # MISPRED
        00005641d5806bd0                        movzxb  (%r13,%rdx,1), %eax
        00005641d5806bd6                        add %rdi, %rax
        00005641d5806bd9                        movzxb  -0x1(%rax), %edx
        00005641d5806bdd                        cmp %rax, %r14
        00005641d5806be0                        jnb 0x5641d58069c0              # MISPRED
        mismatch of LBR data and executable
        00005641d58069c0                        movzxb  (%r13,%rdx,1), %edi

After:

  $ perf script -F +brstackinsn --xed --itrace=i1usl100 | head
            grep 13759 [002]  8091.310257:       1862                                        instructions:uH:      5641d58069eb bmexec+0x86b (/bin/grep)
        bmexec+2485:
        00005641d5806b35                        jnz 0x5641d5806bd0              # MISPRED
        00005641d5806bd0                        movzxb  (%r13,%rdx,1), %eax
        00005641d5806bd6                        add %rdi, %rax
        00005641d5806bd9                        movzxb  -0x1(%rax), %edx
        00005641d5806bdd                        cmp %rax, %r14
        00005641d5806be0                        jnb 0x5641d58069c0              # MISPRED
        00005641d58069c0                        movzxb  (%r13,%rdx,1), %edi
        00005641d58069c6                        add %rax, %rdi

Fixes: e98df280bc ("perf script brstackinsn: Fix recovery from LBR/binary mismatch")
Reported-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lore.kernel.org/lkml/20191127095631.15663-1-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:31 +01:00
Robert Richter
d2136afb51 EDAC/ghes: Fix locking and memory barrier issues
[ Upstream commit 23f61b9fc5cc10d87f66e50518707eec2a0fbda1 ]

The ghes registration and refcount is broken in several ways:

 * ghes_edac_register() returns with success for a 2nd instance
   even if a first instance's registration is still running. This is
   not correct as the first instance may fail later. A subsequent
   registration may not finish before the first. Parallel registrations
   must be avoided.

 * The refcount was increased even if a registration failed. This
   leads to stale counters preventing the device from being released.

 * The ghes refcount may not be decremented properly on unregistration.
   Always decrement the refcount once ghes_edac_unregister() is called to
   keep the refcount sane.

 * The ghes_pvt pointer is handed to the irq handler before registration
   finished.

 * The mci structure could be freed while the irq handler is running.

Fix this by adding a mutex to ghes_edac_register(). This mutex
serializes instances to register and unregister. The refcount is only
increased if the registration succeeded. This makes sure the refcount is
in a consistent state after registering or unregistering a device.

Note: A spinlock cannot be used here as the code section may sleep.

The ghes_pvt is protected by ghes_lock now. This ensures the pointer is
not updated before registration was finished or while the irq handler is
running. It is unset before unregistering the device including necessary
(implicit) memory barriers making the changes visible to other CPUs.
Thus, the device can not be used anymore by an interrupt.

Also, rename ghes_init to ghes_refcount for better readability and
switch to refcount API.

A refcount is needed because there can be multiple GHES structures being
defined (see ACPI 6.3 specification, 18.3.2.7 Generic Hardware Error
Source, "Some platforms may describe multiple Generic Hardware Error
Source structures with different notification types, ...").

Another approach to use the mci's device refcount (get_device()) and
have a release function does not work here. A release function will be
called only for device_release() with the last put_device() call. The
device must be deleted *before* that with device_del(). This is only
possible by maintaining an own refcount.

 [ bp: touchups. ]

Fixes: 0fe5f281f7 ("EDAC, ghes: Model a single, logical memory controller")
Fixes: 1e72e673b9 ("EDAC/ghes: Fix Use after free in ghes_edac remove path")
Co-developed-by: James Morse <james.morse@arm.com>
Signed-off-by: James Morse <james.morse@arm.com>
Co-developed-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Robert Richter <rrichter@marvell.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: "linux-edac@vger.kernel.org" <linux-edac@vger.kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Tony Luck <tony.luck@intel.com>
Link: https://lkml.kernel.org/r/20191105200732.3053-1-rrichter@marvell.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:30 +01:00
Joel Stanley
8a13daae81 watchdog: aspeed: Fix clock behaviour for ast2600
[ Upstream commit c04571251b3d842096f1597f5d4badb508be016d ]

The ast2600 no longer uses bit 4 in the control register to indicate a
1MHz clock (It now controls whether this watchdog is reset by a SOC
reset). This means we do not want to set it. It also does not need to be
set for the ast2500, as it is read-only on that SoC.

The comment next to the clock rate selection wandered away from where it
was set, so put it back next to the register setting it's describing.

Fixes: b3528b4874 ("watchdog: aspeed: Add support for AST2600")
Signed-off-by: Joel Stanley <joel@jms.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20191108032905.22463-1-joel@jms.id.au
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:30 +01:00
Christophe JAILLET
6dc2a7e67e drm/mcde: Fix an error handling path in 'mcde_probe()'
[ Upstream commit 15c665bb4637310bc8ce5f357b6a6e5a8aafc7c1 ]

If we don't find any matching components, we should go through the error
handling path, in order to free some resources.

Fixes: ca5be902a8 ("drm/mcde: Fix uninitialized variable")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190822211518.5578-1-christophe.jaillet@wanadoo.fr
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:29 +01:00
Dan Carpenter
526152a239 md/raid0: Fix an error message in raid0_make_request()
[ Upstream commit e3fc3f3d0943b126f76b8533960e4168412d9e5a ]

The first argument to WARN() is supposed to be a condition.  The
original code will just print the mdname() instead of the full warning
message.

Fixes: c84a1372df ("md/raid0: avoid RAID0 data corruption due to layout confusion.")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:29 +01:00
Anson Huang
7a5e10c1d6 cpufreq: imx-cpufreq-dt: Correct i.MX8MN's default speed grade value
[ Upstream commit af44d180e3de4cb411ce327b147ea3513f0bbbcb ]

i.MX8MN has different speed grade definition compared to
i.MX8MQ/i.MX8MM, when fuses are NOT written, the default
speed_grade should be set to minimum available OPP defined
in DT which is 1.2GHz, the corresponding speed_grade value
should be 0xb.

Fixes: 5b8010ba70 ("cpufreq: imx-cpufreq-dt: Add i.MX8MN support")
Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:28 +01:00
Takashi Iwai
0d4e867e0c ALSA: hda - Fix pending unsol events at shutdown
[ Upstream commit ca58f55108fee41d87c9123f85ad4863e5de7f45 ]

This is an alternative fix attemp for the issue reported in the commit
caa8422d01 ("ALSA: hda: Flush interrupts on disabling") that was
reverted later due to regressions.  Instead of tweaking the hardware
disablement order and the enforced irq flushing, do calling
cancel_work_sync() of the unsol work early enough, and explicitly
ignore the unsol events during the shutdown by checking the
bus->shutdown flag.

Fixes: caa8422d01 ("ALSA: hda: Flush interrupts on disabling")
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://lore.kernel.org/r/s5h1ruxt9cz.wl-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:27 +01:00
Paolo Bonzini
8ad39a3b44 KVM: x86: fix out-of-bounds write in KVM_GET_EMULATED_CPUID (CVE-2019-19332)
commit 433f4ba1904100da65a311033f17a9bf586b287e upstream.

The bounds check was present in KVM_GET_SUPPORTED_CPUID but not
KVM_GET_EMULATED_CPUID.

Reported-by: syzbot+e3f4897236c4eeb8af4f@syzkaller.appspotmail.com
Fixes: 84cffe499b ("kvm: Emulate MOVBE", 2013-10-29)
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:26 +01:00
Jann Horn
e8f669921e binder: Handle start==NULL in binder_update_page_range()
commit 2a9edd056ed4fbf9d2e797c3fc06335af35bccc4 upstream.

The old loop wouldn't stop when reaching `start` if `start==NULL`, instead
continuing backwards to index -1 and crashing.

Luckily you need to be highly privileged to map things at NULL, so it's not
a big problem.

Fix it by adjusting the loop so that the loop variable is always in bounds.

This patch is deliberately minimal to simplify backporting, but IMO this
function could use a refactor. The jump labels in the second loop body are
horrible (the error gotos should be jumping to free_range instead), and
both loops would look nicer if they just iterated upwards through indices.
And the up_read()+mmput() shouldn't be duplicated like that.

Cc: stable@vger.kernel.org
Fixes: 457b9a6f09 ("Staging: android: add binder driver")
Signed-off-by: Jann Horn <jannh@google.com>
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
Link: https://lore.kernel.org/r/20191018205631.248274-3-jannh@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:25 +01:00
Jann Horn
015c08bc70 binder: Prevent repeated use of ->mmap() via NULL mapping
commit a7a74d7ff55a0c657bc46238b050460b9eacea95 upstream.

binder_alloc_mmap_handler() attempts to detect the use of ->mmap() on a
binder_proc whose binder_alloc has already been initialized by checking
whether alloc->buffer is non-zero.

Before commit 880211667b ("binder: remove kernel vm_area for buffer
space"), alloc->buffer was a kernel mapping address, which is always
non-zero, but since that commit, it is a userspace mapping address.

A sufficiently privileged user can map /dev/binder at NULL, tricking
binder_alloc_mmap_handler() into assuming that the binder_proc has not been
mapped yet. This leads to memory unsafety.
Luckily, no context on Android has such privileges, and on a typical Linux
desktop system, you need to be root to do that.

Fix it by using the mapping size instead of the mapping address to
distinguish the mapped case. A valid VMA can't have size zero.

Fixes: 880211667b ("binder: remove kernel vm_area for buffer space")
Cc: stable@vger.kernel.org
Signed-off-by: Jann Horn <jannh@google.com>
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
Link: https://lore.kernel.org/r/20191018205631.248274-2-jannh@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:25 +01:00
Jann Horn
6e0efd9e9e binder: Fix race between mmap() and binder_alloc_print_pages()
commit 8eb52a1ee37aafd9b796713aa0b3ab9cbc455be3 upstream.

binder_alloc_print_pages() iterates over
alloc->pages[0..alloc->buffer_size-1] under alloc->mutex.
binder_alloc_mmap_handler() writes alloc->pages and alloc->buffer_size
without holding that lock, and even writes them before the last bailout
point.

Unfortunately we can't take the alloc->mutex in the ->mmap() handler
because mmap_sem can be taken while alloc->mutex is held.
So instead, we have to locklessly check whether the binder_alloc has been
fully initialized with binder_alloc_get_vma(), like in
binder_alloc_new_buf_locked().

Fixes: 8ef4665aa1 ("android: binder: Add page usage in binder stats")
Cc: stable@vger.kernel.org
Signed-off-by: Jann Horn <jannh@google.com>
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
Link: https://lore.kernel.org/r/20191018205631.248274-1-jannh@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:23 +01:00
Je Yen Tam
0bbb506cd5 Revert "serial/8250: Add support for NI-Serial PXI/PXIe+485 devices"
commit 27ed14d0ecb38516b6f3c6fdcd62c25c9454f979 upstream.

This reverts commit fdc2de8712 ("serial/8250:
Add support for NI-Serial PXI/PXIe+485 devices").

The commit fdc2de8712 ("serial/8250: Add support for NI-Serial
PXI/PXIe+485 devices") introduced a breakage on NI-Serial PXI(e)-RS485
devices, RS-232 variants have no issue. The Linux system can enumerate the
NI-Serial PXI(e)-RS485 devices, but it broke the R/W operation on the
ports.

However, the implementation is working on the NI internal Linux RT kernel
but it does not work in the Linux main tree kernel. This is only affecting
NI products, specifically the RS-485 variants. Reverting the upstream
until a proper implementation that can apply to both NI internal Linux
kernel and Linux mainline kernel is figured out.

Signed-off-by: Je Yen Tam <je.yen.tam@ni.com>
Fixes: fdc2de8712 ("serial/8250: Add support for NI-Serial PXI/PXIe+485 devices")
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20191127075301.9866-1-je.yen.tam@ni.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:22 +01:00
Nicolas Pitre
0b0923bb6d vcs: prevent write access to vcsu devices
commit 0c9acb1af77a3cb8707e43f45b72c95266903cee upstream.

Commit d21b0be246 ("vt: introduce unicode mode for /dev/vcs") guarded
against using devices containing attributes as this is not yet
implemented. It however failed to guard against writes to any devices
as this is also unimplemented.

Reported-by: Or Cohen <orcohen@paloaltonetworks.com>
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
Cc: <stable@vger.kernel.org> # v4.19+
Cc: Jiri Slaby <jslaby@suse.com>
Fixes: d21b0be246 ("vt: introduce unicode mode for /dev/vcs")
Link: https://lore.kernel.org/r/nycvar.YSQ.7.76.1911051030580.30289@knanqh.ubzr
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:22 +01:00
Wei Wang
7d967912c0 thermal: Fix deadlock in thermal thermal_zone_device_check
commit 163b00cde7cf2206e248789d2780121ad5e6a70b upstream.

1851799e1d ("thermal: Fix use-after-free when unregistering thermal zone
device") changed cancel_delayed_work to cancel_delayed_work_sync to avoid
a use-after-free issue. However, cancel_delayed_work_sync could be called
insides the WQ causing deadlock.

[54109.642398] c0   1162 kworker/u17:1   D    0 11030      2 0x00000000
[54109.642437] c0   1162 Workqueue: thermal_passive_wq thermal_zone_device_check
[54109.642447] c0   1162 Call trace:
[54109.642456] c0   1162  __switch_to+0x138/0x158
[54109.642467] c0   1162  __schedule+0xba4/0x1434
[54109.642480] c0   1162  schedule_timeout+0xa0/0xb28
[54109.642492] c0   1162  wait_for_common+0x138/0x2e8
[54109.642511] c0   1162  flush_work+0x348/0x40c
[54109.642522] c0   1162  __cancel_work_timer+0x180/0x218
[54109.642544] c0   1162  handle_thermal_trip+0x2c4/0x5a4
[54109.642553] c0   1162  thermal_zone_device_update+0x1b4/0x25c
[54109.642563] c0   1162  thermal_zone_device_check+0x18/0x24
[54109.642574] c0   1162  process_one_work+0x3cc/0x69c
[54109.642583] c0   1162  worker_thread+0x49c/0x7c0
[54109.642593] c0   1162  kthread+0x17c/0x1b0
[54109.642602] c0   1162  ret_from_fork+0x10/0x18
[54109.643051] c0   1162 kworker/u17:2   D    0 16245      2 0x00000000
[54109.643067] c0   1162 Workqueue: thermal_passive_wq thermal_zone_device_check
[54109.643077] c0   1162 Call trace:
[54109.643085] c0   1162  __switch_to+0x138/0x158
[54109.643095] c0   1162  __schedule+0xba4/0x1434
[54109.643104] c0   1162  schedule_timeout+0xa0/0xb28
[54109.643114] c0   1162  wait_for_common+0x138/0x2e8
[54109.643122] c0   1162  flush_work+0x348/0x40c
[54109.643131] c0   1162  __cancel_work_timer+0x180/0x218
[54109.643141] c0   1162  handle_thermal_trip+0x2c4/0x5a4
[54109.643150] c0   1162  thermal_zone_device_update+0x1b4/0x25c
[54109.643159] c0   1162  thermal_zone_device_check+0x18/0x24
[54109.643167] c0   1162  process_one_work+0x3cc/0x69c
[54109.643177] c0   1162  worker_thread+0x49c/0x7c0
[54109.643186] c0   1162  kthread+0x17c/0x1b0
[54109.643195] c0   1162  ret_from_fork+0x10/0x18
[54109.644500] c0   1162 cat             D    0  7766      1 0x00000001
[54109.644515] c0   1162 Call trace:
[54109.644524] c0   1162  __switch_to+0x138/0x158
[54109.644536] c0   1162  __schedule+0xba4/0x1434
[54109.644546] c0   1162  schedule_preempt_disabled+0x80/0xb0
[54109.644555] c0   1162  __mutex_lock+0x3a8/0x7f0
[54109.644563] c0   1162  __mutex_lock_slowpath+0x14/0x20
[54109.644575] c0   1162  thermal_zone_get_temp+0x84/0x360
[54109.644586] c0   1162  temp_show+0x30/0x78
[54109.644609] c0   1162  dev_attr_show+0x5c/0xf0
[54109.644628] c0   1162  sysfs_kf_seq_show+0xcc/0x1a4
[54109.644636] c0   1162  kernfs_seq_show+0x48/0x88
[54109.644656] c0   1162  seq_read+0x1f4/0x73c
[54109.644664] c0   1162  kernfs_fop_read+0x84/0x318
[54109.644683] c0   1162  __vfs_read+0x50/0x1bc
[54109.644692] c0   1162  vfs_read+0xa4/0x140
[54109.644701] c0   1162  SyS_read+0xbc/0x144
[54109.644708] c0   1162  el0_svc_naked+0x34/0x38
[54109.845800] c0   1162 D 720.000s 1->7766->7766 cat [panic]

Fixes: 1851799e1d ("thermal: Fix use-after-free when unregistering thermal zone device")
Cc: stable@vger.kernel.org
Signed-off-by: Wei Wang <wvw@google.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:21 +01:00
Jan Kara
58240f4571 iomap: Fix pipe page leakage during splicing
commit 419e9c38aa075ed0cd3c13d47e15954b686bcdb6 upstream.

When splicing using iomap_dio_rw() to a pipe, we may leak pipe pages
because bio_iov_iter_get_pages() records that the pipe will have full
extent worth of data however if file size is not block size aligned
iomap_dio_rw() returns less than what bio_iov_iter_get_pages() set up
and splice code gets confused leaking a pipe page with the file tail.

Handle the situation similarly to the old direct IO implementation and
revert iter to actually returned read amount which makes iter consistent
with value returned from iomap_dio_rw() and thus the splice code is
happy.

Fixes: ff6a9292e6 ("iomap: implement direct I/O")
CC: stable@vger.kernel.org
Reported-by: syzbot+991400e8eba7e00a26e1@syzkaller.appspotmail.com
Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:20 +01:00
Jan Kara
f41afbe8dc bdev: Refresh bdev size for disks without partitioning
commit cba22d86e0a10b7070d2e6a7379dbea51aa0883c upstream.

Currently, block device size in not updated on second and further open
for block devices where partition scan is disabled. This is particularly
annoying for example for DVD drives as that means block device size does
not get updated once the media is inserted into a drive if the device is
already open when inserting the media. This is actually always the case
for example when pktcdvd is in use.

Fix the problem by revalidating block device size on every open even for
devices with partition scan disabled.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Cc: Laura Abbott <labbott@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:19 +01:00
Jan Kara
f1f3ba27c0 bdev: Factor out bdev revalidation into a common helper
commit 731dc4868311ee097757b8746eaa1b4f8b2b4f1c upstream.

Factor out code handling revalidation of bdev on disk change into a
common helper.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Cc: Laura Abbott <labbott@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:18 +01:00
Marcel Holtmann
fbf86f6d5a rfkill: allocate static minor
commit 8670b2b8b029a6650d133486be9d2ace146fd29a upstream.

udev has a feature of creating /dev/<node> device-nodes if it finds
a devnode:<node> modalias. This allows for auto-loading of modules that
provide the node. This requires to use a statically allocated minor
number for misc character devices.

However, rfkill uses dynamic minor numbers and prevents auto-loading
of the module. So allocate the next static misc minor number and use
it for rfkill.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Link: https://lore.kernel.org/r/20191024174042.19851-1-marcel@holtmann.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-13 08:43:18 +01:00
Viresh Kumar
5ab462ef09 RDMA/qib: Validate ->show()/store() callbacks before calling them
commit 7ee23491b39259ae83899dd93b2a29ef0f22f0a7 upstream.

The permissions of the read-only or write-only sysfs files can be
changed (as root) and the user can then try to read a write-only file or
write to a read-only file which will lead to kernel crash here.

Protect against that by always validating the show/store callbacks.

Link: https://lore.kernel.org/r/d45cc26361a174ae12dbb86c994ef334d257924b.1573096807.git.viresh.kumar@linaro.org
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:16 +01:00
Johan Hovold
98ad98f809 can: ucan: fix non-atomic allocation in completion handler
commit 870db5d1015c8bd63e93b579e857223c96249ff7 upstream.

USB completion handlers are called in atomic context and must
specifically not allocate memory using GFP_KERNEL.

Fixes: 9f2d3eae88 ("can: ucan: add driver for Theobroma Systems UCAN devices")
Cc: stable <stable@vger.kernel.org>     # 4.19
Cc: Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>
Cc: Martin Elshuber <martin.elshuber@theobroma-systems.com>
Cc: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:16 +01:00
Gregory CLEMENT
7008e30bf2 spi: Fix NULL pointer when setting SPI_CS_HIGH for GPIO CS
commit 15f794bd977a0135328fbdd8a83cc64c1d267b39 upstream.

Even if the flag use_gpio_descriptors is set, it is possible that
cs_gpiods was not allocated, which leads to a kernel crash.

Reported-by: "kernelci.org bot" <bot@kernelci.org>
Fixes: 3e5ec1db8bfe ("spi: Fix SPI_CS_HIGH setting when using native and GPIO CS")
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Link: https://lore.kernel.org/r/20191024141309.22434-1-gregory.clement@bootlin.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:15 +01:00
Gregory CLEMENT
39552e0e71 spi: Fix SPI_CS_HIGH setting when using native and GPIO CS
commit 3e5ec1db8bfee845d9f8560d1c64aeaccd586398 upstream.

When improving the CS GPIO support at core level, the SPI_CS_HIGH
has been enabled for all the CS lines used for a given SPI controller.

However, the SPI framework allows to have on the same controller native
CS and GPIO CS. The native CS may not support the SPI_CS_HIGH, so they
should not be setup automatically.

With this patch the setting is done only for the CS that will use a
GPIO as CS

Fixes: f3186dd876 ("spi: Optionally use GPIO descriptors for CS GPIOs")
Cc: <stable@vger.kernel.org>
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Link: https://lore.kernel.org/r/20191018152929.3287-1-gregory.clement@bootlin.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:14 +01:00
Gregory CLEMENT
0c6e9bb642 spi: atmel: Fix CS high support
commit 7cbb16b2122c09f2ae393a1542fed628505b9da6 upstream.

Until a few years ago, this driver was only used with CS GPIO. The
only exception is CS0 on AT91RM9200 which has to use internal CS. A
limitation of the internal CS is that they don't support CS High.

So by using the CS GPIO the CS high configuration was available except
for the particular case CS0 on RM9200.

When the support for the internal chip-select was added, the check of
the CS high support was not updated. Due to this the driver accepts
this configuration for all the SPI controller v2 (used by all SoCs
excepting the AT91RM9200) whereas the hardware doesn't support it for
infernal CS.

This patch fixes the test to match the hardware capabilities.

Fixes: 4820303480 ("spi: atmel: add support for the internal chip-select of the spi controller")
Cc: <stable@vger.kernel.org>
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Link: https://lore.kernel.org/r/20191017141846.7523-3-gregory.clement@bootlin.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:13 +01:00
Patrice Chotard
13978bd2d3 spi: stm32-qspi: Fix kernel oops when unbinding driver
commit 3c0af1dd2fe78adc02fe21f6cfe7d6cb8602573e upstream.

spi_master_put() must only be called in .probe() in case of error.

As devm_spi_register_master() is used during probe, spi_master_put()
mustn't be called in .remove() callback.

It fixes the following kernel WARNING/Oops when executing
echo "58003000.spi" > /sys/bus/platform/drivers/stm32-qspi/unbind :

------------[ cut here ]------------
WARNING: CPU: 1 PID: 496 at fs/kernfs/dir.c:1504 kernfs_remove_by_name_ns+0x9c/0xa4
kernfs: can not remove 'uevent', no directory
Modules linked in:
CPU: 1 PID: 496 Comm: sh Not tainted 5.3.0-rc1-00219-ga0e07bb51a37 #62
Hardware name: STM32 (Device Tree Support)
[<c0111570>] (unwind_backtrace) from [<c010d384>] (show_stack+0x10/0x14)
[<c010d384>] (show_stack) from [<c08db558>] (dump_stack+0xb4/0xc8)
[<c08db558>] (dump_stack) from [<c01209d8>] (__warn.part.3+0xbc/0xd8)
[<c01209d8>] (__warn.part.3) from [<c0120a5c>] (warn_slowpath_fmt+0x68/0x8c)
[<c0120a5c>] (warn_slowpath_fmt) from [<c02e5844>] (kernfs_remove_by_name_ns+0x9c/0xa4)
[<c02e5844>] (kernfs_remove_by_name_ns) from [<c05833a4>] (device_del+0x128/0x358)
[<c05833a4>] (device_del) from [<c05835f8>] (device_unregister+0x24/0x64)
[<c05835f8>] (device_unregister) from [<c0638dac>] (spi_unregister_controller+0x88/0xe8)
[<c0638dac>] (spi_unregister_controller) from [<c058c580>] (release_nodes+0x1bc/0x200)
[<c058c580>] (release_nodes) from [<c0588a44>] (device_release_driver_internal+0xec/0x1ac)
[<c0588a44>] (device_release_driver_internal) from [<c0586840>] (unbind_store+0x60/0xd4)
[<c0586840>] (unbind_store) from [<c02e64e8>] (kernfs_fop_write+0xe8/0x1c4)
[<c02e64e8>] (kernfs_fop_write) from [<c0266b44>] (__vfs_write+0x2c/0x1c0)
[<c0266b44>] (__vfs_write) from [<c02694c0>] (vfs_write+0xa4/0x184)
[<c02694c0>] (vfs_write) from [<c0269710>] (ksys_write+0x58/0xd0)
[<c0269710>] (ksys_write) from [<c0101000>] (ret_fast_syscall+0x0/0x54)
Exception stack(0xdd289fa8 to 0xdd289ff0)
9fa0:                   0000006c 000e20e8 00000001 000e20e8 0000000d 00000000
9fc0: 0000006c 000e20e8 b6f87da0 00000004 0000000d 0000000d 00000000 00000000
9fe0: 00000004 bee639b0 b6f2286b b6eaf6c6
---[ end trace 1b15df8a02d76aef ]---
------------[ cut here ]------------
WARNING: CPU: 1 PID: 496 at fs/kernfs/dir.c:1504 kernfs_remove_by_name_ns+0x9c/0xa4
kernfs: can not remove 'online', no directory
Modules linked in:
CPU: 1 PID: 496 Comm: sh Tainted: G        W         5.3.0-rc1-00219-ga0e07bb51a37 #62
Hardware name: STM32 (Device Tree Support)
[<c0111570>] (unwind_backtrace) from [<c010d384>] (show_stack+0x10/0x14)
[<c010d384>] (show_stack) from [<c08db558>] (dump_stack+0xb4/0xc8)
[<c08db558>] (dump_stack) from [<c01209d8>] (__warn.part.3+0xbc/0xd8)
[<c01209d8>] (__warn.part.3) from [<c0120a5c>] (warn_slowpath_fmt+0x68/0x8c)
[<c0120a5c>] (warn_slowpath_fmt) from [<c02e5844>] (kernfs_remove_by_name_ns+0x9c/0xa4)
[<c02e5844>] (kernfs_remove_by_name_ns) from [<c0582488>] (device_remove_attrs+0x20/0x5c)
[<c0582488>] (device_remove_attrs) from [<c05833b0>] (device_del+0x134/0x358)
[<c05833b0>] (device_del) from [<c05835f8>] (device_unregister+0x24/0x64)
[<c05835f8>] (device_unregister) from [<c0638dac>] (spi_unregister_controller+0x88/0xe8)
[<c0638dac>] (spi_unregister_controller) from [<c058c580>] (release_nodes+0x1bc/0x200)
[<c058c580>] (release_nodes) from [<c0588a44>] (device_release_driver_internal+0xec/0x1ac)
[<c0588a44>] (device_release_driver_internal) from [<c0586840>] (unbind_store+0x60/0xd4)
[<c0586840>] (unbind_store) from [<c02e64e8>] (kernfs_fop_write+0xe8/0x1c4)
[<c02e64e8>] (kernfs_fop_write) from [<c0266b44>] (__vfs_write+0x2c/0x1c0)
[<c0266b44>] (__vfs_write) from [<c02694c0>] (vfs_write+0xa4/0x184)
[<c02694c0>] (vfs_write) from [<c0269710>] (ksys_write+0x58/0xd0)
[<c0269710>] (ksys_write) from [<c0101000>] (ret_fast_syscall+0x0/0x54)
Exception stack(0xdd289fa8 to 0xdd289ff0)
9fa0:                   0000006c 000e20e8 00000001 000e20e8 0000000d 00000000
9fc0: 0000006c 000e20e8 b6f87da0 00000004 0000000d 0000000d 00000000 00000000
9fe0: 00000004 bee639b0 b6f2286b b6eaf6c6
---[ end trace 1b15df8a02d76af0 ]---
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 00000050
pgd = e612f14d
[00000050] *pgd=ff1f5835
Internal error: Oops: 17 [#1] SMP ARM
Modules linked in:
CPU: 1 PID: 496 Comm: sh Tainted: G        W         5.3.0-rc1-00219-ga0e07bb51a37 #62
Hardware name: STM32 (Device Tree Support)
PC is at kernfs_find_ns+0x8/0xfc
LR is at kernfs_find_and_get_ns+0x30/0x48
pc : [<c02e49a4>]    lr : [<c02e4ac8>]    psr: 40010013
sp : dd289dac  ip : 00000000  fp : 00000000
r10: 00000000  r9 : def6ec58  r8 : dd289e54
r7 : 00000000  r6 : c0abb234  r5 : 00000000  r4 : c0d26a30
r3 : ddab5080  r2 : 00000000  r1 : c0abb234  r0 : 00000000
Flags: nZcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 10c5387d  Table: dd11c06a  DAC: 00000051
Process sh (pid: 496, stack limit = 0xe13a592d)
Stack: (0xdd289dac to 0xdd28a000)
9da0:                            c0d26a30 00000000 c0abb234 00000000 c02e4ac8
9dc0: 00000000 c0976b44 def6ec00 dea53810 dd289e54 c02e864c c0a61a48 c0a4a5ec
9de0: c0d630a8 def6ec00 c0d04c48 c02e86e0 def6ec00 de909338 c0d04c48 c05833b0
9e00: 00000000 c0638144 dd289e54 def59900 00000000 475b3ee5 def6ec00 00000000
9e20: def6ec00 def59b80 dd289e54 def59900 00000000 c05835f8 def6ec00 c0638dac
9e40: 0000000a dea53810 c0d04c48 c058c580 dea53810 def59500 def59b80 475b3ee5
9e60: ddc63e00 dea53810 dea3fe10 c0d63a0c dea53810 ddc63e00 dd289f78 dd240d10
9e80: 00000000 c0588a44 c0d59a20 0000000d c0d63a0c c0586840 0000000d dd240d00
9ea0: 00000000 00000000 ddc63e00 c02e64e8 00000000 00000000 c0d04c48 dd9bbcc0
9ec0: c02e6400 dd289f78 00000000 000e20e8 0000000d c0266b44 00000055 00000cc0
9ee0: 000000e3 000e3000 dd11c000 dd11c000 00000000 00000000 00000000 00000000
9f00: ffeee38c dff99688 00000000 475b3ee5 00000001 dd289fb0 ddab5080 ddaa5800
9f20: 00000817 000e30ec dd9e7720 475b3ee5 ddaa583c 0000000d dd9bbcc0 000e20e8
9f40: dd289f78 00000000 000e20e8 0000000d 00000000 c02694c0 00000000 00000000
9f60: c0d04c48 dd9bbcc0 00000000 00000000 dd9bbcc0 c0269710 00000000 00000000
9f80: 000a91f4 475b3ee5 0000006c 000e20e8 b6f87da0 00000004 c0101204 dd288000
9fa0: 00000004 c0101000 0000006c 000e20e8 00000001 000e20e8 0000000d 00000000
9fc0: 0000006c 000e20e8 b6f87da0 00000004 0000000d 0000000d 00000000 00000000
9fe0: 00000004 bee639b0 b6f2286b b6eaf6c6 600e0030 00000001 00000000 00000000
[<c02e49a4>] (kernfs_find_ns) from [<def6ec00>] (0xdef6ec00)
Code: ebf8eeab c0dc50b8 e92d40f0 e292c000 (e1d035b0)
---[ end trace 1b15df8a02d76af1 ]---

Fixes: a88eceb17a ("spi: stm32-qspi: add spi_master_put in release function")
Cc: <stable@vger.kernel.org>
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Link: https://lore.kernel.org/r/20191004123606.17241-1-patrice.chotard@st.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:13 +01:00
Frieder Schrempf
c69b17da53 spi: spi-fsl-qspi: Clear TDH bits in FLSHCR register
commit f6910679e17ad4915f008bd2c614d38052426f7c upstream.

Later versions of the QSPI controller (e.g. in i.MX6UL/ULL and i.MX7)
seem to have an additional TDH setting in the FLSHCR register, that
needs to be set in accordance with the access mode that is used (DDR
or SDR).

Previous bootstages such as BootROM or bootloader might have used the
DDR mode to access the flash. As we currently only use SDR mode, we
need to make sure the TDH bits are cleared upon initialization.

Fixes: 84d043185d ("spi: Add a driver for the Freescale/NXP QuadSPI controller")
Cc: <stable@vger.kernel.org>
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Acked-by: Han Xu <han.xu@nxp.com>
Link: https://lore.kernel.org/r/20191007071933.26786-1-frieder.schrempf@kontron.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:12 +01:00
Navid Emamdoost
d8d63ea238 crypto: user - fix memory leak in crypto_reportstat
commit c03b04dcdba1da39903e23cc4d072abf8f68f2dd upstream.

In crypto_reportstat, a new skb is created by nlmsg_new(). This skb is
leaked if crypto_reportstat_alg() fails. Required release for skb is
added.

Fixes: cac5818c25 ("crypto: user - Implement a generic crypto statistics")
Cc: <stable@vger.kernel.org>
Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:11 +01:00
Navid Emamdoost
b022e155cc crypto: user - fix memory leak in crypto_report
commit ffdde5932042600c6807d46c1550b28b0db6a3bc upstream.

In crypto_report, a new skb is created via nlmsg_new(). This skb should
be released if crypto_report_alg() fails.

Fixes: a38f7907b9 ("crypto: Add userspace configuration API")
Cc: <stable@vger.kernel.org>
Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:10 +01:00
Ard Biesheuvel
8e6d97c5b0 crypto: ecdh - fix big endian bug in ECC library
commit f398243e9fd6a3a059c1ea7b380c40628dbf0c61 upstream.

The elliptic curve arithmetic library used by the EC-DH KPP implementation
assumes big endian byte order, and unconditionally reverses the byte
and word order of multi-limb quantities. On big endian systems, the byte
reordering is not necessary, while the word ordering needs to be retained.

So replace the __swab64() invocation with a call to be64_to_cpu() which
should do the right thing for both little and big endian builds.

Fixes: 3c4b23901a ("crypto: ecdh - Add ECDH software support")
Cc: <stable@vger.kernel.org> # v4.9+
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:09 +01:00
Mark Salter
f1702e2047 crypto: ccp - fix uninitialized list head
commit 691505a803a7f223b2af621848d581259c61f77d upstream.

A NULL-pointer dereference was reported in fedora bz#1762199 while
reshaping a raid6 array after adding a fifth drive to an existing
array.

[   47.343549] md/raid:md0: raid level 6 active with 3 out of 5 devices, algorithm 2
[   47.804017] md0: detected capacity change from 0 to 7885289422848
[   47.822083] Unable to handle kernel read from unreadable memory at virtual address 0000000000000000
...
[   47.940477] CPU: 1 PID: 14210 Comm: md0_raid6 Tainted: G        W         5.2.18-200.fc30.aarch64 #1
[   47.949594] Hardware name: AMD Overdrive/Supercharger/To be filled by O.E.M., BIOS ROD1002C 04/08/2016
[   47.958886] pstate: 00400085 (nzcv daIf +PAN -UAO)
[   47.963668] pc : __list_del_entry_valid+0x2c/0xa8
[   47.968366] lr : ccp_tx_submit+0x84/0x168 [ccp]
[   47.972882] sp : ffff00001369b970
[   47.976184] x29: ffff00001369b970 x28: ffff00001369bdb8
[   47.981483] x27: 00000000ffffffff x26: ffff8003b758af70
[   47.986782] x25: ffff8003b758b2d8 x24: ffff8003e6245818
[   47.992080] x23: 0000000000000000 x22: ffff8003e62450c0
[   47.997379] x21: ffff8003dfd6add8 x20: 0000000000000003
[   48.002678] x19: ffff8003e6245100 x18: 0000000000000000
[   48.007976] x17: 0000000000000000 x16: 0000000000000000
[   48.013274] x15: 0000000000000000 x14: 0000000000000000
[   48.018572] x13: ffff7e000ef83a00 x12: 0000000000000001
[   48.023870] x11: ffff000010eff998 x10: 00000000000019a0
[   48.029169] x9 : 0000000000000000 x8 : ffff8003e6245180
[   48.034467] x7 : 0000000000000000 x6 : 000000000000003f
[   48.039766] x5 : 0000000000000040 x4 : ffff8003e0145080
[   48.045064] x3 : dead000000000200 x2 : 0000000000000000
[   48.050362] x1 : 0000000000000000 x0 : ffff8003e62450c0
[   48.055660] Call trace:
[   48.058095]  __list_del_entry_valid+0x2c/0xa8
[   48.062442]  ccp_tx_submit+0x84/0x168 [ccp]
[   48.066615]  async_tx_submit+0x224/0x368 [async_tx]
[   48.071480]  async_trigger_callback+0x68/0xfc [async_tx]
[   48.076784]  ops_run_biofill+0x178/0x1e8 [raid456]
[   48.081566]  raid_run_ops+0x248/0x818 [raid456]
[   48.086086]  handle_stripe+0x864/0x1208 [raid456]
[   48.090781]  handle_active_stripes.isra.0+0xb0/0x278 [raid456]
[   48.096604]  raid5d+0x378/0x618 [raid456]
[   48.100602]  md_thread+0xa0/0x150
[   48.103905]  kthread+0x104/0x130
[   48.107122]  ret_from_fork+0x10/0x18
[   48.110686] Code: d2804003 f2fbd5a3 eb03003f 54000320 (f9400021)
[   48.116766] ---[ end trace 23f390a527f7ad77 ]---

ccp_tx_submit is passed a dma_async_tx_descriptor which is contained in
a ccp_dma_desc and adds it to a ccp channel's pending list:

	list_del(&desc->entry);
	list_add_tail(&desc->entry, &chan->pending);

The problem is that desc->entry may be uninitialized in the
async_trigger_callback path where the descriptor was gotten
from ccp_prep_dma_interrupt which got it from ccp_alloc_dma_desc
which doesn't initialize the desc->entry list head. So, just
initialize the list head to avoid the problem.

Cc: <stable@vger.kernel.org>
Reported-by: Sahaj Sarup <sahajsarup@gmail.com>
Signed-off-by: Mark Salter <msalter@redhat.com>
Acked-by: Gary R Hook <gary.hook@amd.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:08 +01:00
Ard Biesheuvel
a75a2957f0 crypto: geode-aes - switch to skcipher for cbc(aes) fallback
commit 504582e8e40b90b8f8c58783e2d1e4f6a2b71a3a upstream.

Commit 79c65d179a ("crypto: cbc - Convert to skcipher") updated
the generic CBC template wrapper from a blkcipher to a skcipher algo,
to get away from the deprecated blkcipher interface. However, as a side
effect, drivers that instantiate CBC transforms using the blkcipher as
a fallback no longer work, since skciphers can wrap blkciphers but not
the other way around. This broke the geode-aes driver.

So let's fix it by moving to the sync skcipher interface when allocating
the fallback. At the same time, align with the generic API for ECB and
CBC by rejecting inputs that are not a multiple of the AES block size.

Fixes: 79c65d179a ("crypto: cbc - Convert to skcipher")
Cc: <stable@vger.kernel.org> # v4.20+ ONLY
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Florian Bezdeka <florian@bezdeka.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:08 +01:00
Ayush Sawal
2a00d74e0f crypto: af_alg - cast ki_complete ternary op to int
commit 64e7f852c47ce99f6c324c46d6a299a5a7ebead9 upstream.

when libkcapi test is executed  using HW accelerator, cipher operation
return -74.Since af_alg_async_cb->ki_complete treat err as unsigned int,
libkcapi receive 429467222 even though it expect -ve value.

Hence its required to cast resultlen to int so that proper
error is returned to libkcapi.

AEAD one shot non-aligned test 2(libkcapi test)
./../bin/kcapi   -x 10   -c "gcm(aes)" -i 7815d4b06ae50c9c56e87bd7
-k ea38ac0c9b9998c80e28fb496a2b88d9 -a
"853f98a750098bec1aa7497e979e78098155c877879556bb51ddeb6374cbaefc"
-t "c4ce58985b7203094be1d134c1b8ab0b" -q
"b03692f86d1b8b39baf2abb255197c98"

Fixes: d887c52d6a ("crypto: algif_aead - overhaul memory management")
Cc: <stable@vger.kernel.org>
Signed-off-by: Ayush Sawal <ayush.sawal@chelsio.com>
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Ayush Sawal <ayush.sawal@chelsio.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:06 +01:00
Tudor Ambarus
96ce5238c7 crypto: atmel-aes - Fix IV handling when req->nbytes < ivsize
commit 86ef1dfcb561473fbf5e199d58d18c55554d78be upstream.

commit 394a9e0447 ("crypto: cfb - add missing 'chunksize' property")
adds a test vector where the input length is smaller than the IV length
(the second test vector). This revealed a NULL pointer dereference in
the atmel-aes driver, that is caused by passing an incorrect offset in
scatterwalk_map_and_copy() when atmel_aes_complete() is called.

Do not save the IV in req->info of ablkcipher_request (or equivalently
req->iv of skcipher_request) when req->nbytes < ivsize, because the IV
will not be further used.

While touching the code, modify the type of ivsize from int to
unsigned int, to comply with the return type of
crypto_ablkcipher_ivsize().

Fixes: 91308019ec ("crypto: atmel-aes - properly set IV after {en,de}crypt")
Cc: <stable@vger.kernel.org>
Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:05 +01:00
Christian Lamparter
1e863b723e crypto: crypto4xx - fix double-free in crypto4xx_destroy_sdr
commit 746c908c4d72e49068ab216c3926d2720d71a90d upstream.

This patch fixes a crash that can happen during probe
when the available dma memory is not enough (this can
happen if the crypto4xx is built as a module).

The descriptor window mapping would end up being free'd
twice, once in crypto4xx_build_pdr() and the second time
in crypto4xx_destroy_sdr().

Fixes: 5d59ad6eea ("crypto: crypto4xx - fix crypto4xx_build_pdr, crypto4xx_build_sdr leak")
Cc: <stable@vger.kernel.org>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:04 +01:00
Sean Christopherson
d61ce96433 KVM: x86: Grab KVM's srcu lock when setting nested state
commit ad5996d9a0e8019c3ae5151e687939369acfe044 upstream.

Acquire kvm->srcu for the duration of ->set_nested_state() to fix a bug
where nVMX derefences ->memslots without holding ->srcu or ->slots_lock.

The other half of nested migration, ->get_nested_state(), does not need
to acquire ->srcu as it is a purely a dump of internal KVM (and CPU)
state to userspace.

Detected as an RCU lockdep splat that is 100% reproducible by running
KVM's state_test selftest with CONFIG_PROVE_LOCKING=y.  Note that the
failing function, kvm_is_visible_gfn(), is only checking the validity of
a gfn, it's not actually accessing guest memory (which is more or less
unsupported during vmx_set_nested_state() due to incorrect MMU state),
i.e. vmx_set_nested_state() itself isn't fundamentally broken.  In any
case, setting nested state isn't a fast path so there's no reason to go
out of our way to avoid taking ->srcu.

  =============================
  WARNING: suspicious RCU usage
  5.4.0-rc7+ #94 Not tainted
  -----------------------------
  include/linux/kvm_host.h:626 suspicious rcu_dereference_check() usage!

               other info that might help us debug this:

  rcu_scheduler_active = 2, debug_locks = 1
  1 lock held by evmcs_test/10939:
   #0: ffff88826ffcb800 (&vcpu->mutex){+.+.}, at: kvm_vcpu_ioctl+0x85/0x630 [kvm]

  stack backtrace:
  CPU: 1 PID: 10939 Comm: evmcs_test Not tainted 5.4.0-rc7+ #94
  Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
  Call Trace:
   dump_stack+0x68/0x9b
   kvm_is_visible_gfn+0x179/0x180 [kvm]
   mmu_check_root+0x11/0x30 [kvm]
   fast_cr3_switch+0x40/0x120 [kvm]
   kvm_mmu_new_cr3+0x34/0x60 [kvm]
   nested_vmx_load_cr3+0xbd/0x1f0 [kvm_intel]
   nested_vmx_enter_non_root_mode+0xab8/0x1d60 [kvm_intel]
   vmx_set_nested_state+0x256/0x340 [kvm_intel]
   kvm_arch_vcpu_ioctl+0x491/0x11a0 [kvm]
   kvm_vcpu_ioctl+0xde/0x630 [kvm]
   do_vfs_ioctl+0xa2/0x6c0
   ksys_ioctl+0x66/0x70
   __x64_sys_ioctl+0x16/0x20
   do_syscall_64+0x54/0x200
   entry_SYSCALL_64_after_hwframe+0x49/0xbe
  RIP: 0033:0x7f59a2b95f47

Fixes: 8fcc4b5923 ("kvm: nVMX: Introduce KVM_CAP_NESTED_STATE")
Cc: stable@vger.kernel.org
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:04 +01:00
Sean Christopherson
a4e2e22148 KVM: x86: Remove a spurious export of a static function
commit 24885d1d79e2e83d49201aeae0bc59f1402fd4f1 upstream.

A recent change inadvertently exported a static function, which results
in modpost throwing a warning.  Fix it.

Fixes: cbbaa2727aa3 ("KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES")
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Cc: stable@vger.kernel.org
Reviewed-by: Jim Mattson <jmattson@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:03 +01:00
Paolo Bonzini
52c8b0c6e1 KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES
commit cbbaa2727aa3ae9e0a844803da7cef7fd3b94f2b upstream.

KVM does not implement MSR_IA32_TSX_CTRL, so it must not be presented
to the guests.  It is also confusing to have !ARCH_CAP_TSX_CTRL_MSR &&
!RTM && ARCH_CAP_TAA_NO: lack of MSR_IA32_TSX_CTRL suggests TSX was not
hidden (it actually was), yet the value says that TSX is not vulnerable
to microarchitectural data sampling.  Fix both.

Cc: stable@vger.kernel.org
Tested-by: Jim Mattson <jmattson@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:02 +01:00
Paolo Bonzini
0616125c46 KVM: x86: do not modify masked bits of shared MSRs
commit de1fca5d6e0105c9d33924e1247e2f386efc3ece upstream.

"Shared MSRs" are guest MSRs that are written to the host MSRs but
keep their value until the next return to userspace.  They support
a mask, so that some bits keep the host value, but this mask is
only used to skip an unnecessary MSR write and the value written
to the MSR is always the guest MSR.

Fix this and, while at it, do not update smsr->values[slot].curr if
for whatever reason the wrmsr fails.  This should only happen due to
reserved bits, so the value written to smsr->values[slot].curr
will not match when the user-return notifier and the host value will
always be restored.  However, it is untidy and in rare cases this
can actually avoid spurious WRMSRs on return to userspace.

Cc: stable@vger.kernel.org
Reviewed-by: Jim Mattson <jmattson@google.com>
Tested-by: Jim Mattson <jmattson@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:01 +01:00
Zenghui Yu
30bd5c4587 KVM: arm/arm64: vgic: Don't rely on the wrong pending table
commit ca185b260951d3b55108c0b95e188682d8a507b7 upstream.

It's possible that two LPIs locate in the same "byte_offset" but target
two different vcpus, where their pending status are indicated by two
different pending tables.  In such a scenario, using last_byte_offset
optimization will lead KVM relying on the wrong pending table entry.
Let us use last_ptr instead, which can be treated as a byte index into
a pending table and also, can be vcpu specific.

Fixes: 280771252c ("KVM: arm64: vgic-v3: KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES")
Cc: stable@vger.kernel.org
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Acked-by: Eric Auger <eric.auger@redhat.com>
Link: https://lore.kernel.org/r/20191029071919.177-4-yuzenghui@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:43:00 +01:00
Sean Christopherson
815403a6ea KVM: nVMX: Always write vmcs02.GUEST_CR3 during nested VM-Enter
commit 04f11ef45810da5ae2542dd78cc353f3761bd2cb upstream.

Write the desired L2 CR3 into vmcs02.GUEST_CR3 during nested VM-Enter
instead of deferring the VMWRITE until vmx_set_cr3().  If the VMWRITE
is deferred, then KVM can consume a stale vmcs02.GUEST_CR3 when it
refreshes vmcs12->guest_cr3 during nested_vmx_vmexit() if the emulated
VM-Exit occurs without actually entering L2, e.g. if the nested run
is squashed because nested VM-Enter (from L1) is putting L2 into HLT.

Note, the above scenario can occur regardless of whether L1 is
intercepting HLT, e.g. L1 can intercept HLT and then re-enter L2 with
vmcs.GUEST_ACTIVITY_STATE=HALTED.  But practically speaking, a VMM will
likely put a guest into HALTED if and only if it's not intercepting HLT.

In an ideal world where EPT *requires* unrestricted guest (and vice
versa), VMX could handle CR3 similar to how it handles RSP and RIP,
e.g. mark CR3 dirty and conditionally load it at vmx_vcpu_run().  But
the unrestricted guest silliness complicates the dirty tracking logic
to the point that explicitly handling vmcs02.GUEST_CR3 during nested
VM-Enter is a simpler overall implementation.

Cc: stable@vger.kernel.org
Reported-and-tested-by: Reto Buerki <reet@codelabs.ch>
Tested-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Liran Alon <liran.alon@oracle.com>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Reviewed-by: Jim Mattson <jmattson@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:42:59 +01:00
Greg Kurz
ff6900f46d KVM: PPC: Book3S HV: XIVE: Set kvm->arch.xive when VPs are allocated
commit e7d71c943040c23f2fd042033d319f56e84f845b upstream.

If we cannot allocate the XIVE VPs in OPAL, the creation of a XIVE or
XICS-on-XIVE device is aborted as expected, but we leave kvm->arch.xive
set forever since the release method isn't called in this case. Any
subsequent tentative to create a XIVE or XICS-on-XIVE for this VM will
thus always fail (DoS). This is a problem for QEMU since it destroys
and re-creates these devices when the VM is reset: the VM would be
restricted to using the much slower emulated XIVE or XICS forever.

As an alternative to adding rollback, do not assign kvm->arch.xive before
making sure the XIVE VPs are allocated in OPAL.

Cc: stable@vger.kernel.org # v5.2
Fixes: 5422e95103 ("KVM: PPC: Book3S HV: XIVE: Replace the 'destroy' method by a 'release' method")
Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:42:59 +01:00
Greg Kurz
88c494172b KVM: PPC: Book3S HV: XIVE: Fix potential page leak on error path
commit 30486e72093ea2e594f44876b7a445c219449bce upstream.

We need to check the host page size is big enough to accomodate the
EQ. Let's do this before taking a reference on the EQ page to avoid
a potential leak if the check fails.

Cc: stable@vger.kernel.org # v5.2
Fixes: 13ce3297c5 ("KVM: PPC: Book3S HV: XIVE: Add controls for the EQ configuration")
Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-12-13 08:42:58 +01:00