b.a.t.m.a.n.lists.open-mesh.org archive mirror
 help / color / mirror / Atom feed
* [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04
@ 2014-08-04 15:47 Antonio Quartulli
  2014-08-04 15:47 ` [B.A.T.M.A.N.] [PATCH] batman-adv: Fix out-of-order fragmentation support Antonio Quartulli
  2014-08-05 23:22 ` [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04 David Miller
  0 siblings, 2 replies; 5+ messages in thread
From: Antonio Quartulli @ 2014-08-04 15:47 UTC (permalink / raw)
  To: davem; +Cc: netdev, b.a.t.m.a.n

Hello David,

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().


Please pull or let me know of any problem.
*If possible, this patch should also be enqueued for stable*

Thanks a lot,
	Antonio



The following changes since commit 4f933f414bf629852f361edf0fc5e765e3e78388:

  r8152: add missing Makefile rule (2014-08-02 20:53:55 -0700)

are available in the git repository at:

  git://git.open-mesh.org/linux-merge.git tags/batman-adv-fix-for-davem

for you to fetch changes up to 9d2155fb59e21f4a38838035d2a26a8a02fec16c:

  batman-adv: Fix out-of-order fragmentation support (2014-08-04 16:05:43 +0200)

----------------------------------------------------------------
Fix out-of-order fragments reception.

----------------------------------------------------------------
Sven Eckelmann (1):
      batman-adv: Fix out-of-order fragmentation support

 net/batman-adv/fragmentation.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [B.A.T.M.A.N.] [PATCH] batman-adv: Fix out-of-order fragmentation support
  2014-08-04 15:47 [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04 Antonio Quartulli
@ 2014-08-04 15:47 ` Antonio Quartulli
  2014-08-04 16:26   ` Sven Eckelmann
  2014-08-05 23:22 ` [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04 David Miller
  1 sibling, 1 reply; 5+ messages in thread
From: Antonio Quartulli @ 2014-08-04 15:47 UTC (permalink / raw)
  To: davem
  Cc: netdev, b.a.t.m.a.n, Antonio Quartulli, Marek Lindner, Sven Eckelmann

From: Sven Eckelmann <sven@narfation.org>

batadv_frag_insert_packet was unable to handle out-of-order packets because it
dropped them directly. This is caused by the way the fragmentation lists is
checked for the correct place to insert a fragmentation entry.

The fragmentation code keeps the fragments in lists. The fragmentation entries
are kept in descending order of sequence number. The list is traversed and each
entry is compared with the new fragment. If the current entry has a smaller
sequence number than the new fragment then the new one has to be inserted
before the current entry. This ensures that the list is still in descending
order.

An out-of-order packet with a smaller sequence number than all entries in the
list still has to be added to the end of the list. The used hlist has no
information about the last entry in the list inside hlist_head and thus the
last entry has to be calculated differently. Currently the code assumes that
the iterator variable of hlist_for_each_entry can be used for this purpose
after the hlist_for_each_entry finished. This is obviously wrong because the
iterator variable is always NULL when the list was completely traversed.

Instead the information about the last entry has to be stored in a different
variable.

This problem was introduced in 9b3eab61754d74a93c9840c296013fe3b4a1b606
("batman-adv: Receive fragmented packets and merge").

Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
---
 net/batman-adv/fragmentation.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
index f14e54a..022d18a 100644
--- a/net/batman-adv/fragmentation.c
+++ b/net/batman-adv/fragmentation.c
@@ -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_list_entry *frag_entry_new = NULL, *frag_entry_curr;
+	struct batadv_frag_list_entry *frag_entry_last = NULL;
 	struct batadv_frag_packet *frag_packet;
 	uint8_t bucket;
 	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,
 			ret = true;
 			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'. */
-	if (likely(frag_entry_curr)) {
-		hlist_add_after(&frag_entry_curr->list, &frag_entry_new->list);
+	/* Reached the end of the list, so insert after 'frag_entry_last'. */
+	if (likely(frag_entry_last)) {
+		hlist_add_after(&frag_entry_last->list, &frag_entry_new->list);
 		chain->size += skb->len - hdr_size;
 		chain->timestamp = jiffies;
 		ret = true;
-- 
1.8.5.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [B.A.T.M.A.N.] [PATCH] batman-adv: Fix out-of-order fragmentation support
  2014-08-04 15:47 ` [B.A.T.M.A.N.] [PATCH] batman-adv: Fix out-of-order fragmentation support Antonio Quartulli
@ 2014-08-04 16:26   ` Sven Eckelmann
  2014-08-05  7:17     ` Antonio Quartulli
  0 siblings, 1 reply; 5+ messages in thread
From: Sven Eckelmann @ 2014-08-04 16:26 UTC (permalink / raw)
  To: Antonio Quartulli; +Cc: netdev, b.a.t.m.a.n, davem, Marek Lindner

On Monday 04 August 2014 17:47:01 Antonio Quartulli wrote:
> This problem was introduced in 9b3eab61754d74a93c9840c296013fe3b4a1b606
> ("batman-adv: Receive fragmented packets and merge").

This is not a commit id from the kernel tree but the one from your out-of-tree 
repository at http://git.open-mesh.org/batman-adv.git . 
610bfc6bc99bc83680d190ebc69359a05fc7f605 seems to be the one of Martin's 
commit when it was applied in the kernel repository.

Kind regards,
	Sven

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [B.A.T.M.A.N.] [PATCH] batman-adv: Fix out-of-order fragmentation support
  2014-08-04 16:26   ` Sven Eckelmann
@ 2014-08-05  7:17     ` Antonio Quartulli
  0 siblings, 0 replies; 5+ messages in thread
From: Antonio Quartulli @ 2014-08-05  7:17 UTC (permalink / raw)
  To: Sven Eckelmann, davem; +Cc: netdev, b.a.t.m.a.n, Marek Lindner

[-- Attachment #1: Type: text/plain, Size: 802 bytes --]

On 04/08/14 18:26, Sven Eckelmann wrote:
> On Monday 04 August 2014 17:47:01 Antonio Quartulli wrote:
>> This problem was introduced in 9b3eab61754d74a93c9840c296013fe3b4a1b606
>> ("batman-adv: Receive fragmented packets and merge").
> 
> This is not a commit id from the kernel tree but the one from your out-of-tree 
> repository at http://git.open-mesh.org/batman-adv.git . 
> 610bfc6bc99bc83680d190ebc69359a05fc7f605 seems to be the one of Martin's 
> commit when it was applied in the kernel repository.

Thanks Sven!


David, I "fixed" the commit message and pushed the tag
"batman-adv-fix-for-davem" again. If you pull now you will get the
correct text.

new head is:
batman-adv-for-davem = d9124268d84a836f14a6ead54ff9d8eee4c43be5)


Cheers,


-- 
Antonio Quartulli


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04
  2014-08-04 15:47 [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04 Antonio Quartulli
  2014-08-04 15:47 ` [B.A.T.M.A.N.] [PATCH] batman-adv: Fix out-of-order fragmentation support Antonio Quartulli
@ 2014-08-05 23:22 ` David Miller
  1 sibling, 0 replies; 5+ messages in thread
From: David Miller @ 2014-08-05 23:22 UTC (permalink / raw)
  To: antonio; +Cc: netdev, b.a.t.m.a.n

From: Antonio Quartulli <antonio@meshcoding.com>
Date: Mon,  4 Aug 2014 17:47:00 +0200

> 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().
> 
> Please pull or let me know of any problem.
> *If possible, this patch should also be enqueued for stable*

As you can see this didn't make it in time for the 3.16 release,
I've pulled and queued this patch up for -stable.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-08-05 23:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-04 15:47 [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04 Antonio Quartulli
2014-08-04 15:47 ` [B.A.T.M.A.N.] [PATCH] batman-adv: Fix out-of-order fragmentation support Antonio Quartulli
2014-08-04 16:26   ` Sven Eckelmann
2014-08-05  7:17     ` Antonio Quartulli
2014-08-05 23:22 ` [B.A.T.M.A.N.] pull request net: batman-adv 2014-08-04 David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).