Commit f41dbb3e authored by Wen Huang's avatar Wen Huang Committed by Kleber Sacilotto de Souza

UBUNTU: SAUCE: libertas: Fix two buffer overflows at parsing bss descriptor

add_ie_rates() copys rates without checking the length
in bss descriptor from remote AP.when victim connects to
remote attacker, this may trigger buffer overflow.
lbs_ibss_join_existing() copys rates without checking the length
in bss descriptor from remote IBSS node.when victim connects to
remote attacker, this may trigger buffer overflow.
Fix them by putting the length check before performing copy.

This fix addresses CVE-2019-14896 and CVE-2019-14897.
Signed-off-by: default avatarWen Huang <huangwenabc@gmail.com>

CVE-2019-14896
CVE-2019-14897

(backported from https://patchwork.kernel.org/patch/11257187/)
[smb: drop marvell subdirectory from path]
Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
Acked-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
Acked-by: default avatarAndrea Righi <andrea.righi@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent 0cf62b77
...@@ -272,6 +272,10 @@ add_ie_rates(u8 *tlv, const u8 *ie, int *nrates) ...@@ -272,6 +272,10 @@ add_ie_rates(u8 *tlv, const u8 *ie, int *nrates)
int hw, ap, ap_max = ie[1]; int hw, ap, ap_max = ie[1];
u8 hw_rate; u8 hw_rate;
if (ap_max > MAX_RATES) {
lbs_deb_assoc("invalid rates\n");
return tlv;
}
/* Advance past IE header */ /* Advance past IE header */
ie += 2; ie += 2;
...@@ -1845,6 +1849,10 @@ static int lbs_ibss_join_existing(struct lbs_private *priv, ...@@ -1845,6 +1849,10 @@ static int lbs_ibss_join_existing(struct lbs_private *priv,
} else { } else {
int hw, i; int hw, i;
u8 rates_max = rates_eid[1]; u8 rates_max = rates_eid[1];
if (rates_max > MAX_RATES) {
lbs_deb_join("invalid rates");
goto out;
}
u8 *rates = cmd.bss.rates; u8 *rates = cmd.bss.rates;
for (hw = 0; hw < ARRAY_SIZE(lbs_rates); hw++) { for (hw = 0; hw < ARRAY_SIZE(lbs_rates); hw++) {
u8 hw_rate = lbs_rates[hw].bitrate / 5; u8 hw_rate = lbs_rates[hw].bitrate / 5;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment