[next,1/2] batman-adv: check return type of unicast packet preparations

Message ID 1374888285-20775-1-git-send-email-linus.luessing@web.de (mailing list archive)
State Accepted, archived
Commit d781a70df220815765328b35173d078b8226405e
Headers

Commit Message

Linus Lüssing July 27, 2013, 1:24 a.m. UTC
  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>
---
 unicast.c |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
  

Comments

Antonio Quartulli July 28, 2013, 8:14 p.m. UTC | #1
Il 27.07.2013 03:24 Linus Lüssing ha scritto:
> batadv_send_skb_prepare_unicast(_4addr) might reallocate the skb's 
> data.

In next these functions are named a bit differently. I think this can be 
fixed while merging the patch.

> 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>

Acked-by: Antonio Quartulli <ordex@autistici.org>
  
Marek Lindner Aug. 2, 2013, 4:02 a.m. UTC | #2
On Monday, July 29, 2013 04:14:23 Antonio Quartulli wrote:
> Il 27.07.2013 03:24 Linus Lüssing ha scritto:
> > batadv_send_skb_prepare_unicast(_4addr) might reallocate the skb's
> > data.
> 
> In next these functions are named a bit differently. I think this can be
> fixed while merging the patch.
> 
> > 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>
> 
> Acked-by: Antonio Quartulli <ordex@autistici.org>

Applied in revision d781a70.

Thanks,
Marek
  

Patch

diff --git a/unicast.c b/unicast.c
index dc8b5d4..4c5a1aa 100644
--- a/unicast.c
+++ b/unicast.c
@@ -428,11 +428,13 @@  find_router:
 
 	switch (packet_type) {
 	case BATADV_UNICAST:
-		batadv_unicast_prepare_skb(skb, orig_node);
+		if (!batadv_unicast_prepare_skb(skb, orig_node))
+			goto out;
 		break;
 	case BATADV_UNICAST_4ADDR:
-		batadv_unicast_4addr_prepare_skb(bat_priv, skb, orig_node,
-						 packet_subtype);
+		if (!batadv_unicast_4addr_prepare_skb(bat_priv, skb, orig_node,
+						      packet_subtype))
+			goto out;
 		break;
 	default:
 		/* this function supports UNICAST and UNICAST_4ADDR only. It