To avoid code duplication and simplify later changes, check_unicast_packet() is now used into recv_roam_adv() instead of letting it perform all the checks by itself
Signed-off-by: Antonio Quartulli ordex@autistici.org --- routing.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/routing.c b/routing.c index 939fc01..7ebd922 100644 --- a/routing.c +++ b/routing.c @@ -687,21 +687,9 @@ int batadv_recv_roam_adv(struct sk_buff *skb, struct batadv_hard_iface *recv_if) struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface); struct batadv_roam_adv_packet *roam_adv_packet; struct batadv_orig_node *orig_node; - struct ethhdr *ethhdr; - - /* drop packet if it has not necessary minimum size */ - if (unlikely(!pskb_may_pull(skb, - sizeof(struct batadv_roam_adv_packet)))) - goto out; + int hdr_size = sizeof(struct batadv_roam_adv_packet);
- ethhdr = (struct ethhdr *)skb_mac_header(skb); - - /* packet with unicast indication but broadcast recipient */ - if (is_broadcast_ether_addr(ethhdr->h_dest)) - goto out; - - /* packet with broadcast sender address */ - if (is_broadcast_ether_addr(ethhdr->h_source)) + if (batadv_check_unicast_packet(skb, hdr_size) < 0) goto out;
batadv_inc_counter(bat_priv, BATADV_CNT_TT_ROAM_ADV_RX);
On Monday, July 30, 2012 00:50:03 Antonio Quartulli wrote:
@@ -687,21 +687,9 @@ int batadv_recv_roam_adv(struct sk_buff *skb, struct batadv_hard_iface *recv_if) struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface); struct batadv_roam_adv_packet *roam_adv_packet; struct batadv_orig_node *orig_node;
- struct ethhdr *ethhdr;
- /* drop packet if it has not necessary minimum size */
- if (unlikely(!pskb_may_pull(skb,
sizeof(struct batadv_roam_adv_packet))))
goto out;
- int hdr_size = sizeof(struct batadv_roam_adv_packet);
Shouldn't we do: int hdr_size = sizeof(*roam_adv_packet); ?
Regards, Marek
On Mon, Jul 30, 2012 at 09:56:51AM +0200, Marek Lindner wrote:
On Monday, July 30, 2012 00:50:03 Antonio Quartulli wrote:
@@ -687,21 +687,9 @@ int batadv_recv_roam_adv(struct sk_buff *skb, struct batadv_hard_iface *recv_if) struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface); struct batadv_roam_adv_packet *roam_adv_packet; struct batadv_orig_node *orig_node;
- struct ethhdr *ethhdr;
- /* drop packet if it has not necessary minimum size */
- if (unlikely(!pskb_may_pull(skb,
sizeof(struct batadv_roam_adv_packet))))
goto out;
- int hdr_size = sizeof(struct batadv_roam_adv_packet);
Shouldn't we do: int hdr_size = sizeof(*roam_adv_packet); ?
right. I copy/pasted the old code and I forgot to change it. Will fix.
Thanks
Regards, Marek
To avoid code duplication and to simplify further changes, check_unicast_packet() is now used in recv_roam_adv() to check for not well formed packets and so discard them.
Signed-off-by: Antonio Quartulli ordex@autistici.org ---
v2: commit message rearranged
routing.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/routing.c b/routing.c index 939fc01..7ebd922 100644 --- a/routing.c +++ b/routing.c @@ -687,21 +687,9 @@ int batadv_recv_roam_adv(struct sk_buff *skb, struct batadv_hard_iface *recv_if) struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface); struct batadv_roam_adv_packet *roam_adv_packet; struct batadv_orig_node *orig_node; - struct ethhdr *ethhdr; - - /* drop packet if it has not necessary minimum size */ - if (unlikely(!pskb_may_pull(skb, - sizeof(struct batadv_roam_adv_packet)))) - goto out; + int hdr_size = sizeof(struct batadv_roam_adv_packet);
- ethhdr = (struct ethhdr *)skb_mac_header(skb); - - /* packet with unicast indication but broadcast recipient */ - if (is_broadcast_ether_addr(ethhdr->h_dest)) - goto out; - - /* packet with broadcast sender address */ - if (is_broadcast_ether_addr(ethhdr->h_source)) + if (batadv_check_unicast_packet(skb, hdr_size) < 0) goto out;
batadv_inc_counter(bat_priv, BATADV_CNT_TT_ROAM_ADV_RX);
To avoid code duplication and to simplify further changes, check_unicast_packet() is now used in recv_roam_adv() to check for not well formed packets and so discard them.
Signed-off-by: Antonio Quartulli ordex@autistici.org ---
v2 - coment rearrangement v3 - fixed sizeof argument (use the variable name instead of the type, if possible)
routing.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/routing.c b/routing.c index 939fc01..e7a4e25 100644 --- a/routing.c +++ b/routing.c @@ -687,21 +687,8 @@ int batadv_recv_roam_adv(struct sk_buff *skb, struct batadv_hard_iface *recv_if) struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface); struct batadv_roam_adv_packet *roam_adv_packet; struct batadv_orig_node *orig_node; - struct ethhdr *ethhdr; - - /* drop packet if it has not necessary minimum size */ - if (unlikely(!pskb_may_pull(skb, - sizeof(struct batadv_roam_adv_packet)))) - goto out; - - ethhdr = (struct ethhdr *)skb_mac_header(skb);
- /* packet with unicast indication but broadcast recipient */ - if (is_broadcast_ether_addr(ethhdr->h_dest)) - goto out; - - /* packet with broadcast sender address */ - if (is_broadcast_ether_addr(ethhdr->h_source)) + if (batadv_check_unicast_packet(skb, sizeof(*roam_adv_packet)) < 0) goto out;
batadv_inc_counter(bat_priv, BATADV_CNT_TT_ROAM_ADV_RX);
On Tuesday, July 31, 2012 17:19:15 Antonio Quartulli wrote:
To avoid code duplication and to simplify further changes, check_unicast_packet() is now used in recv_roam_adv() to check for not well formed packets and so discard them.
Signed-off-by: Antonio Quartulli ordex@autistici.org
v2
- coment rearrangement
v3
- fixed sizeof argument (use the variable name instead of the type, if
possible)
routing.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-)
Applied in revision 2ce4b9b.
Thanks, Marek
b.a.t.m.a.n@lists.open-mesh.org