mirror of
https://github.com/S3NEO/android_kernel_samsung_msm8226.git
synced 2024-11-07 03:47:13 +00:00
ath6kl: add some bounds checking
commit 5d6751eaff672ea77642e74e92e6c0ac7f9709ab upstream.
The "ev->traffic_class" and "reply->ac" variables come from the network
and they're used as an offset into the wmi->stream_exist_for_ac[] array.
Those variables are u8 so they can be 0-255 but the stream_exist_for_ac[]
array only has WMM_NUM_AC (4) elements. We need to add a couple bounds
checks to prevent array overflows.
I also modified one existing check from "if (traffic_class > 3) {" to
"if (traffic_class >= WMM_NUM_AC) {" just to make them all consistent.
Fixes: bdcd817079
(" Add ath6kl cleaned up driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
CVE-2019-15926
Signed-off-by: Kevin F. Haggerty <haggertk@lineageos.org>
Change-Id: I0bcdbfb3acdbabfe4bc232431a91405155f34771
This commit is contained in:
parent
ba1fa1611b
commit
d5b896def0
1 changed files with 9 additions and 1 deletions
|
@ -1111,6 +1111,10 @@ static int ath6kl_wmi_pstream_timeout_event_rx(struct wmi *wmi, u8 *datap,
|
|||
return -EINVAL;
|
||||
|
||||
ev = (struct wmi_pstream_timeout_event *) datap;
|
||||
if (ev->traffic_class >= WMM_NUM_AC) {
|
||||
ath6kl_err("invalid traffic class: %d\n", ev->traffic_class);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* When the pstream (fat pipe == AC) timesout, it means there were
|
||||
|
@ -1448,6 +1452,10 @@ static int ath6kl_wmi_cac_event_rx(struct wmi *wmi, u8 *datap, int len,
|
|||
return -EINVAL;
|
||||
|
||||
reply = (struct wmi_cac_event *) datap;
|
||||
if (reply->ac >= WMM_NUM_AC) {
|
||||
ath6kl_err("invalid AC: %d\n", reply->ac);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((reply->cac_indication == CAC_INDICATION_ADMISSION_RESP) &&
|
||||
(reply->status_code != IEEE80211_TSPEC_STATUS_ADMISS_ACCEPTED)) {
|
||||
|
@ -2459,7 +2467,7 @@ int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
|
|||
u16 active_tsids = 0;
|
||||
int ret;
|
||||
|
||||
if (traffic_class > 3) {
|
||||
if (traffic_class >= WMM_NUM_AC) {
|
||||
ath6kl_err("invalid traffic class: %d\n", traffic_class);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue