From: Karthikeyan Periyasamy <quic_periyasa(a)quicinc.com>
stable inclusion
from stable-v6.6.55
commit d0e4274d9dc9f8409d56d622cd3ecf7b6fd49e2f
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAYR8S
CVE: CVE-2024-49931
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?…
--------------------------------
[ Upstream commit e106b7ad13c1d246adaa57df73edb8f8b8acb240 ]
Currently, the ath12k_soc_dp_stats::hal_reo_error array is defined with a
maximum size of DP_REO_DST_RING_MAX. However, the ath12k_dp_rx_process()
function access ath12k_soc_dp_stats::hal_reo_error using the REO
destination SRNG ring ID, which is incorrect. SRNG ring ID differ from
normal ring ID, and this usage leads to out-of-bounds array access. To
fix this issue, modify ath12k_dp_rx_process() to use the normal ring ID
directly instead of the SRNG ring ID to avoid out-of-bounds array access.
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Signed-off-by: Karthikeyan Periyasamy <quic_periyasa(a)quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo(a)quicinc.com>
Link: https://patch.msgid.link/20240704070811.4186543-2-quic_periyasa@quicinc.com
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Chen Zhongjin <chenzhongjin(a)huawei.com>
---
drivers/net/wireless/ath/ath12k/dp_rx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index d9bc07844fb7..70ad035acac7 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -2670,7 +2670,7 @@ int ath12k_dp_rx_process(struct ath12k_base *ab, int ring_id,
if (push_reason !=
HAL_REO_DEST_RING_PUSH_REASON_ROUTING_INSTRUCTION) {
dev_kfree_skb_any(msdu);
- ab->soc_stats.hal_reo_error[dp->reo_dst_ring[ring_id].ring_id]++;
+ ab->soc_stats.hal_reo_error[ring_id]++;
continue;
}
--
2.25.1
From: Roi Martin <jroi.martin(a)gmail.com>
stable inclusion
from stable-v6.6.58
commit e11ce03b58743bf1e096c48fcaa7e6f08eb75dfa
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IB0EMU
CVE: CVE-2024-50088
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
commit 66691c6e2f18d2aa4b22ffb624b9bdc97e9979e4 upstream.
The add_inode_ref() function does not initialize the "name" struct when
it is declared. If any of the following calls to "read_one_inode()
returns NULL,
dir = read_one_inode(root, parent_objectid);
if (!dir) {
ret = -ENOENT;
goto out;
}
inode = read_one_inode(root, inode_objectid);
if (!inode) {
ret = -EIO;
goto out;
}
then "name.name" would be freed on "out" before being initialized.
out:
...
kfree(name.name);
This issue was reported by Coverity with CID 1526744.
Fixes: e43eec81c516 ("btrfs: use struct qstr instead of name and namelen pairs")
CC: stable(a)vger.kernel.org # 6.6+
Reviewed-by: Filipe Manana <fdmanana(a)suse.com>
Signed-off-by: Roi Martin <jroi.martin(a)gmail.com>
Reviewed-by: David Sterba <dsterba(a)suse.com>
Signed-off-by: David Sterba <dsterba(a)suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Signed-off-by: Yifan Qiao <qiaoyifan4(a)huawei.com>
---
fs/btrfs/tree-log.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index e0037665aa92..9ca55ad589e5 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -1374,7 +1374,7 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans,
struct inode *inode = NULL;
unsigned long ref_ptr;
unsigned long ref_end;
- struct fscrypt_str name;
+ struct fscrypt_str name = { 0 };
int ret;
int log_ref_ver = 0;
u64 parent_objectid;
--
2.39.2
From: "Rafael J. Wysocki" <rafael.j.wysocki(a)intel.com>
mainline inclusion
from mainline-v6.12-rc3
commit a42a5839f400e929c489bb1b58f54596c4535167
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAYRF5
CVE: CVE-2024-50028
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
There are places in the thermal netlink code where nothing prevents
the thermal zone object from going away while being accessed after it
has been returned by thermal_zone_get_by_id().
To address this, make thermal_zone_get_by_id() get a reference on the
thermal zone device object to be returned with the help of get_device(),
under thermal_list_lock, and adjust all of its callers to this change
with the help of the cleanup.h infrastructure.
Fixes: 1ce50e7d408e ("thermal: core: genetlink support for events/cmd/sampling")
Cc: 6.8+ <stable(a)vger.kernel.org> # 6.8+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki(a)intel.com>
Reviewed-by: Lukasz Luba <lukasz.luba(a)arm.com>
Link: https://patch.msgid.link/6112242.lOV4Wx5bFT@rjwysocki.net
Conflicts:
drivers/thermal/thermal_netlink.c
[wangxiongfeng: fix conflict because __cleanup() based infrastructure
DEFINE_CLASS() is not introduced.]
Signed-off-by: Xiongfeng Wang <wangxiongfeng2(a)huawei.com>
---
drivers/thermal/thermal_core.c | 1 +
drivers/thermal/thermal_netlink.c | 24 ++++++++++++++++++------
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index dd449945e1e5e..ae7feac0892e2 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -760,6 +760,7 @@ struct thermal_zone_device *thermal_zone_get_by_id(int id)
mutex_lock(&thermal_list_lock);
list_for_each_entry(tz, &thermal_tz_list, node) {
if (tz->id == id) {
+ get_device(&tz->device);
match = tz;
break;
}
diff --git a/drivers/thermal/thermal_netlink.c b/drivers/thermal/thermal_netlink.c
index dc535831b6609..5a9a6d1ddd03d 100644
--- a/drivers/thermal/thermal_netlink.c
+++ b/drivers/thermal/thermal_netlink.c
@@ -463,8 +463,10 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)
return -EINVAL;
start_trip = nla_nest_start(msg, THERMAL_GENL_ATTR_TZ_TRIP);
- if (!start_trip)
+ if (!start_trip) {
+ put_device(&tz->device);
return -EMSGSIZE;
+ }
mutex_lock(&tz->lock);
@@ -489,10 +491,13 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)
nla_nest_end(msg, start_trip);
+ put_device(&tz->device);
+
return 0;
out_cancel_nest:
mutex_unlock(&tz->lock);
+ put_device(&tz->device);
return -EMSGSIZE;
}
@@ -514,13 +519,17 @@ static int thermal_genl_cmd_tz_get_temp(struct param *p)
ret = thermal_zone_get_temp(tz, &temp);
if (ret)
- return ret;
+ goto out;
if (nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_ID, id) ||
- nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TEMP, temp))
- return -EMSGSIZE;
+ nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TEMP, temp)) {
+ ret = -EMSGSIZE;
+ goto out;
+ }
- return 0;
+out:
+ put_device(&tz->device);
+ return ret;
}
static int thermal_genl_cmd_tz_get_gov(struct param *p)
@@ -542,10 +551,13 @@ static int thermal_genl_cmd_tz_get_gov(struct param *p)
if (nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_ID, id) ||
nla_put_string(msg, THERMAL_GENL_ATTR_TZ_GOV_NAME,
- tz->governor->name))
+ tz->governor->name)) {
+ put_device(&tz->device);
ret = -EMSGSIZE;
+ }
mutex_unlock(&tz->lock);
+ put_device(&tz->device);
return ret;
}
--
2.20.1
From: "Rafael J. Wysocki" <rafael.j.wysocki(a)intel.com>
mainline inclusion
from mainline-v6.12-rc3
commit a42a5839f400e929c489bb1b58f54596c4535167
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAYRF5
CVE: CVE-2024-50028
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
There are places in the thermal netlink code where nothing prevents
the thermal zone object from going away while being accessed after it
has been returned by thermal_zone_get_by_id().
To address this, make thermal_zone_get_by_id() get a reference on the
thermal zone device object to be returned with the help of get_device(),
under thermal_list_lock, and adjust all of its callers to this change
with the help of the cleanup.h infrastructure.
Fixes: 1ce50e7d408e ("thermal: core: genetlink support for events/cmd/sampling")
Cc: 6.8+ <stable(a)vger.kernel.org> # 6.8+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki(a)intel.com>
Reviewed-by: Lukasz Luba <lukasz.luba(a)arm.com>
Link: https://patch.msgid.link/6112242.lOV4Wx5bFT@rjwysocki.net
Conflicts:
drivers/thermal/thermal_netlink.c
[wangxiongfeng: fix conflict because __cleanup() based infrastructure
DEFINE_CLASS() is not introduced.]
Signed-off-by: Xiongfeng Wang <wangxiongfeng2(a)huawei.com>
---
drivers/thermal/thermal_core.c | 1 +
drivers/thermal/thermal_netlink.c | 24 ++++++++++++++++++------
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 1cf49912dc96c..49e3cb07ae9e8 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -760,6 +760,7 @@ struct thermal_zone_device *thermal_zone_get_by_id(int id)
mutex_lock(&thermal_list_lock);
list_for_each_entry(tz, &thermal_tz_list, node) {
if (tz->id == id) {
+ get_device(&tz->device);
match = tz;
break;
}
diff --git a/drivers/thermal/thermal_netlink.c b/drivers/thermal/thermal_netlink.c
index dc535831b6609..5a9a6d1ddd03d 100644
--- a/drivers/thermal/thermal_netlink.c
+++ b/drivers/thermal/thermal_netlink.c
@@ -463,8 +463,10 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)
return -EINVAL;
start_trip = nla_nest_start(msg, THERMAL_GENL_ATTR_TZ_TRIP);
- if (!start_trip)
+ if (!start_trip) {
+ put_device(&tz->device);
return -EMSGSIZE;
+ }
mutex_lock(&tz->lock);
@@ -489,10 +491,13 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)
nla_nest_end(msg, start_trip);
+ put_device(&tz->device);
+
return 0;
out_cancel_nest:
mutex_unlock(&tz->lock);
+ put_device(&tz->device);
return -EMSGSIZE;
}
@@ -514,13 +519,17 @@ static int thermal_genl_cmd_tz_get_temp(struct param *p)
ret = thermal_zone_get_temp(tz, &temp);
if (ret)
- return ret;
+ goto out;
if (nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_ID, id) ||
- nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TEMP, temp))
- return -EMSGSIZE;
+ nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TEMP, temp)) {
+ ret = -EMSGSIZE;
+ goto out;
+ }
- return 0;
+out:
+ put_device(&tz->device);
+ return ret;
}
static int thermal_genl_cmd_tz_get_gov(struct param *p)
@@ -542,10 +551,13 @@ static int thermal_genl_cmd_tz_get_gov(struct param *p)
if (nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_ID, id) ||
nla_put_string(msg, THERMAL_GENL_ATTR_TZ_GOV_NAME,
- tz->governor->name))
+ tz->governor->name)) {
+ put_device(&tz->device);
ret = -EMSGSIZE;
+ }
mutex_unlock(&tz->lock);
+ put_device(&tz->device);
return ret;
}
--
2.20.1