Commit f2294eb5 authored by David S. Miller's avatar David S. Miller

Merge tag 'batman-adv-fix-for-davem' of git://git.open-mesh.org/linux-merge

Antonio Quartulli says:

====================
pull request net: batman-adv 2014-08-04

this is a pull request intended for net.

It just contains a patch by Sven Eckelmann that fixes the
reception of out-of-order fragments. As explained in the
commit message, the issue was due to a wrong assumption
about hlist_for_each_entry() in batadv_frag_insert_packet().
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 4f933f41 d9124268
...@@ -128,6 +128,7 @@ static bool batadv_frag_insert_packet(struct batadv_orig_node *orig_node, ...@@ -128,6 +128,7 @@ static bool batadv_frag_insert_packet(struct batadv_orig_node *orig_node,
{ {
struct batadv_frag_table_entry *chain; struct batadv_frag_table_entry *chain;
struct batadv_frag_list_entry *frag_entry_new = NULL, *frag_entry_curr; struct batadv_frag_list_entry *frag_entry_new = NULL, *frag_entry_curr;
struct batadv_frag_list_entry *frag_entry_last = NULL;
struct batadv_frag_packet *frag_packet; struct batadv_frag_packet *frag_packet;
uint8_t bucket; uint8_t bucket;
uint16_t seqno, hdr_size = sizeof(struct batadv_frag_packet); uint16_t seqno, hdr_size = sizeof(struct batadv_frag_packet);
...@@ -180,11 +181,14 @@ static bool batadv_frag_insert_packet(struct batadv_orig_node *orig_node, ...@@ -180,11 +181,14 @@ static bool batadv_frag_insert_packet(struct batadv_orig_node *orig_node,
ret = true; ret = true;
goto out; goto out;
} }
/* store current entry because it could be the last in list */
frag_entry_last = frag_entry_curr;
} }
/* Reached the end of the list, so insert after 'frag_entry_curr'. */ /* Reached the end of the list, so insert after 'frag_entry_last'. */
if (likely(frag_entry_curr)) { if (likely(frag_entry_last)) {
hlist_add_after(&frag_entry_curr->list, &frag_entry_new->list); hlist_add_after(&frag_entry_last->list, &frag_entry_new->list);
chain->size += skb->len - hdr_size; chain->size += skb->len - hdr_size;
chain->timestamp = jiffies; chain->timestamp = jiffies;
ret = true; ret = true;
......
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