Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38184b3b authored by Eric W. Biederman's avatar Eric W. Biederman Committed by David S. Miller
Browse files

ipv4: Only compute net once in ip_rcv_finish

parent 4ba1bf42
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -314,6 +314,7 @@ EXPORT_SYMBOL(sysctl_ip_early_demux);
static int ip_rcv_finish(struct sock *sk, struct sk_buff *skb)
{
	const struct iphdr *iph = ip_hdr(skb);
	struct net *net = dev_net(skb->dev);
	struct rtable *rt;

	if (sysctl_ip_early_demux && !skb_dst(skb) && !skb->sk) {
@@ -337,8 +338,7 @@ static int ip_rcv_finish(struct sock *sk, struct sk_buff *skb)
					       iph->tos, skb->dev);
		if (unlikely(err)) {
			if (err == -EXDEV)
				NET_INC_STATS_BH(dev_net(skb->dev),
						 LINUX_MIB_IPRPFILTER);
				NET_INC_STATS_BH(net, LINUX_MIB_IPRPFILTER);
			goto drop;
		}
	}
@@ -359,11 +359,9 @@ static int ip_rcv_finish(struct sock *sk, struct sk_buff *skb)

	rt = skb_rtable(skb);
	if (rt->rt_type == RTN_MULTICAST) {
		IP_UPD_PO_STATS_BH(dev_net(rt->dst.dev), IPSTATS_MIB_INMCAST,
				skb->len);
		IP_UPD_PO_STATS_BH(net, IPSTATS_MIB_INMCAST, skb->len);
	} else if (rt->rt_type == RTN_BROADCAST)
		IP_UPD_PO_STATS_BH(dev_net(rt->dst.dev), IPSTATS_MIB_INBCAST,
				skb->len);
		IP_UPD_PO_STATS_BH(net, IPSTATS_MIB_INBCAST, skb->len);

	return dst_input(skb);