git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
net
/
ipv4
/
icmp.c
diff --git
a/net/ipv4/icmp.c
b/net/ipv4/icmp.c
index
e7bbff4
..
40cf0d0
100644
(file)
--- a/
net/ipv4/icmp.c
+++ b/
net/ipv4/icmp.c
@@
-64,7
+64,6
@@
*
*/
*
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/jiffies.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/jiffies.h>
@@
-105,7
+104,7
@@
struct icmp_bxm {
struct {
struct icmphdr icmph;
struct {
struct icmphdr icmph;
- __
u32
times[3];
+ __
be32
times[3];
} data;
int head_len;
struct ip_options replyopts;
} data;
int head_len;
struct ip_options replyopts;
@@
-188,11
+187,11
@@
struct icmp_err icmp_err_convert[] = {
};
/* Control parameters for ECHO replies. */
};
/* Control parameters for ECHO replies. */
-int sysctl_icmp_echo_ignore_all;
-int sysctl_icmp_echo_ignore_broadcasts = 1;
+int sysctl_icmp_echo_ignore_all
__read_mostly
;
+int sysctl_icmp_echo_ignore_broadcasts
__read_mostly
= 1;
/* Control parameter - ignore bogus broadcast responses? */
/* Control parameter - ignore bogus broadcast responses? */
-int sysctl_icmp_ignore_bogus_error_responses = 1;
+int sysctl_icmp_ignore_bogus_error_responses
__read_mostly
= 1;
/*
* Configurable global rate limit.
/*
* Configurable global rate limit.
@@
-206,9
+205,9
@@
int sysctl_icmp_ignore_bogus_error_responses = 1;
* time exceeded (11), parameter problem (12)
*/
* time exceeded (11), parameter problem (12)
*/
-int sysctl_icmp_ratelimit = 1 * HZ;
-int sysctl_icmp_ratemask = 0x1818;
-int sysctl_icmp_errors_use_inbound_ifaddr;
+int sysctl_icmp_ratelimit
__read_mostly
= 1 * HZ;
+int sysctl_icmp_ratemask
__read_mostly
= 0x1818;
+int sysctl_icmp_errors_use_inbound_ifaddr
__read_mostly
;
/*
* ICMP control array. This specifies what to do with each ICMP.
/*
* ICMP control array. This specifies what to do with each ICMP.
@@
-333,7
+332,7
@@
static int icmp_glue_bits(void *from, char *to, int offset, int len, int odd,
struct sk_buff *skb)
{
struct icmp_bxm *icmp_param = (struct icmp_bxm *)from;
struct sk_buff *skb)
{
struct icmp_bxm *icmp_param = (struct icmp_bxm *)from;
-
unsigned int
csum;
+
__wsum
csum;
csum = skb_copy_and_csum_bits(icmp_param->skb,
icmp_param->offset + offset,
csum = skb_copy_and_csum_bits(icmp_param->skb,
icmp_param->offset + offset,
@@
-357,7
+356,7
@@
static void icmp_push_reply(struct icmp_bxm *icmp_param,
ip_flush_pending_frames(icmp_socket->sk);
else if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) {
struct icmphdr *icmph = skb->h.icmph;
ip_flush_pending_frames(icmp_socket->sk);
else if ((skb = skb_peek(&icmp_socket->sk->sk_write_queue)) != NULL) {
struct icmphdr *icmph = skb->h.icmph;
-
unsigned int
csum = 0;
+
__wsum
csum = 0;
struct sk_buff *skb1;
skb_queue_walk(&icmp_socket->sk->sk_write_queue, skb1) {
struct sk_buff *skb1;
skb_queue_walk(&icmp_socket->sk->sk_write_queue, skb1) {
@@
-382,7
+381,7
@@
static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
struct inet_sock *inet = inet_sk(sk);
struct ipcm_cookie ipc;
struct rtable *rt = (struct rtable *)skb->dst;
struct inet_sock *inet = inet_sk(sk);
struct ipcm_cookie ipc;
struct rtable *rt = (struct rtable *)skb->dst;
-
u
32 daddr;
+
__be
32 daddr;
if (ip_options_echo(&icmp_param->replyopts, skb))
return;
if (ip_options_echo(&icmp_param->replyopts, skb))
return;
@@
-407,6
+406,7
@@
static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
.saddr = rt->rt_spec_dst,
.tos = RT_TOS(skb->nh.iph->tos) } },
.proto = IPPROTO_ICMP };
.saddr = rt->rt_spec_dst,
.tos = RT_TOS(skb->nh.iph->tos) } },
.proto = IPPROTO_ICMP };
+ security_skb_classify_flow(skb, &fl);
if (ip_route_output_key(&rt, &fl))
goto out_unlock;
}
if (ip_route_output_key(&rt, &fl))
goto out_unlock;
}
@@
-430,14
+430,14
@@
out_unlock:
* MUST reply to only the first fragment.
*/
* MUST reply to only the first fragment.
*/
-void icmp_send(struct sk_buff *skb_in, int type, int code,
u
32 info)
+void icmp_send(struct sk_buff *skb_in, int type, int code,
__be
32 info)
{
struct iphdr *iph;
int room;
struct icmp_bxm icmp_param;
struct rtable *rt = (struct rtable *)skb_in->dst;
struct ipcm_cookie ipc;
{
struct iphdr *iph;
int room;
struct icmp_bxm icmp_param;
struct rtable *rt = (struct rtable *)skb_in->dst;
struct ipcm_cookie ipc;
-
u
32 saddr;
+
__be
32 saddr;
u8 tos;
if (!rt)
u8 tos;
if (!rt)
@@
-561,6
+561,7
@@
void icmp_send(struct sk_buff *skb_in, int type, int code, u32 info)
}
}
};
}
}
};
+ security_skb_classify_flow(skb_in, &fl);
if (ip_route_output_key(&rt, &fl))
goto out_unlock;
}
if (ip_route_output_key(&rt, &fl))
goto out_unlock;
}
@@
-730,7
+731,6
@@
out_err:
static void icmp_redirect(struct sk_buff *skb)
{
struct iphdr *iph;
static void icmp_redirect(struct sk_buff *skb)
{
struct iphdr *iph;
- unsigned long ip;
if (skb->len < sizeof(struct iphdr))
goto out_err;
if (skb->len < sizeof(struct iphdr))
goto out_err;
@@
-742,7
+742,6
@@
static void icmp_redirect(struct sk_buff *skb)
goto out;
iph = (struct iphdr *)skb->data;
goto out;
iph = (struct iphdr *)skb->data;
- ip = iph->daddr;
switch (skb->h.icmph->code & 7) {
case ICMP_REDIR_NET:
switch (skb->h.icmph->code & 7) {
case ICMP_REDIR_NET:
@@
-752,8
+751,9
@@
static void icmp_redirect(struct sk_buff *skb)
*/
case ICMP_REDIR_HOST:
case ICMP_REDIR_HOSTTOS:
*/
case ICMP_REDIR_HOST:
case ICMP_REDIR_HOSTTOS:
- ip_rt_redirect(skb->nh.iph->saddr, ip, skb->h.icmph->un.gateway,
- iph->saddr, iph->tos, skb->dev);
+ ip_rt_redirect(skb->nh.iph->saddr, iph->daddr,
+ skb->h.icmph->un.gateway,
+ iph->saddr, skb->dev);
break;
}
out:
break;
}
out:
@@
-895,7
+895,7
@@
static void icmp_address_reply(struct sk_buff *skb)
if (in_dev->ifa_list &&
IN_DEV_LOG_MARTIANS(in_dev) &&
IN_DEV_FORWARD(in_dev)) {
if (in_dev->ifa_list &&
IN_DEV_LOG_MARTIANS(in_dev) &&
IN_DEV_FORWARD(in_dev)) {
-
u
32 _mask, *mp;
+
__be
32 _mask, *mp;
mp = skb_header_pointer(skb, 0, sizeof(_mask), &_mask);
BUG_ON(mp == NULL);
mp = skb_header_pointer(skb, 0, sizeof(_mask), &_mask);
BUG_ON(mp == NULL);
@@
-930,8
+930,8
@@
int icmp_rcv(struct sk_buff *skb)
ICMP_INC_STATS_BH(ICMP_MIB_INMSGS);
switch (skb->ip_summed) {
ICMP_INC_STATS_BH(ICMP_MIB_INMSGS);
switch (skb->ip_summed) {
- case CHECKSUM_
HW
:
- if (!
(u16)
csum_fold(skb->csum))
+ case CHECKSUM_
COMPLETE
:
+ if (!csum_fold(skb->csum))
break;
/* fall through */
case CHECKSUM_NONE:
break;
/* fall through */
case CHECKSUM_NONE:
@@
-1107,7
+1107,7
@@
void __init icmp_init(struct net_proto_family *ops)
struct inet_sock *inet;
int i;
struct inet_sock *inet;
int i;
- for_each_cpu(i) {
+ for_each_
possible_
cpu(i) {
int err;
err = sock_create_kern(PF_INET, SOCK_RAW, IPPROTO_ICMP,
int err;
err = sock_create_kern(PF_INET, SOCK_RAW, IPPROTO_ICMP,