Searched hist:"610 bfc6bc99bc83680d190ebc69359a05fc7f605" (Results 1 – 10 of 10) sorted by relevance
/openbmc/linux/net/batman-adv/ |
H A D | fragmentation.c | diff 53e771457e823fbc21834f60508c42a4270534fd Mon Dec 01 03:37:27 CST 2014 Sven Eckelmann <sven@narfation.org> batman-adv: Check total_size when queueing fragments
The fragmentation code was replaced in 610bfc6bc99bc83680d190ebc69359a05fc7f605 ("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 is consistency check is recommended to allow using any of the packets in the queue to decide whether all fragments of a packet are received or not.
Signed-off-by: Sven Eckelmann <sven@narfation.org> Acked-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> diff 0402e444cd199389b7fe47be68a67b817e09e097 Sat Dec 20 06:48:56 CST 2014 Sven Eckelmann <sven@narfation.org> batman-adv: Unify fragment size calculation
The fragmentation code was replaced in 610bfc6bc99bc83680d190ebc69359a05fc7f605 ("batman-adv: Receive fragmented packets and merge") by an implementation which can handle up to 16 fragments of a packet. The packet is prepared for the split in fragments by the function batadv_frag_send_packet and the actual split is done by batadv_frag_create.
Both functions calculate the size of a fragment themself. But their calculation differs because batadv_frag_send_packet also subtracts ETH_HLEN. Therefore, the check in batadv_frag_send_packet "can a full fragment can be created?" may return true even when batadv_frag_create cannot create a full fragment.
The function batadv_frag_create doesn't check the size of the skb before splitting it and therefore might try to create a larger fragment than the remaining buffer. This creates an integer underflow and an invalid len is given to skb_split.
Signed-off-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: David S. Miller <davem@davemloft.net> diff 5b6698b0e4a37053de35cc24ee695b98a7eb712b Sat Dec 20 06:48:55 CST 2014 Sven Eckelmann <sven@narfation.org> batman-adv: Calculate extra tail size based on queued fragments
The fragmentation code was replaced in 610bfc6bc99bc83680d190ebc69359a05fc7f605 ("batman-adv: Receive fragmented packets and merge"). The new code provided a mostly unused parameter skb for the merging function. It is used inside the function to calculate the additionally needed skb tailroom. But instead of increasing its own tailroom, it is only increasing the tailroom of the first queued skb. This is not correct in some situations because the first queued entry can be a different one than the parameter.
An observed problem was:
1. packet with size 104, total_size 1464, fragno 1 was received - packet is queued 2. packet with size 1400, total_size 1464, fragno 0 was received - packet is queued at the end of the list 3. enough data was received and can be given to the merge function (1464 == (1400 - 20) + (104 - 20)) - merge functions gets 1400 byte large packet as skb argument 4. merge function gets first entry in queue (104 byte) - stored as skb_out 5. merge function calculates the required extra tail as total_size - skb->len - pskb_expand_head tail of skb_out with 64 bytes 6. merge function tries to squeeze the extra 1380 bytes from the second queued skb (1400 byte aka skb parameter) in the 64 extra tail bytes of skb_out
Instead calculate the extra required tail bytes for skb_out also using skb_out instead of using the parameter skb. The skb parameter is only used to get the total_size from the last received packet. This is also the total_size used to decide that all fragments were received.
Reported-by: Philipp Psurek <philipp.psurek@gmail.com> Signed-off-by: Sven Eckelmann <sven@narfation.org> Acked-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: David S. Miller <davem@davemloft.net> diff d9124268d84a836f14a6ead54ff9d8eee4c43be5 Mon May 26 10:21:39 CDT 2014 Sven Eckelmann <sven@narfation.org> batman-adv: Fix out-of-order fragmentation support
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 610bfc6bc99bc83680d190ebc69359a05fc7f605 ("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> 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | fragmentation.h | 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | Makefile | diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | routing.h | diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | types.h | diff 53e771457e823fbc21834f60508c42a4270534fd Mon Dec 01 03:37:27 CST 2014 Sven Eckelmann <sven@narfation.org> batman-adv: Check total_size when queueing fragments
The fragmentation code was replaced in 610bfc6bc99bc83680d190ebc69359a05fc7f605 ("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 is consistency check is recommended to allow using any of the packets in the queue to decide whether all fragments of a packet are received or not.
Signed-off-by: Sven Eckelmann <sven@narfation.org> Acked-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | main.c | diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | originator.c | diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | main.h | diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | routing.c | diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|
H A D | soft-interface.c | diff 610bfc6bc99bc83680d190ebc69359a05fc7f605 Thu May 23 09:53:02 CDT 2013 Martin Hundebøll <martin@hundeboll.net> batman-adv: Receive fragmented packets and merge
Fragments arriving at their destination are buffered for later merge. Merged packets are passed to the main receive function as had they never been fragmented.
Fragments are forwarded without merging if the MTU of the outgoing interface is smaller than the size of the merged packet.
Signed-off-by: Martin Hundebøll <martin@hundeboll.net> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
|