Skip to content

Commit ba13740

Browse files
committed
Merge tag 'kernel-6.12.0-124.4.1.el10_1' into main
JIRA: INTERNAL Upstream Status: RHEL only Conflicts: - omit changes to Makefile.rhelver Signed-off-by: Jan Stancek <jstancek@redhat.com>
2 parents f16e299 + 26351b4 commit ba13740

File tree

10 files changed

+143
-22
lines changed

10 files changed

+143
-22
lines changed

drivers/net/ethernet/intel/ice/ice_adapter.c

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,53 @@
1313
static DEFINE_XARRAY(ice_adapters);
1414
static DEFINE_MUTEX(ice_adapters_mutex);
1515

16-
static unsigned long ice_adapter_index(u64 dsn)
16+
#define ICE_ADAPTER_FIXED_INDEX BIT_ULL(63)
17+
18+
#define ICE_ADAPTER_INDEX_E825C \
19+
(ICE_DEV_ID_E825C_BACKPLANE | ICE_ADAPTER_FIXED_INDEX)
20+
21+
static u64 ice_adapter_index(struct pci_dev *pdev)
1722
{
23+
switch (pdev->device) {
24+
case ICE_DEV_ID_E825C_BACKPLANE:
25+
case ICE_DEV_ID_E825C_QSFP:
26+
case ICE_DEV_ID_E825C_SFP:
27+
case ICE_DEV_ID_E825C_SGMII:
28+
/* E825C devices have multiple NACs which are connected to the
29+
* same clock source, and which must share the same
30+
* ice_adapter structure. We can't use the serial number since
31+
* each NAC has its own NVM generated with its own unique
32+
* Device Serial Number. Instead, rely on the embedded nature
33+
* of the E825C devices, and use a fixed index. This relies on
34+
* the fact that all E825C physical functions in a given
35+
* system are part of the same overall device.
36+
*/
37+
return ICE_ADAPTER_INDEX_E825C;
38+
default:
39+
return pci_get_dsn(pdev) & ~ICE_ADAPTER_FIXED_INDEX;
40+
}
41+
}
42+
43+
static unsigned long ice_adapter_xa_index(struct pci_dev *pdev)
44+
{
45+
u64 index = ice_adapter_index(pdev);
46+
1847
#if BITS_PER_LONG == 64
19-
return dsn;
48+
return index;
2049
#else
21-
return (u32)dsn ^ (u32)(dsn >> 32);
50+
return (u32)index ^ (u32)(index >> 32);
2251
#endif
2352
}
2453

