From: Michael Richardson <mcr@sandelman.ca>
To: Stefan Schmidt <stefan@datenfreihafen.org>
Cc: Rafael Vuijk <r.vuijk@sownet.nl>,
Alexander Aring <alex.aring@gmail.com>,
Jukka Rissanen <jukka.rissanen@linux.intel.com>,
linux-wpan@vger.kernel.org, linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH 1/2 v2] ieee802154: assembly of 6LoWPAN fragments improvement
Date: Tue, 24 Jul 2018 11:20:41 -0400 [thread overview]
Message-ID: <8714.1532445641@localhost> (raw)
In-Reply-To: <78e7773b-c2b8-5070-d940-df0d8e35ae32@datenfreihafen.org>
[-- Attachment #1: Type: text/plain, Size: 3369 bytes --]
Stefan Schmidt <stefan@datenfreihafen.org> wrote:
> "We have tested the 6LoWPAN modules in the Linux kernel and came to some
> issue regarding fragmentation. We have seen aborted SCP transfers
> ("message authentication code incorrect") and tested TCP transfers as
> well and saw corruption on fragment-sized intervals. The current
> fragment assembling functions do not check enough for corrupted L2
> packets that might slip through L2 CRC check. (in our case IEEE802.15.4
> which has only 16-bit CRC).
> As a result, overlapping fragments due to offset corruption are not
> detected and assembled incorrectly. Part of packets may have old data.
> At TCP-level, there is only a simple TCP-checksum which is not enough in
> this case as the corruption occurs frequently (once every few minutes).
This is a common problem with checksums, fragments and "high" bandwidths.
It can occur with some frequency, and has been a reason for much of the PMTU
work (including PLMTUD) to get rid of IP-level fragmentation.
A solution is better checksums: or rather integrity hashes.
I'm curious if the problem would have been if the 802.15.4 network was
encrypted, and thus had an cryptographic integrity check.
> After quickly analysing the code we saw some potential issues and
> created a patch that adds additional overlap checks and simplifies some
> conditional statements. After running tests again, TCP corruption was
> not seen again. The test was performed with SCP and keeps transferring
> large files now without error."
> It would be great if some of this finds it way into the commit log of
> these two patches. At a minimum I would require them to not have the
> same commit summary line.
Agreed.
>> Signed-off-by: Rafael Vuijk <r.vuijk@sownet.nl>
>> --- ./net/ieee802154/6lowpan/reassembly.c 2018-02-20 11:10:06.000000000 +0100
>> +++ ./net/ieee802154/6lowpan/reassembly.c 2018-02-21 09:13:29.000000000 +0100
>> @@ -140,23 +140,14 @@ static int lowpan_frag_queue(struct lowp
>> offset = lowpan_802154_cb(skb)->d_offset << 3;
>> end = lowpan_802154_cb(skb)->d_size;
>>
>> + if (fq->q.len == 0)
>> + fq->q.len = end;
>> + if (fq->q.len != end)
>> + goto err;
>> +
>> /* Is this the final fragment? */
>> if (offset + skb->len == end) {
>> - /* If we already have some bits beyond end
>> - * or have different end, the segment is corrupted.
>> - */
>> - if (end < fq->q.len ||
>> - ((fq->q.flags & INET_FRAG_LAST_IN) && end != fq->q.len))
>> - goto err;
fq-> q.flags |= INET_FRAG_LAST_IN;
>> - fq->q.len = end;
>> - } else {
>> - if (end > fq->q.len) {
>> - /* Some bits beyond end -> corruption. */
>> - if (fq->q.flags & INET_FRAG_LAST_IN)
>> - goto err;
>> - fq->q.len = end;
>> - }
> Some basic testing on my side has not revealed any issues on this. I
> will give it some longer testing with SCP now.
> regards
> Stefan Schmidt
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wpan" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 464 bytes --]
prev parent reply other threads:[~2018-07-24 15:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-17 15:25 [PATCH 1/2 v2] ieee802154: assembly of 6LoWPAN fragments improvement Rafael Vuijk
2018-07-24 13:00 ` Stefan Schmidt
2018-07-24 15:20 ` Michael Richardson [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=8714.1532445641@localhost \
--to=mcr@sandelman.ca \
--cc=alex.aring@gmail.com \
--cc=jukka.rissanen@linux.intel.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-wpan@vger.kernel.org \
--cc=r.vuijk@sownet.nl \
--cc=stefan@datenfreihafen.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;
as well as URLs for NNTP newsgroup(s).