projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[IPV4/6]: Check if packet was actually delivered to a raw socket to decide whether...
[deliverable/linux.git]
/
net
/
ipv4
/
ip_input.c
diff --git
a/net/ipv4/ip_input.c
b/net/ipv4/ip_input.c
index af2ec88bbb2fc1ae4c841f7168780f95f2e2aedb..81e18023dc19c299afa03108df2ddd1756e2e342 100644
(file)
--- a/
net/ipv4/ip_input.c
+++ b/
net/ipv4/ip_input.c
@@
-225,8
+225,8
@@
static inline int ip_local_deliver_finish(struct sk_buff *skb)
/* If there maybe a raw socket we must check - if not we
* don't care less
*/
/* If there maybe a raw socket we must check - if not we
* don't care less
*/
- if (raw_sk)
- raw_
v4_input(skb, skb->nh.iph, hash)
;
+ if (raw_sk
&& !raw_v4_input(skb, skb->nh.iph, hash)
)
+ raw_
sk = NULL
;
if ((ipprot = rcu_dereference(inet_protos[hash])) != NULL) {
int ret;
if ((ipprot = rcu_dereference(inet_protos[hash])) != NULL) {
int ret;
@@
-283,14
+283,18
@@
static inline int ip_rcv_finish(struct sk_buff *skb)
{
struct net_device *dev = skb->dev;
struct iphdr *iph = skb->nh.iph;
{
struct net_device *dev = skb->dev;
struct iphdr *iph = skb->nh.iph;
+ int err;
/*
* Initialise the virtual path cache for the packet. It describes
* how the packet travels inside Linux networking.
*/
if (skb->dst == NULL) {
/*
* Initialise the virtual path cache for the packet. It describes
* how the packet travels inside Linux networking.
*/
if (skb->dst == NULL) {
- if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev))
+ if ((err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev))) {
+ if (err == -EHOSTUNREACH)
+ IP_INC_STATS_BH(IPSTATS_MIB_INADDRERRORS);
goto drop;
goto drop;
+ }
}
#ifdef CONFIG_NET_CLS_ROUTE
}
#ifdef CONFIG_NET_CLS_ROUTE
@@
-354,7
+358,7
@@
drop:
/*
* Main IP Receive routine.
*/
/*
* Main IP Receive routine.
*/
-int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
+int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
, struct net_device *orig_dev
)
{
struct iphdr *iph;
{
struct iphdr *iph;
This page took
0.031031 seconds
and
5
git commands to generate.