@@ -665,15 +665,15 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
665
665
*/
666
666
667
667
if (!in_dev )
668
- goto out ;
668
+ goto out_free_skb ;
669
669
670
670
arp = arp_hdr (skb );
671
671
672
672
switch (dev_type ) {
673
673
default :
674
674
if (arp -> ar_pro != htons (ETH_P_IP ) ||
675
675
htons (dev_type ) != arp -> ar_hrd )
676
- goto out ;
676
+ goto out_free_skb ;
677
677
break ;
678
678
case ARPHRD_ETHER :
679
679
case ARPHRD_FDDI :
@@ -690,25 +690,25 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
690
690
if ((arp -> ar_hrd != htons (ARPHRD_ETHER ) &&
691
691
arp -> ar_hrd != htons (ARPHRD_IEEE802 )) ||
692
692
arp -> ar_pro != htons (ETH_P_IP ))
693
- goto out ;
693
+ goto out_free_skb ;
694
694
break ;
695
695
case ARPHRD_AX25 :
696
696
if (arp -> ar_pro != htons (AX25_P_IP ) ||
697
697
arp -> ar_hrd != htons (ARPHRD_AX25 ))
698
- goto out ;
698
+ goto out_free_skb ;
699
699
break ;
700
700
case ARPHRD_NETROM :
701
701
if (arp -> ar_pro != htons (AX25_P_IP ) ||
702
702
arp -> ar_hrd != htons (ARPHRD_NETROM ))
703
- goto out ;
703
+ goto out_free_skb ;
704
704
break ;
705
705
}
706
706
707
707
/* Understand only these message types */
708
708
709
709
if (arp -> ar_op != htons (ARPOP_REPLY ) &&
710
710
arp -> ar_op != htons (ARPOP_REQUEST ))
711
- goto out ;
711
+ goto out_free_skb ;
712
712
713
713
/*
714
714
* Extract fields
@@ -733,15 +733,15 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
733
733
*/
734
734
if (ipv4_is_multicast (tip ) ||
735
735
(!IN_DEV_ROUTE_LOCALNET (in_dev ) && ipv4_is_loopback (tip )))
736
- goto out ;
736
+ goto out_free_skb ;
737
737
738
738
/*
739
739
* For some 802.11 wireless deployments (and possibly other networks),
740
740
* there will be an ARP proxy and gratuitous ARP frames are attacks
741
741
* and thus should not be accepted.
742
742
*/
743
743
if (sip == tip && IN_DEV_ORCONF (in_dev , DROP_GRATUITOUS_ARP ))
744
- goto out ;
744
+ goto out_free_skb ;
745
745
746
746
/*
747
747
* Special case: We must set Frame Relay source Q.922 address
@@ -778,7 +778,7 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
778
778
!arp_ignore (in_dev , sip , tip ))
779
779
arp_send_dst (ARPOP_REPLY , ETH_P_ARP , sip , dev , tip ,
780
780
sha , dev -> dev_addr , sha , reply_dst );
781
- goto out ;
781
+ goto out_consume_skb ;
782
782
}
783
783
784
784
if (arp -> ar_op == htons (ARPOP_REQUEST ) &&
@@ -803,7 +803,7 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
803
803
neigh_release (n );
804
804
}
805
805
}
806
- goto out ;
806
+ goto out_consume_skb ;
807
807
} else if (IN_DEV_FORWARD (in_dev )) {
808
808
if (addr_type == RTN_UNICAST &&
809
809
(arp_fwd_proxy (in_dev , dev , rt ) ||
@@ -826,7 +826,7 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
826
826
in_dev -> arp_parms , skb );
827
827
goto out_free_dst ;
828
828
}
829
- goto out ;
829
+ goto out_consume_skb ;
830
830
}
831
831
}
832
832
}
@@ -876,11 +876,16 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb)
876
876
neigh_release (n );
877
877
}
878
878
879
- out :
879
+ out_consume_skb :
880
880
consume_skb (skb );
881
+
881
882
out_free_dst :
882
883
dst_release (reply_dst );
883
- return 0 ;
884
+ return NET_RX_SUCCESS ;
885
+
886
+ out_free_skb :
887
+ kfree_skb (skb );
888
+ return NET_RX_DROP ;
884
889
}
885
890
886
891
static void parp_redo (struct sk_buff * skb )
@@ -924,11 +929,11 @@ static int arp_rcv(struct sk_buff *skb, struct net_device *dev,
924
929
925
930
consumeskb :
926
931
consume_skb (skb );
927
- return 0 ;
932
+ return NET_RX_SUCCESS ;
928
933
freeskb :
929
934
kfree_skb (skb );
930
935
out_of_mem :
931
- return 0 ;
936
+ return NET_RX_DROP ;
932
937
}
933
938
934
939
/*
0 commit comments