Pull networking fixes from Jakub Kicinski: "Including fixes from netfilter and IPsec. Current release - regressions: - do not acquire dev->tx_global_lock in netdev_watchdog_up() - ethtool: keep rtnl_lock for ops using ethtool_op_get_link() - fix deadlock in nested UP notifier events Current release - new code bugs: - eth: - cn20k: fix subbank free list indexing for search order - airoha: fix BQL underflow in shared QDMA TX ring Previous releases - regressions: - netfilter: - flowtable: fix offloaded ct timeout never being extended - nf_conncount: prevent connlimit drops for early confirmed ct Previous releases - always broken: - require CAP_NET_ADMIN in the originating netns when modifying cross-netns devices - report NAPI thread PID in the caller's pid namespace - mac802154: fix dirty frag in in-place crypto for IOT radios - sctp: hold socket lock when dumping endpoints in sctp_diag, avoid an overflow - eth: gve: fix header buffer corruption with header-split and HW-GRO - af_key: initialize alg_key_len for IPComp states, prevent OOB read" * tag 'net-7.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (213 commits) selftests: bonding: add a test for VLAN propagation over a bonded real device vlan: defer real device state propagation to netdev_work net: add the driver-facing netdev_work scheduling API net: turn the rx_mode work into a generic netdev_work facility net: ethtool: keep rtnl_lock for ops using ethtool_op_get_link() rxrpc: Fix rxrpc_rotate_tx_rotate() to check there's something to rotate rxrpc: Fix leak of released call in recvmsg(MSG_PEEK) rxrpc: Fix socket notification race rxrpc: Fix potential infinite loop in rxrpc_recvmsg() rxrpc: Fix oob challenge leak in cleanup after notification failure rxrpc: Fix the reception of a reply packet before data transmission afs: Fix uncancelled rxrpc OOB message handler afs: Fix further netns teardown to cancel the preallocation charger rxrpc: Fix double unlock in rxrpc_recvmsg() rxrpc: Fix leak of connection from OOB challenge rxrpc: Fix ACKALL packet handling net: hns3: differentiate autoneg default values between copper and fiber net: hns3: fix permanent link down deadlock after reset net: hns3: refactor MAC autoneg and speed configuration net: hns3: unify copper port ksettings configuration path ...
Showing the changes to include/linux (3 of 239 files). Show all
Unified · Split
| @@ -942,6 +942,7 @@ struct kernel_ethtool_ts_info { · 941 unmodified lines | ||
| 942 | 942 | #define ETHTOOL_OP_NEEDS_RTNL_GPAUSEPARAM BIT(5) |
| 943 | 943 | #define ETHTOOL_OP_NEEDS_RTNL_SPAUSEPARAM BIT(6) |
| 944 | 944 | #define ETHTOOL_OP_NEEDS_RTNL_RSS BIT(7) |
| 945 | +#define ETHTOOL_OP_NEEDS_RTNL_GLINK BIT(8) | |
| 945 | 946 | |
| 946 | 947 | /** |
| 947 | 948 | * struct ethtool_ops - optional netdev operations |
| @@ -978,6 +979,7 @@ struct kernel_ethtool_ts_info { · 30 unmodified lines | ||
| 978 | 979 | * - phylink helpers (note that phydev is currently unsupported!) |
| 979 | 980 | * - netdev_update_features() |
| 980 | 981 | * - netif_set_real_num_tx_queues() |
| 982 | + * - ethtool_op_get_link() (syncs link watch under rtnl_lock) | |
| 981 | 983 | * |
| 982 | 984 | * @get_drvinfo: Report driver/device information. Modern drivers no |
| 983 | 985 | * longer have to implement this callback. Most fields are |
| @@ -1131,6 +1131,9 @@ struct netdev_net_notifier { · 1130 unmodified lines | ||
| 1131 | 1131 | * netdev_hw_addr_list_for_each(ha, uc). Return 0 on success or a |
| 1132 | 1132 | * negative errno to request a retry via the core backoff. |
| 1133 | 1133 | * |
| 1134 | + * void (*ndo_work)(struct net_device *dev, unsigned long events); | |
| 1135 | + * Run deferred work scheduled with netdev_work_sched(@events). | |
| 1136 | + * | |
| 1134 | 1137 | * int (*ndo_set_mac_address)(struct net_device *dev, void *addr); |
| 1135 | 1138 | * This function is called when the Media Access Control address |
| 1136 | 1139 | * needs to be changed. If this interface is not defined, the |
| @@ -1460,6 +1463,8 @@ struct net_device_ops { · 323 unmodified lines | ||
| 1460 | 1463 | struct net_device *dev, |
| 1461 | 1464 | struct netdev_hw_addr_list *uc, |
| 1462 | 1465 | struct netdev_hw_addr_list *mc); |
| 1466 | + void (*ndo_work)(struct net_device *dev, | |
| 1467 | + unsigned long events); | |
| 1463 | 1468 | int (*ndo_set_mac_address)(struct net_device *dev, |
| 1464 | 1469 | void *addr); |
| 1465 | 1470 | int (*ndo_validate_addr)(struct net_device *dev); |
| @@ -1930,8 +1935,11 @@ enum netdev_reg_state { · 464 unmodified lines | ||
| 1930 | 1935 | * has been enabled due to the need to listen to |
| 1931 | 1936 | * additional unicast addresses in a device that |
| 1932 | 1937 | * does not implement ndo_set_rx_mode() |
| 1933 | − * @rx_mode_node: List entry for rx_mode work processing | |
| 1934 | − * @rx_mode_tracker: Refcount tracker for rx_mode work | |
| 1938 | + * @work_node: List entry for async netdev_work processing | |
| 1939 | + * @work_tracker: Refcount tracker for async netdev_work | |
| 1940 | + * @work_pending: Driver-defined pending netdev_work, passed to | |
| 1941 | + * ndo_work() (see netdev_work_sched()) | |
| 1942 | + * @work_core_pending: Core-defined pending netdev_work (NETDEV_WORK_*) | |
| 1935 | 1943 | * @rx_mode_addr_cache: Recycled snapshot entries for rx_mode work |
| 1936 | 1944 | * @rx_mode_retry_timer: Timer that re-queues rx_mode work after failure |
| 1937 | 1945 | * @rx_mode_retry_count: Number of consecutive retries already scheduled |
| @@ -2326,8 +2334,10 @@ struct net_device { · 388 unmodified lines | ||
| 2326 | 2334 | unsigned int promiscuity; |
| 2327 | 2335 | unsigned int allmulti; |
| 2328 | 2336 | bool uc_promisc; |
| 2329 | − struct list_head rx_mode_node; | |
| 2330 | − netdevice_tracker rx_mode_tracker; | |
| 2337 | + struct list_head work_node; | |
| 2338 | + netdevice_tracker work_tracker; | |
| 2339 | + unsigned long work_pending; | |
| 2340 | + unsigned long work_core_pending; | |
| 2331 | 2341 | struct netdev_hw_addr_list rx_mode_addr_cache; |
| 2332 | 2342 | struct timer_list rx_mode_retry_timer; |
| 2333 | 2343 | unsigned int rx_mode_retry_count; |
| @@ -5176,6 +5186,9 @@ void dev_fetch_sw_netstats(struct rtnl_link_stats64 *s, · 2842 unmodified lines | ||
| 5176 | 5186 | const struct pcpu_sw_netstats __percpu *netstats); |
| 5177 | 5187 | void dev_get_tstats64(struct net_device *dev, struct rtnl_link_stats64 *s); |
| 5178 | 5188 | |
| 5189 | +void netdev_work_sched(struct net_device *dev, unsigned long events); | |
| 5190 | +unsigned long netdev_work_cancel(struct net_device *dev, unsigned long mask); | |
| 5191 | + | |
| 5179 | 5192 | enum { |
| 5180 | 5193 | NESTED_SYNC_IMM_BIT, |
| 5181 | 5194 | NESTED_SYNC_TODO_BIT, |
| @@ -18,7 +18,7 @@ · 17 unmodified lines | ||
| 18 | 18 | * @match: the match extension |
| 19 | 19 | * @target: the target extension |
| 20 | 20 | * @matchinfo: per-match data |
| 21 | − * @targetinfo: per-target data | |
| 21 | + * @targinfo: per-target data | |
| 22 | 22 | * @state: pointer to hook state this packet came from |
| 23 | 23 | * @fragoff: packet is a fragment, this is the data offset |
| 24 | 24 | * @thoff: position of transport header relative to skb->data |
| @@ -77,7 +77,9 @@ static inline u_int8_t xt_family(const struct xt_action_param *par) · 52 unmodified lines | ||
| 77 | 77 | * @match: struct xt_match through which this function was invoked |
| 78 | 78 | * @matchinfo: per-match data |
| 79 | 79 | * @hook_mask: via which hooks the new rule is reachable |
| 80 | − * Other fields as above. | |
| 80 | + * @family: actual NFPROTO_* through which the function is invoked | |
| 81 | + * (helpful when match->family == NFPROTO_UNSPEC) | |
| 82 | + * @nft_compat: running from the nft compat layer if true | |
| 81 | 83 | */ |
| 82 | 84 | struct xt_mtchk_param { |
| 83 | 85 | struct net *net; |
| @@ -91,8 +93,13 @@ struct xt_mtchk_param { · 7 unmodified lines | ||
| 91 | 93 | }; |
| 92 | 94 | |
| 93 | 95 | /** |
| 94 | − * struct xt_mdtor_param - match destructor parameters | |
| 95 | − * Fields as above. | |
| 96 | + * struct xt_mtdtor_param - match destructor parameters | |
| 97 | + * | |
| 98 | + * @net: network namespace through which the check was invoked | |
| 99 | + * @match: struct xt_match through which this function was invoked | |
| 100 | + * @matchinfo: per-match data | |
| 101 | + * @family: actual NFPROTO_* through which the function is invoked | |
| 102 | + * (helpful when match->family == NFPROTO_UNSPEC) | |
| 96 | 103 | */ |
| 97 | 104 | struct xt_mtdtor_param { |
| 98 | 105 | struct net *net; |
| @@ -105,10 +112,16 @@ struct xt_mtdtor_param { · 6 unmodified lines | ||
| 105 | 112 | * struct xt_tgchk_param - parameters for target extensions' |
| 106 | 113 | * checkentry functions |
| 107 | 114 | * |
| 115 | + * @net: network namespace through which the check was invoked | |
| 116 | + * @table: table the rule is tried to be inserted into | |
| 108 | 117 | * @entryinfo: the family-specific rule data |
| 109 | 118 | * (struct ipt_entry, ip6t_entry, arpt_entry, ebt_entry) |
| 110 | − * | |
| 111 | − * Other fields see above. | |
| 119 | + * @target: the target extension | |
| 120 | + * @targinfo: per-target data | |
| 121 | + * @hook_mask: via which hooks the new rule is reachable | |
| 122 | + * @family: actual NFPROTO_* through which the function is invoked | |
| 123 | + * (helpful when match->family == NFPROTO_UNSPEC) | |
| 124 | + * @nft_compat: running from the nft compat layer if true | |
| 112 | 125 | */ |
| 113 | 126 | struct xt_tgchk_param { |
| 114 | 127 | struct net *net; |
| @@ -336,9 +349,9 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size); · 221 unmodified lines | ||
| 336 | 349 | void xt_free_table_info(struct xt_table_info *info); |
| 337 | 350 | |
| 338 | 351 | /** |
| 339 | − * xt_recseq - recursive seqcount for netfilter use | |
| 352 | + * var xt_recseq - recursive seqcount for netfilter use | |
| 340 | 353 | * |
| 341 | − * Packet processing changes the seqcount only if no recursion happened | |
| 354 | + * Packet processing changes the seqcount only if no recursion happened. | |
| 342 | 355 | * get_counters() can use read_seqcount_begin()/read_seqcount_retry(), |
| 343 | 356 | * because we use the normal seqcount convention : |
| 344 | 357 | * Low order bit set to 1 if a writer is active. |