public inbox for b.a.t.m.a.n@lists.open-mesh.org
 help / color / mirror / Atom feed
From: Sven Eckelmann <sven@narfation.org>
To: b.a.t.m.a.n@lists.open-mesh.org
Subject: Re: [B.A.T.M.A.N.] [PATCH-maint] batman-adv: Check total_size when reassembling fragments
Date: Mon, 01 Dec 2014 07:45:36 +0100	[thread overview]
Message-ID: <1932663.nroHeCQuqZ@sven-edge> (raw)
In-Reply-To: <1417383237-15348-1-git-send-email-sven@narfation.org>

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

On Sunday 30 November 2014 22:33:57 Sven Eckelmann wrote:
> The fragmentation code was replaced in
> 9b3eab61754d74a93c9840c296013fe3b4a1b606 ("batman-adv: Receive fragmented
> packets and merge") by an implementation which handles the queueing+merging
> of fragments based on their size and the total_size of the non-fragmented
> packet. This total_size is announced by each fragment. The new
> implementation doesn't check if the the total_size information of the
> packets inside one chain is consistent. This allows an attacker to inject
> packets belonging to the same fragmentation sequence number with varying
> total_size information. The missing validation can cause a crash when the
> fragments are merged because the total_size information is only retrieved
> from the first packet by batadv_frag_merge_packets. But the queueing
> function batadv_frag_insert_packet always uses the total_size from the
> latest packet to check if the fragmented packet was transferred completely
> and is now ready to be merged.
> 
> Assume two packets with the size x and y.
> 
> 1. first packet (fragno 1) is sent with a size x and the total_size x+y' (y'
> < y) 2. second packet (fragno 0) is sent with a size y and the total_size
> x+y
> 
> The fragmentation code would try to merge the two packets because the
> accumulated packets have a combined size of x+y and the second packet was
> sent with total_size of x+y.
> 
> The fragments merging code only took the information from the first packet
> with the total_size x+y' and created a buffer with enough space for x+y'
> bytes. But the second packet cannot be copied inside the prepared free
> space because it is y-y' bytes larger than the remaining space.
> 
> Signed-off-by: Sven Eckelmann <sven@narfation.org>
> Acked-by: Martin Hundebøll <martin@hundeboll.net>
> ---

I think this patch should not be applied to maint because parts of the 
assumptions in the commit message are contradicted by
 https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2014-December/012609.html

Maybe I will prepare a v2 which is for master and not for maint. It will not 
have the "omg, we will all die" scenario in the commit message which no ones 
seems to have checked (and ended up to be wrong). The main purpose of the 
upcoming patches would be to remove the skb parameter in the merge function 
and make sure that the sizes are checked before the queuing is done.

Kind regards,
	Sven

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

      reply	other threads:[~2014-12-01  6:45 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-30 21:33 [B.A.T.M.A.N.] [PATCH-maint] batman-adv: Check total_size when reassembling fragments Sven Eckelmann
2014-12-01  6:45 ` Sven Eckelmann [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1932663.nroHeCQuqZ@sven-edge \
    --to=sven@narfation.org \
    --cc=b.a.t.m.a.n@lists.open-mesh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox