Here are two batman-adv bugfixes:
- Explicitly pad short ELP packets with zeros, by Sven Eckelmann - Fix packet size calculation when merging fragments, by Sven Eckelmann -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEE1ilQI7G+y+fdhnrfoSvjmEKSnqEFAlvsI0MWHHN3QHNpbW9u d3VuZGVybGljaC5kZQAKCRChK+OYQpKeobY0D/9N/v4LVF1vU/mYHPyQA6a8tXxp 9iCazA0jTMym48gvupMVSw0O6VrWZDnqUp6QY/jeB1Hfi188ouJgeY7zMNTnOGSF jlMd+8dIsrJfX0Rg10s9t8mWHtR0Lzfs2TRTwIbjvvFXSOLSCmDFBCKYZNhJBcZm gPDhLVS13klVQud78eTAciIXTIBCk3mp92auvwu/7yYSAi1RHUtMuov6qM6oqXDQ ZaQKlzQ/N1yoh+NwkhIRUPtWZ1Q/8coQk48E8/mxmdCMWf9OKHoxx4TeScG6YDWH x6qSqKIlMHNRJtwt+SF0X4xVqyKJ28jEH8d2lfbm5G6Dvgv2WCGQV8FQ2hjNtlfd VatKnRW94uCMVvaB2r1dN8zx0Dozi3fR8QCo75Wovi9gwKjg3Xe6rNMxJqwwuWNO 4Q9YbiYpT6uZsCb9j3Ym/ConnQ8QMn4PA+qC5iH+4p0e0JfWdKsFGXphzSZzDOBN 3cfODCSO3PyVt/rmnnls21hznkPBn5dKtYCFeyBvtAjddgrzEgME6kB6mJ/mtO/7 1Ks4scMmyto03OpIExBPz8VsUDhsgGPMA2Brq9cfjhfA/Sl7OIJXEbVctnC6GK7H OOuF6QAiN+W92gb+EGZCl3pEirRzZcQsWAgWnR8jM0joMQTHgZLqVDQIYaBPxbuB wFoGWYX14Z5ImSlkyg== =nlBu -----END PGP SIGNATURE----- Merge tag 'batadv-net-for-davem-20181114' of git://git.open-mesh.org/linux-merge Simon Wunderlich says: ==================== Here are two batman-adv bugfixes: - Explicitly pad short ELP packets with zeros, by Sven Eckelmann - Fix packet size calculation when merging fragments, by Sven Eckelmann ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
5594923f6e
@ -352,19 +352,21 @@ out:
|
|||||||
*/
|
*/
|
||||||
int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface)
|
int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface)
|
||||||
{
|
{
|
||||||
|
static const size_t tvlv_padding = sizeof(__be32);
|
||||||
struct batadv_elp_packet *elp_packet;
|
struct batadv_elp_packet *elp_packet;
|
||||||
unsigned char *elp_buff;
|
unsigned char *elp_buff;
|
||||||
u32 random_seqno;
|
u32 random_seqno;
|
||||||
size_t size;
|
size_t size;
|
||||||
int res = -ENOMEM;
|
int res = -ENOMEM;
|
||||||
|
|
||||||
size = ETH_HLEN + NET_IP_ALIGN + BATADV_ELP_HLEN;
|
size = ETH_HLEN + NET_IP_ALIGN + BATADV_ELP_HLEN + tvlv_padding;
|
||||||
hard_iface->bat_v.elp_skb = dev_alloc_skb(size);
|
hard_iface->bat_v.elp_skb = dev_alloc_skb(size);
|
||||||
if (!hard_iface->bat_v.elp_skb)
|
if (!hard_iface->bat_v.elp_skb)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN);
|
skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN);
|
||||||
elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb, BATADV_ELP_HLEN);
|
elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb,
|
||||||
|
BATADV_ELP_HLEN + tvlv_padding);
|
||||||
elp_packet = (struct batadv_elp_packet *)elp_buff;
|
elp_packet = (struct batadv_elp_packet *)elp_buff;
|
||||||
|
|
||||||
elp_packet->packet_type = BATADV_ELP;
|
elp_packet->packet_type = BATADV_ELP;
|
||||||
|
@ -275,7 +275,7 @@ batadv_frag_merge_packets(struct hlist_head *chain)
|
|||||||
kfree(entry);
|
kfree(entry);
|
||||||
|
|
||||||
packet = (struct batadv_frag_packet *)skb_out->data;
|
packet = (struct batadv_frag_packet *)skb_out->data;
|
||||||
size = ntohs(packet->total_size);
|
size = ntohs(packet->total_size) + hdr_size;
|
||||||
|
|
||||||
/* Make room for the rest of the fragments. */
|
/* Make room for the rest of the fragments. */
|
||||||
if (pskb_expand_head(skb_out, 0, size - skb_out->len, GFP_ATOMIC) < 0) {
|
if (pskb_expand_head(skb_out, 0, size - skb_out->len, GFP_ATOMIC) < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user