Skip to content

Commit

Permalink
batman-adv: check for tt_reponse packet real length
Browse files Browse the repository at this point in the history
Before accessing the TT_RESPONSE packet payload, the node has to ensure that the
packet is long enough as it would expect to be.

Reported-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
  • Loading branch information
Antonio Quartulli authored and Sven Eckelmann committed Nov 20, 2011
1 parent dc58fe3 commit 8b7342d
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions net/batman-adv/routing.c
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,7 @@ int recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
{
struct bat_priv *bat_priv = netdev_priv(recv_if->soft_iface);
struct tt_query_packet *tt_query;
uint16_t tt_len;
struct ethhdr *ethhdr;

/* drop packet if it has not necessary minimum size */
Expand Down Expand Up @@ -622,6 +623,14 @@ int recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
if (skb_linearize(skb) < 0)
goto out;

tt_len = tt_query->tt_data * sizeof(struct tt_change);

/* Ensure we have all the claimed data */
if (unlikely(skb_headlen(skb) <
sizeof(struct tt_query_packet) +
tt_len))
goto out;

handle_tt_response(bat_priv, tt_query);
} else {
bat_dbg(DBG_TT, bat_priv,
Expand Down

0 comments on commit 8b7342d

Please sign in to comment.