[1/2] batman-adv: check return type of unicast packet preparations
Commit Message
batadv_send_skb_prepare_unicast(_4addr) might reallocate the skb's data.
And if it tries to do so then this can potentially fail.
We shouldn't continue working on this skb in such a case.
Signed-off-by: Linus Lüssing <linus.luessing@web.de>
---
send.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
Comments
Hi Linus,
since these are two fixes, are those based on top of next? That is
where they should be applied.
Cheers,
Il 26.07.2013 20:50 Linus Lüssing ha scritto:
> batadv_send_skb_prepare_unicast(_4addr) might reallocate the skb's
> data.
> And if it tries to do so then this can potentially fail.
>
> We shouldn't continue working on this skb in such a case.
>
> Signed-off-by: Linus Lüssing <linus.luessing@web.de>
> ---
> send.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/send.c b/send.c
> index d2cc507..9c9cab6 100644
> --- a/send.c
> +++ b/send.c
> @@ -266,11 +266,14 @@ static int batadv_send_skb_unicast(struct
> batadv_priv *bat_priv,
>
> switch (packet_type) {
> case BATADV_UNICAST:
> - batadv_send_skb_prepare_unicast(skb, orig_node);
> + if (!batadv_send_skb_prepare_unicast(skb, orig_node))
> + goto out;
> break;
> case BATADV_UNICAST_4ADDR:
> - batadv_send_skb_prepare_unicast_4addr(bat_priv, skb, orig_node,
> - packet_subtype);
> + if (!batadv_send_skb_prepare_unicast_4addr(bat_priv, skb,
> + orig_node,
> + packet_subtype))
> + goto out;
> break;
> default:
> /* this function supports UNICAST and UNICAST_4ADDR only. It
@@ -266,11 +266,14 @@ static int batadv_send_skb_unicast(struct batadv_priv *bat_priv,
switch (packet_type) {
case BATADV_UNICAST:
- batadv_send_skb_prepare_unicast(skb, orig_node);
+ if (!batadv_send_skb_prepare_unicast(skb, orig_node))
+ goto out;
break;
case BATADV_UNICAST_4ADDR:
- batadv_send_skb_prepare_unicast_4addr(bat_priv, skb, orig_node,
- packet_subtype);
+ if (!batadv_send_skb_prepare_unicast_4addr(bat_priv, skb,
+ orig_node,
+ packet_subtype))
+ goto out;
break;
default:
/* this function supports UNICAST and UNICAST_4ADDR only. It