mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
batman-adv: tt: reject oversized local TVLV buffers
The commit3a359bf5c6("batman-adv: reject oversized global TT response buffers") added a check to ensure that a global return buffer size can be stored in an u16. The same buffer handling also exists for the local data buffer but was not touched. A similar check should be also be in place for the local TVLV buffer. It doesn't have the similar attack surface because it is only generated from locally discovered MAC addresses but the dynamic nature could still cause temporarily to large buffers. Cc: stable@kernel.org Fixes:7ea7b4a142("batman-adv: make the TT CRC logic VLAN specific") Signed-off-by: Sven Eckelmann <sven@narfation.org>
This commit is contained in:
parent
77098e4bea
commit
1e9fab756f
|
|
@ -877,12 +877,12 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
|
|||
{
|
||||
struct batadv_tvlv_tt_vlan_data *tt_vlan;
|
||||
struct batadv_meshif_vlan *vlan;
|
||||
size_t change_offset;
|
||||
u16 num_vlan = 0;
|
||||
u16 vlan_entries = 0;
|
||||
u16 total_entries = 0;
|
||||
u16 tvlv_len;
|
||||
u8 *tt_change_ptr;
|
||||
int change_offset;
|
||||
|
||||
spin_lock_bh(&bat_priv->meshif_vlan_list_lock);
|
||||
hlist_for_each_entry(vlan, &bat_priv->meshif_vlan_list, list) {
|
||||
|
|
@ -900,8 +900,10 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
|
|||
if (*tt_len < 0)
|
||||
*tt_len = batadv_tt_len(total_entries);
|
||||
|
||||
tvlv_len = *tt_len;
|
||||
tvlv_len += change_offset;
|
||||
if (check_add_overflow(*tt_len, change_offset, &tvlv_len)) {
|
||||
tvlv_len = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
*tt_data = kmalloc(tvlv_len, GFP_ATOMIC);
|
||||
if (!*tt_data) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user