25-
static struct ice_adapter *ice_adapter_new(u64 dsn)
54+
static struct ice_adapter *ice_adapter_new(struct pci_dev *pdev)
2655
{
2756
struct ice_adapter *adapter;
2857

2958
adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
3059
if (!adapter)
3160
return NULL;
3261

33-
adapter->device_serial_number = dsn;
62+
adapter->index = ice_adapter_index(pdev);
3463
spin_lock_init(&adapter->ptp_gltsyn_time_lock);
3564
refcount_set(&adapter->refcount, 1);
3665

@@ -63,24 +92,23 @@ static void ice_adapter_free(struct ice_adapter *adapter)
6392
*/
6493
struct ice_adapter *ice_adapter_get(struct pci_dev *pdev)
6594
{
66-
u64 dsn = pci_get_dsn(pdev);
6795
struct ice_adapter *adapter;
6896
unsigned long index;
6997
int err;
7098

71-
index = ice_adapter_index(dsn);
99+
index = ice_adapter_xa_index(pdev);
72100
scoped_guard(mutex, &ice_adapters_mutex) {
73101
err = xa_insert(&ice_adapters, index, NULL, GFP_KERNEL);
74102
if (err == -EBUSY) {
75103
adapter = xa_load(&ice_adapters, index);
76104
refcount_inc(&adapter->refcount);
77-
WARN_ON_ONCE(adapter->device_serial_number != dsn);
105+
WARN_ON_ONCE(adapter->index != ice_adapter_index(pdev));
78106
return adapter;
79107
}
80108
if (err)
81109
return ERR_PTR(err);
82110

83-
adapter = ice_adapter_new(dsn);
111+
adapter = ice_adapter_new(pdev);
84112
if (!adapter)
85113
return ERR_PTR(-ENOMEM);
86114
xa_store(&ice_adapters, index, adapter, GFP_KERNEL);
@@ -99,11 +127,10 @@ struct ice_adapter *ice_adapter_get(struct pci_dev *pdev)
99127
*/
100128
void ice_adapter_put(struct pci_dev *pdev)
101129
{
102-
u64 dsn = pci_get_dsn(pdev);
103130
struct ice_adapter *adapter;
104131
unsigned long index;
105132

106-
index = ice_adapter_index(dsn);
133+
index = ice_adapter_xa_index(pdev);
107134
scoped_guard(mutex, &ice_adapters_mutex) {
108135
adapter = xa_load(&ice_adapters, index);
109136
if (WARN_ON(!adapter))

drivers/net/ethernet/intel/ice/ice_adapter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct ice_port_list {
3232
* @refcount: Reference count. struct ice_pf objects hold the references.
3333
* @ctrl_pf: Control PF of the adapter
3434
* @ports: Ports list
35-
* @device_serial_number: DSN cached for collision detection on 32bit systems
35+
* @index: 64-bit index cached for collision detection on 32bit systems
3636
*/
3737
struct ice_adapter {
3838
refcount_t refcount;
@@ -41,7 +41,7 @@ struct ice_adapter {
4141

4242
struct ice_pf *ctrl_pf;
4343
struct ice_port_list ports;
44-
u64 device_serial_number;
44+
u64 index;
4545
};
4646

4747
struct ice_adapter *ice_adapter_get(struct pci_dev *pdev);

drivers/net/wireless/ath/ath12k/dp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ int ath12k_dp_peer_setup(struct ath12k *ar, int vdev_id, const u8 *addr)
8484
ret = ath12k_dp_rx_peer_frag_setup(ar, addr, vdev_id);
8585
if (ret) {
8686
ath12k_warn(ab, "failed to setup rx defrag context\n");
87+
tid--;
8788
goto peer_clean;
8889
}
8990

include/linux/skbuff.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3002,6 +3002,29 @@ static inline void skb_reset_transport_header(struct sk_buff *skb)
30023002
skb->transport_header = skb->data - skb->head;
30033003
}
30043004

3005+
/**
3006+
* skb_reset_transport_header_careful - conditionally reset transport header
3007+
* @skb: buffer to alter
3008+
*
3009+
* Hardened version of skb_reset_transport_header().
3010+
*
3011+
* Returns: true if the operation was a success.
3012+
*/
3013+
static inline bool __must_check
3014+
skb_reset_transport_header_careful(struct sk_buff *skb)
3015+
{
3016+
long offset = skb->data - skb->head;
3017+
3018+
if (unlikely(offset != (typeof(skb->transport_header))offset))
3019+
return false;
3020+
3021+
if (unlikely(offset == (typeof(skb->transport_header))~0U))
3022+
return false;
3023+
3024+
skb->transport_header = offset;
3025+
return true;
3026+
}
3027+
30053028
static inline void skb_set_transport_header(struct sk_buff *skb,
30063029
const int offset)
30073030
{

include/net/devlink.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include <linux/xarray.h>
2222
#include <linux/firmware.h>
2323

24+
#include <linux/rh_kabi.h>
25+
2426
struct devlink;
2527
struct devlink_linecard;
2628

@@ -156,6 +158,23 @@ struct devlink_port {
156158
struct devlink_rate *devlink_rate;
157159
struct devlink_linecard *linecard;
158160
u32 rel_index;
161+
162+
RH_KABI_RESERVE(1)
163+
RH_KABI_RESERVE(2)
164+
RH_KABI_RESERVE(3)
165+
RH_KABI_RESERVE(4)
166+
RH_KABI_RESERVE(5)
167+
RH_KABI_RESERVE(6)
168+
RH_KABI_RESERVE(7)
169+
RH_KABI_RESERVE(8)
170+
RH_KABI_RESERVE(9)
171+
RH_KABI_RESERVE(10)
172+
RH_KABI_RESERVE(11)
173+
RH_KABI_RESERVE(12)
174+
RH_KABI_RESERVE(13)
175+
RH_KABI_RESERVE(14)
176+
RH_KABI_RESERVE(15)
177+
RH_KABI_RESERVE(16)
159178
};
160179

161180
struct devlink_port_new_attrs {
@@ -201,6 +220,9 @@ struct devlink_linecard_ops {
201220
void (*types_get)(struct devlink_linecard *linecard,
202221
void *priv, unsigned int index, const char **type,
203222
const void **type_priv);
223+
224+
RH_KABI_RESERVE(1)
225+
RH_KABI_RESERVE(2)
204226
};
205227

206228
struct devlink_sb_pool_info {
@@ -378,6 +400,9 @@ struct devlink_dpipe_table_ops {
378400
struct devlink_dpipe_dump_ctx *dump_ctx);
379401
int (*counters_set_update)(void *priv, bool enable);
380402
u64 (*size_get)(void *priv);
403+
404+
RH_KABI_RESERVE(1)
405+
RH_KABI_RESERVE(2)
381406
};
382407

383408
/**
@@ -495,6 +520,9 @@ struct devlink_param {
495520
int (*validate)(struct devlink *devlink, u32 id,
496521
union devlink_param_value val,
497522
struct netlink_ext_ack *extack);
523+
524+
RH_KABI_RESERVE(1)
525+
RH_KABI_RESERVE(2)
498526
};
499527

500528
struct devlink_param_item {
@@ -697,6 +725,9 @@ struct devlink_region_ops {
697725
struct netlink_ext_ack *extack,
698726
u64 offset, u32 size, u8 *data);
699727
void *priv;
728+
729+
RH_KABI_RESERVE(1)
730+
RH_KABI_RESERVE(2)
700731
};
701732

702733
/**
@@ -725,6 +756,9 @@ struct devlink_port_region_ops {
725756
struct netlink_ext_ack *extack,
726757
u64 offset, u32 size, u8 *data);
727758
void *priv;
759+
760+
RH_KABI_RESERVE(1)
761+
RH_KABI_RESERVE(2)
728762
};
729763

730764
struct devlink_fmsg;
@@ -758,6 +792,9 @@ struct devlink_health_reporter_ops {
758792
struct netlink_ext_ack *extack);
759793
int (*test)(struct devlink_health_reporter *reporter,
760794
struct netlink_ext_ack *extack);
795+
796+
RH_KABI_RESERVE(1)
797+
RH_KABI_RESERVE(2)
761798
};
762799

763800
/**
@@ -1537,6 +1574,15 @@ struct devlink_ops {
15371574
enum devlink_selftest_status
15381575
(*selftest_run)(struct devlink *devlink, unsigned int id,
15391576
struct netlink_ext_ack *extack);
1577+
1578+
RH_KABI_RESERVE(1)
1579+
RH_KABI_RESERVE(2)
1580+
RH_KABI_RESERVE(3)
1581+
RH_KABI_RESERVE(4)
1582+
RH_KABI_RESERVE(5)
1583+
RH_KABI_RESERVE(6)
1584+
RH_KABI_RESERVE(7)
1585+
RH_KABI_RESERVE(8)
15401586
};
15411587

15421588
void *devlink_priv(struct devlink *devlink);
@@ -1696,6 +1742,15 @@ struct devlink_port_ops {
16961742
int (*port_fn_max_io_eqs_set)(struct devlink_port *devlink_port,
16971743
u32 max_eqs,
16981744
struct netlink_ext_ack *extack);
1745+
1746+
RH_KABI_RESERVE(1)
1747+
RH_KABI_RESERVE(2)
1748+
RH_KABI_RESERVE(3)
1749+
RH_KABI_RESERVE(4)
1750+
RH_KABI_RESERVE(5)
1751+
RH_KABI_RESERVE(6)
1752+
RH_KABI_RESERVE(7)
1753+
RH_KABI_RESERVE(8)
16991754
};
17001755

17011756
void devlink_port_init(struct devlink *devlink,

net/ipv4/tcp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
11501150
goto do_error;
11511151

11521152
while (msg_data_left(msg)) {
1153-
ssize_t copy = 0;
1153+
int copy = 0;
11541154

11551155
skb = tcp_write_queue_tail(sk);
11561156
if (skb)

net/ipv6/ip6_offload.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
148148

149149
ops = rcu_dereference(inet6_offloads[proto]);
150150
if (likely(ops && ops->callbacks.gso_segment)) {
151-
skb_reset_transport_header(skb);
151+
if (!skb_reset_transport_header_careful(skb))
152+
goto out;
153+
152154
segs = ops->callbacks.gso_segment(skb, features);
153155
if (!segs)
154156
skb->network_header = skb_mac_header(skb) + nhoff - skb->head;

net/ipv6/mcast.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -807,8 +807,8 @@ static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
807807
} else {
808808
im->mca_crcount = idev->mc_qrv;
809809
}
810-
in6_dev_put(pmc->idev);
811810
ip6_mc_clear_src(pmc);
811+
in6_dev_put(pmc->idev);
812812
kfree_rcu(pmc, rcu);
813813
}
814814
}

net/xfrm/xfrm_interface_core.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],
874874
return -EINVAL;
875875
}
876876

877-
if (p.collect_md) {
877+
if (p.collect_md || xi->p.collect_md) {
878878
NL_SET_ERR_MSG(extack, "collect_md can't be changed");
879879
return -EINVAL;
880880
}
@@ -885,11 +885,6 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],
885885
} else {
886886
if (xi->dev != dev)
887887
return -EEXIST;
888-
if (xi->p.collect_md) {
889-
NL_SET_ERR_MSG(extack,
890-
"device can't be changed to collect_md");
891-
return -EINVAL;
892-
}
893888
}
894889

895890
return xfrmi_update(xi, &p);

redhat/kernel.changelog-10.1

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
* Thu Sep 25 2025 Jan Stancek <jstancek@redhat.com> [6.12.0-124.4.1.el10_1]
2+
- ipv6: reject malicious packets in ipv6_gso_segment() (CKI Backport Bot) [RHEL-113251] {CVE-2025-38572}
3+
- wifi: ath12k: Decrement TID on RX peer frag setup error handling (CKI Backport Bot) [RHEL-114710] {CVE-2025-39761}
4+
- xfrm: interface: fix use-after-free after changing collect_md xfrm interface (CKI Backport Bot) [RHEL-109531] {CVE-2025-38500}
5+
- net: add reserved fields to devlink_port_ops (Ivan Vecera) [RHEL-111907]
6+
- net: add reserved fields to devlink_health_reporter_ops (Ivan Vecera) [RHEL-111907]
7+
- net: add reserved fields to devlink_port_region_ops (Ivan Vecera) [RHEL-111907]
8+
- net: add reserved fields to devlink_region_ops (Ivan Vecera) [RHEL-111907]
9+
- net: add reserved fields to devlink_param (Ivan Vecera) [RHEL-111907]
10+
- net: add reserved fields to devlink_dpipe_table_ops (Ivan Vecera) [RHEL-111907]
11+
- net: add reserved fields to devlink_linecard_ops (Ivan Vecera) [RHEL-111907]
12+
- net: add reserved fields to devlink_ops (Ivan Vecera) [RHEL-111907]
13+
- net: add reserved fields to devlink_port (Ivan Vecera) [RHEL-111907]
14+
- ipv6: mcast: Delay put pmc->idev in mld_del_delrec() (Hangbin Liu) [RHEL-111156] {CVE-2025-38550}
15+
- tcp: Correct signedness in skb remaining space calculation (Florian Westphal) [RHEL-107843] {CVE-2025-38463}
16+
- ice: use fixed adapter index for E825C embedded devices (Michal Schmidt) [RHEL-111791]
17+
Resolves: RHEL-107843, RHEL-109531, RHEL-111156, RHEL-111791, RHEL-111907, RHEL-113251, RHEL-114710
18+
119
* Mon Sep 22 2025 Jan Stancek <jstancek@redhat.com> [6.12.0-124.3.1.el10_1]
220
- net: stmmac: fix TSO DMA API usage causing oops (Izabela Bakollari) [RHEL-84762]
321
- octeon_ep: Fix host hang issue during device reboot (Kamal Heib) [RHEL-90058]

0 commit comments

Comments
 (0)