diff options
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/icmp.c | 3 | ||||
-rw-r--r-- | net/ipv4/inet_diag.c | 243 | ||||
-rw-r--r-- | net/ipv4/inetpeer.c | 6 | ||||
-rw-r--r-- | net/ipv4/ip_gre.c | 33 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 1 | ||||
-rw-r--r-- | net/ipv4/ipip.c | 18 | ||||
-rw-r--r-- | net/ipv4/ipmr.c | 22 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 2 |
8 files changed, 200 insertions, 128 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index be5a519cd2f8..105039eb7629 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -899,8 +899,7 @@ static void icmp_address_reply(struct sk_buff *skb) | |||
899 | u32 _mask, *mp; | 899 | u32 _mask, *mp; |
900 | 900 | ||
901 | mp = skb_header_pointer(skb, 0, sizeof(_mask), &_mask); | 901 | mp = skb_header_pointer(skb, 0, sizeof(_mask), &_mask); |
902 | if (mp == NULL) | 902 | BUG_ON(mp == NULL); |
903 | BUG(); | ||
904 | for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) { | 903 | for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) { |
905 | if (*mp == ifa->ifa_mask && | 904 | if (*mp == ifa->ifa_mask && |
906 | inet_ifa_match(rt->rt_src, ifa)) | 905 | inet_ifa_match(rt->rt_src, ifa)) |
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index c49908192047..457db99c76df 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c | |||
@@ -50,9 +50,10 @@ static struct sock *idiagnl; | |||
50 | #define INET_DIAG_PUT(skb, attrtype, attrlen) \ | 50 | #define INET_DIAG_PUT(skb, attrtype, attrlen) \ |
51 | RTA_DATA(__RTA_PUT(skb, attrtype, attrlen)) | 51 | RTA_DATA(__RTA_PUT(skb, attrtype, attrlen)) |
52 | 52 | ||
53 | static int inet_diag_fill(struct sk_buff *skb, struct sock *sk, | 53 | static int inet_csk_diag_fill(struct sock *sk, |
54 | int ext, u32 pid, u32 seq, u16 nlmsg_flags, | 54 | struct sk_buff *skb, |
55 | const struct nlmsghdr *unlh) | 55 | int ext, u32 pid, u32 seq, u16 nlmsg_flags, |
56 | const struct nlmsghdr *unlh) | ||
56 | { | 57 | { |
57 | const struct inet_sock *inet = inet_sk(sk); | 58 | const struct inet_sock *inet = inet_sk(sk); |
58 | const struct inet_connection_sock *icsk = inet_csk(sk); | 59 | const struct inet_connection_sock *icsk = inet_csk(sk); |
@@ -70,20 +71,22 @@ static int inet_diag_fill(struct sk_buff *skb, struct sock *sk, | |||
70 | nlh->nlmsg_flags = nlmsg_flags; | 71 | nlh->nlmsg_flags = nlmsg_flags; |
71 | 72 | ||
72 | r = NLMSG_DATA(nlh); | 73 | r = NLMSG_DATA(nlh); |
73 | if (sk->sk_state != TCP_TIME_WAIT) { | 74 | BUG_ON(sk->sk_state == TCP_TIME_WAIT); |
74 | if (ext & (1 << (INET_DIAG_MEMINFO - 1))) | 75 | |
75 | minfo = INET_DIAG_PUT(skb, INET_DIAG_MEMINFO, | 76 | if (ext & (1 << (INET_DIAG_MEMINFO - 1))) |
76 | sizeof(*minfo)); | 77 | minfo = INET_DIAG_PUT(skb, INET_DIAG_MEMINFO, sizeof(*minfo)); |
77 | if (ext & (1 << (INET_DIAG_INFO - 1))) | 78 | |
78 | info = INET_DIAG_PUT(skb, INET_DIAG_INFO, | 79 | if (ext & (1 << (INET_DIAG_INFO - 1))) |
79 | handler->idiag_info_size); | 80 | info = INET_DIAG_PUT(skb, INET_DIAG_INFO, |
80 | 81 | handler->idiag_info_size); | |
81 | if ((ext & (1 << (INET_DIAG_CONG - 1))) && icsk->icsk_ca_ops) { | 82 | |
82 | size_t len = strlen(icsk->icsk_ca_ops->name); | 83 | if ((ext & (1 << (INET_DIAG_CONG - 1))) && icsk->icsk_ca_ops) { |
83 | strcpy(INET_DIAG_PUT(skb, INET_DIAG_CONG, len + 1), | 84 | const size_t len = strlen(icsk->icsk_ca_ops->name); |
84 | icsk->icsk_ca_ops->name); | 85 | |
85 | } | 86 | strcpy(INET_DIAG_PUT(skb, INET_DIAG_CONG, len + 1), |
87 | icsk->icsk_ca_ops->name); | ||
86 | } | 88 | } |
89 | |||
87 | r->idiag_family = sk->sk_family; | 90 | r->idiag_family = sk->sk_family; |
88 | r->idiag_state = sk->sk_state; | 91 | r->idiag_state = sk->sk_state; |
89 | r->idiag_timer = 0; | 92 | r->idiag_timer = 0; |
@@ -93,37 +96,6 @@ static int inet_diag_fill(struct sk_buff *skb, struct sock *sk, | |||
93 | r->id.idiag_cookie[0] = (u32)(unsigned long)sk; | 96 | r->id.idiag_cookie[0] = (u32)(unsigned long)sk; |
94 | r->id.idiag_cookie[1] = (u32)(((unsigned long)sk >> 31) >> 1); | 97 | r->id.idiag_cookie[1] = (u32)(((unsigned long)sk >> 31) >> 1); |
95 | 98 | ||
96 | if (r->idiag_state == TCP_TIME_WAIT) { | ||
97 | const struct inet_timewait_sock *tw = inet_twsk(sk); | ||
98 | long tmo = tw->tw_ttd - jiffies; | ||
99 | if (tmo < 0) | ||
100 | tmo = 0; | ||
101 | |||
102 | r->id.idiag_sport = tw->tw_sport; | ||
103 | r->id.idiag_dport = tw->tw_dport; | ||
104 | r->id.idiag_src[0] = tw->tw_rcv_saddr; | ||
105 | r->id.idiag_dst[0] = tw->tw_daddr; | ||
106 | r->idiag_state = tw->tw_substate; | ||
107 | r->idiag_timer = 3; | ||
108 | r->idiag_expires = (tmo * 1000 + HZ - 1) / HZ; | ||
109 | r->idiag_rqueue = 0; | ||
110 | r->idiag_wqueue = 0; | ||
111 | r->idiag_uid = 0; | ||
112 | r->idiag_inode = 0; | ||
113 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) | ||
114 | if (r->idiag_family == AF_INET6) { | ||
115 | const struct inet6_timewait_sock *tw6 = inet6_twsk(sk); | ||
116 | |||
117 | ipv6_addr_copy((struct in6_addr *)r->id.idiag_src, | ||
118 | &tw6->tw_v6_rcv_saddr); | ||
119 | ipv6_addr_copy((struct in6_addr *)r->id.idiag_dst, | ||
120 | &tw6->tw_v6_daddr); | ||
121 | } | ||
122 | #endif | ||
123 | nlh->nlmsg_len = skb->tail - b; | ||
124 | return skb->len; | ||
125 | } | ||
126 | |||
127 | r->id.idiag_sport = inet->sport; | 99 | r->id.idiag_sport = inet->sport; |
128 | r->id.idiag_dport = inet->dport; | 100 | r->id.idiag_dport = inet->dport; |
129 | r->id.idiag_src[0] = inet->rcv_saddr; | 101 | r->id.idiag_src[0] = inet->rcv_saddr; |
@@ -185,7 +157,75 @@ nlmsg_failure: | |||
185 | return -1; | 157 | return -1; |
186 | } | 158 | } |
187 | 159 | ||
188 | static int inet_diag_get_exact(struct sk_buff *in_skb, const struct nlmsghdr *nlh) | 160 | static int inet_twsk_diag_fill(struct inet_timewait_sock *tw, |
161 | struct sk_buff *skb, int ext, u32 pid, | ||
162 | u32 seq, u16 nlmsg_flags, | ||
163 | const struct nlmsghdr *unlh) | ||
164 | { | ||
165 | long tmo; | ||
166 | struct inet_diag_msg *r; | ||
167 | const unsigned char *previous_tail = skb->tail; | ||
168 | struct nlmsghdr *nlh = NLMSG_PUT(skb, pid, seq, | ||
169 | unlh->nlmsg_type, sizeof(*r)); | ||
170 | |||
171 | r = NLMSG_DATA(nlh); | ||
172 | BUG_ON(tw->tw_state != TCP_TIME_WAIT); | ||
173 | |||
174 | nlh->nlmsg_flags = nlmsg_flags; | ||
175 | |||
176 | tmo = tw->tw_ttd - jiffies; | ||
177 | if (tmo < 0) | ||
178 | tmo = 0; | ||
179 | |||
180 | r->idiag_family = tw->tw_family; | ||
181 | r->idiag_state = tw->tw_state; | ||
182 | r->idiag_timer = 0; | ||
183 | r->idiag_retrans = 0; | ||
184 | r->id.idiag_if = tw->tw_bound_dev_if; | ||
185 | r->id.idiag_cookie[0] = (u32)(unsigned long)tw; | ||
186 | r->id.idiag_cookie[1] = (u32)(((unsigned long)tw >> 31) >> 1); | ||
187 | r->id.idiag_sport = tw->tw_sport; | ||
188 | r->id.idiag_dport = tw->tw_dport; | ||
189 | r->id.idiag_src[0] = tw->tw_rcv_saddr; | ||
190 | r->id.idiag_dst[0] = tw->tw_daddr; | ||
191 | r->idiag_state = tw->tw_substate; | ||
192 | r->idiag_timer = 3; | ||
193 | r->idiag_expires = (tmo * 1000 + HZ - 1) / HZ; | ||
194 | r->idiag_rqueue = 0; | ||
195 | r->idiag_wqueue = 0; | ||
196 | r->idiag_uid = 0; | ||
197 | r->idiag_inode = 0; | ||
198 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) | ||
199 | if (tw->tw_family == AF_INET6) { | ||
200 | const struct inet6_timewait_sock *tw6 = | ||
201 | inet6_twsk((struct sock *)tw); | ||
202 | |||
203 | ipv6_addr_copy((struct in6_addr *)r->id.idiag_src, | ||
204 | &tw6->tw_v6_rcv_saddr); | ||
205 | ipv6_addr_copy((struct in6_addr *)r->id.idiag_dst, | ||
206 | &tw6->tw_v6_daddr); | ||
207 | } | ||
208 | #endif | ||
209 | nlh->nlmsg_len = skb->tail - previous_tail; | ||
210 | return skb->len; | ||
211 | nlmsg_failure: | ||
212 | skb_trim(skb, previous_tail - skb->data); | ||
213 | return -1; | ||
214 | } | ||
215 | |||
216 | static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, | ||
217 | int ext, u32 pid, u32 seq, u16 nlmsg_flags, | ||
218 | const struct nlmsghdr *unlh) | ||
219 | { | ||
220 | if (sk->sk_state == TCP_TIME_WAIT) | ||
221 | return inet_twsk_diag_fill((struct inet_timewait_sock *)sk, | ||
222 | skb, ext, pid, seq, nlmsg_flags, | ||
223 | unlh); | ||
224 | return inet_csk_diag_fill(sk, skb, ext, pid, seq, nlmsg_flags, unlh); | ||
225 | } | ||
226 | |||
227 | static int inet_diag_get_exact(struct sk_buff *in_skb, | ||
228 | const struct nlmsghdr *nlh) | ||
189 | { | 229 | { |
190 | int err; | 230 | int err; |
191 | struct sock *sk; | 231 | struct sock *sk; |
@@ -235,7 +275,7 @@ static int inet_diag_get_exact(struct sk_buff *in_skb, const struct nlmsghdr *nl | |||
235 | if (!rep) | 275 | if (!rep) |
236 | goto out; | 276 | goto out; |
237 | 277 | ||
238 | if (inet_diag_fill(rep, sk, req->idiag_ext, | 278 | if (sk_diag_fill(sk, rep, req->idiag_ext, |
239 | NETLINK_CB(in_skb).pid, | 279 | NETLINK_CB(in_skb).pid, |
240 | nlh->nlmsg_seq, 0, nlh) <= 0) | 280 | nlh->nlmsg_seq, 0, nlh) <= 0) |
241 | BUG(); | 281 | BUG(); |
@@ -283,7 +323,7 @@ static int bitstring_match(const u32 *a1, const u32 *a2, int bits) | |||
283 | 323 | ||
284 | 324 | ||
285 | static int inet_diag_bc_run(const void *bc, int len, | 325 | static int inet_diag_bc_run(const void *bc, int len, |
286 | const struct inet_diag_entry *entry) | 326 | const struct inet_diag_entry *entry) |
287 | { | 327 | { |
288 | while (len > 0) { | 328 | while (len > 0) { |
289 | int yes = 1; | 329 | int yes = 1; |
@@ -322,7 +362,7 @@ static int inet_diag_bc_run(const void *bc, int len, | |||
322 | yes = 0; | 362 | yes = 0; |
323 | break; | 363 | break; |
324 | } | 364 | } |
325 | 365 | ||
326 | if (cond->prefix_len == 0) | 366 | if (cond->prefix_len == 0) |
327 | break; | 367 | break; |
328 | 368 | ||
@@ -331,7 +371,8 @@ static int inet_diag_bc_run(const void *bc, int len, | |||
331 | else | 371 | else |
332 | addr = entry->daddr; | 372 | addr = entry->daddr; |
333 | 373 | ||
334 | if (bitstring_match(addr, cond->addr, cond->prefix_len)) | 374 | if (bitstring_match(addr, cond->addr, |
375 | cond->prefix_len)) | ||
335 | break; | 376 | break; |
336 | if (entry->family == AF_INET6 && | 377 | if (entry->family == AF_INET6 && |
337 | cond->family == AF_INET) { | 378 | cond->family == AF_INET) { |
@@ -346,7 +387,7 @@ static int inet_diag_bc_run(const void *bc, int len, | |||
346 | } | 387 | } |
347 | } | 388 | } |
348 | 389 | ||
349 | if (yes) { | 390 | if (yes) { |
350 | len -= op->yes; | 391 | len -= op->yes; |
351 | bc += op->yes; | 392 | bc += op->yes; |
352 | } else { | 393 | } else { |
@@ -407,14 +448,15 @@ static int inet_diag_bc_audit(const void *bytecode, int bytecode_len) | |||
407 | default: | 448 | default: |
408 | return -EINVAL; | 449 | return -EINVAL; |
409 | } | 450 | } |
410 | bc += op->yes; | 451 | bc += op->yes; |
411 | len -= op->yes; | 452 | len -= op->yes; |
412 | } | 453 | } |
413 | return len == 0 ? 0 : -EINVAL; | 454 | return len == 0 ? 0 : -EINVAL; |
414 | } | 455 | } |
415 | 456 | ||
416 | static int inet_diag_dump_sock(struct sk_buff *skb, struct sock *sk, | 457 | static int inet_csk_diag_dump(struct sock *sk, |
417 | struct netlink_callback *cb) | 458 | struct sk_buff *skb, |
459 | struct netlink_callback *cb) | ||
418 | { | 460 | { |
419 | struct inet_diag_req *r = NLMSG_DATA(cb->nlh); | 461 | struct inet_diag_req *r = NLMSG_DATA(cb->nlh); |
420 | 462 | ||
@@ -444,14 +486,50 @@ static int inet_diag_dump_sock(struct sk_buff *skb, struct sock *sk, | |||
444 | return 0; | 486 | return 0; |
445 | } | 487 | } |
446 | 488 | ||
447 | return inet_diag_fill(skb, sk, r->idiag_ext, NETLINK_CB(cb->skb).pid, | 489 | return inet_csk_diag_fill(sk, skb, r->idiag_ext, |
448 | cb->nlh->nlmsg_seq, NLM_F_MULTI, cb->nlh); | 490 | NETLINK_CB(cb->skb).pid, |
491 | cb->nlh->nlmsg_seq, NLM_F_MULTI, cb->nlh); | ||
492 | } | ||
493 | |||
494 | static int inet_twsk_diag_dump(struct inet_timewait_sock *tw, | ||
495 | struct sk_buff *skb, | ||
496 | struct netlink_callback *cb) | ||
497 | { | ||
498 | struct inet_diag_req *r = NLMSG_DATA(cb->nlh); | ||
499 | |||
500 | if (cb->nlh->nlmsg_len > 4 + NLMSG_SPACE(sizeof(*r))) { | ||
501 | struct inet_diag_entry entry; | ||
502 | struct rtattr *bc = (struct rtattr *)(r + 1); | ||
503 | |||
504 | entry.family = tw->tw_family; | ||
505 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) | ||
506 | if (tw->tw_family == AF_INET6) { | ||
507 | struct inet6_timewait_sock *tw6 = | ||
508 | inet6_twsk((struct sock *)tw); | ||
509 | entry.saddr = tw6->tw_v6_rcv_saddr.s6_addr32; | ||
510 | entry.daddr = tw6->tw_v6_daddr.s6_addr32; | ||
511 | } else | ||
512 | #endif | ||
513 | { | ||
514 | entry.saddr = &tw->tw_rcv_saddr; | ||
515 | entry.daddr = &tw->tw_daddr; | ||
516 | } | ||
517 | entry.sport = tw->tw_num; | ||
518 | entry.dport = ntohs(tw->tw_dport); | ||
519 | entry.userlocks = 0; | ||
520 | |||
521 | if (!inet_diag_bc_run(RTA_DATA(bc), RTA_PAYLOAD(bc), &entry)) | ||
522 | return 0; | ||
523 | } | ||
524 | |||
525 | return inet_twsk_diag_fill(tw, skb, r->idiag_ext, | ||
526 | NETLINK_CB(cb->skb).pid, | ||
527 | cb->nlh->nlmsg_seq, NLM_F_MULTI, cb->nlh); | ||
449 | } | 528 | } |
450 | 529 | ||
451 | static int inet_diag_fill_req(struct sk_buff *skb, struct sock *sk, | 530 | static int inet_diag_fill_req(struct sk_buff *skb, struct sock *sk, |
452 | struct request_sock *req, | 531 | struct request_sock *req, u32 pid, u32 seq, |
453 | u32 pid, u32 seq, | 532 | const struct nlmsghdr *unlh) |
454 | const struct nlmsghdr *unlh) | ||
455 | { | 533 | { |
456 | const struct inet_request_sock *ireq = inet_rsk(req); | 534 | const struct inet_request_sock *ireq = inet_rsk(req); |
457 | struct inet_sock *inet = inet_sk(sk); | 535 | struct inet_sock *inet = inet_sk(sk); |
@@ -504,7 +582,7 @@ nlmsg_failure: | |||
504 | } | 582 | } |
505 | 583 | ||
506 | static int inet_diag_dump_reqs(struct sk_buff *skb, struct sock *sk, | 584 | static int inet_diag_dump_reqs(struct sk_buff *skb, struct sock *sk, |
507 | struct netlink_callback *cb) | 585 | struct netlink_callback *cb) |
508 | { | 586 | { |
509 | struct inet_diag_entry entry; | 587 | struct inet_diag_entry entry; |
510 | struct inet_diag_req *r = NLMSG_DATA(cb->nlh); | 588 | struct inet_diag_req *r = NLMSG_DATA(cb->nlh); |
@@ -556,7 +634,7 @@ static int inet_diag_dump_reqs(struct sk_buff *skb, struct sock *sk, | |||
556 | inet6_rsk(req)->loc_addr.s6_addr32 : | 634 | inet6_rsk(req)->loc_addr.s6_addr32 : |
557 | #endif | 635 | #endif |
558 | &ireq->loc_addr; | 636 | &ireq->loc_addr; |
559 | entry.daddr = | 637 | entry.daddr = |
560 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) | 638 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) |
561 | (entry.family == AF_INET6) ? | 639 | (entry.family == AF_INET6) ? |
562 | inet6_rsk(req)->rmt_addr.s6_addr32 : | 640 | inet6_rsk(req)->rmt_addr.s6_addr32 : |
@@ -599,7 +677,7 @@ static int inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
599 | handler = inet_diag_table[cb->nlh->nlmsg_type]; | 677 | handler = inet_diag_table[cb->nlh->nlmsg_type]; |
600 | BUG_ON(handler == NULL); | 678 | BUG_ON(handler == NULL); |
601 | hashinfo = handler->idiag_hashinfo; | 679 | hashinfo = handler->idiag_hashinfo; |
602 | 680 | ||
603 | s_i = cb->args[1]; | 681 | s_i = cb->args[1]; |
604 | s_num = num = cb->args[2]; | 682 | s_num = num = cb->args[2]; |
605 | 683 | ||
@@ -630,7 +708,7 @@ static int inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
630 | cb->args[3] > 0) | 708 | cb->args[3] > 0) |
631 | goto syn_recv; | 709 | goto syn_recv; |
632 | 710 | ||
633 | if (inet_diag_dump_sock(skb, sk, cb) < 0) { | 711 | if (inet_csk_diag_dump(sk, skb, cb) < 0) { |
634 | inet_listen_unlock(hashinfo); | 712 | inet_listen_unlock(hashinfo); |
635 | goto done; | 713 | goto done; |
636 | } | 714 | } |
@@ -672,7 +750,6 @@ skip_listen_ht: | |||
672 | s_num = 0; | 750 | s_num = 0; |
673 | 751 | ||
674 | read_lock_bh(&head->lock); | 752 | read_lock_bh(&head->lock); |
675 | |||
676 | num = 0; | 753 | num = 0; |
677 | sk_for_each(sk, node, &head->chain) { | 754 | sk_for_each(sk, node, &head->chain) { |
678 | struct inet_sock *inet = inet_sk(sk); | 755 | struct inet_sock *inet = inet_sk(sk); |
@@ -684,9 +761,10 @@ skip_listen_ht: | |||
684 | if (r->id.idiag_sport != inet->sport && | 761 | if (r->id.idiag_sport != inet->sport && |
685 | r->id.idiag_sport) | 762 | r->id.idiag_sport) |
686 | goto next_normal; | 763 | goto next_normal; |
687 | if (r->id.idiag_dport != inet->dport && r->id.idiag_dport) | 764 | if (r->id.idiag_dport != inet->dport && |
765 | r->id.idiag_dport) | ||
688 | goto next_normal; | 766 | goto next_normal; |
689 | if (inet_diag_dump_sock(skb, sk, cb) < 0) { | 767 | if (inet_csk_diag_dump(sk, skb, cb) < 0) { |
690 | read_unlock_bh(&head->lock); | 768 | read_unlock_bh(&head->lock); |
691 | goto done; | 769 | goto done; |
692 | } | 770 | } |
@@ -695,19 +773,20 @@ next_normal: | |||
695 | } | 773 | } |
696 | 774 | ||
697 | if (r->idiag_states & TCPF_TIME_WAIT) { | 775 | if (r->idiag_states & TCPF_TIME_WAIT) { |
698 | sk_for_each(sk, node, | 776 | struct inet_timewait_sock *tw; |
777 | |||
778 | inet_twsk_for_each(tw, node, | ||
699 | &hashinfo->ehash[i + hashinfo->ehash_size].chain) { | 779 | &hashinfo->ehash[i + hashinfo->ehash_size].chain) { |
700 | struct inet_sock *inet = inet_sk(sk); | ||
701 | 780 | ||
702 | if (num < s_num) | 781 | if (num < s_num) |
703 | goto next_dying; | 782 | goto next_dying; |
704 | if (r->id.idiag_sport != inet->sport && | 783 | if (r->id.idiag_sport != tw->tw_sport && |
705 | r->id.idiag_sport) | 784 | r->id.idiag_sport) |
706 | goto next_dying; | 785 | goto next_dying; |
707 | if (r->id.idiag_dport != inet->dport && | 786 | if (r->id.idiag_dport != tw->tw_dport && |
708 | r->id.idiag_dport) | 787 | r->id.idiag_dport) |
709 | goto next_dying; | 788 | goto next_dying; |
710 | if (inet_diag_dump_sock(skb, sk, cb) < 0) { | 789 | if (inet_twsk_diag_dump(tw, skb, cb) < 0) { |
711 | read_unlock_bh(&head->lock); | 790 | read_unlock_bh(&head->lock); |
712 | goto done; | 791 | goto done; |
713 | } | 792 | } |
@@ -724,8 +803,7 @@ done: | |||
724 | return skb->len; | 803 | return skb->len; |
725 | } | 804 | } |
726 | 805 | ||
727 | static __inline__ int | 806 | static inline int inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) |
728 | inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | ||
729 | { | 807 | { |
730 | if (!(nlh->nlmsg_flags&NLM_F_REQUEST)) | 808 | if (!(nlh->nlmsg_flags&NLM_F_REQUEST)) |
731 | return 0; | 809 | return 0; |
@@ -755,9 +833,8 @@ inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
755 | } | 833 | } |
756 | return netlink_dump_start(idiagnl, skb, nlh, | 834 | return netlink_dump_start(idiagnl, skb, nlh, |
757 | inet_diag_dump, NULL); | 835 | inet_diag_dump, NULL); |
758 | } else { | 836 | } else |
759 | return inet_diag_get_exact(skb, nlh); | 837 | return inet_diag_get_exact(skb, nlh); |
760 | } | ||
761 | 838 | ||
762 | err_inval: | 839 | err_inval: |
763 | return -EINVAL; | 840 | return -EINVAL; |
@@ -766,15 +843,15 @@ err_inval: | |||
766 | 843 | ||
767 | static inline void inet_diag_rcv_skb(struct sk_buff *skb) | 844 | static inline void inet_diag_rcv_skb(struct sk_buff *skb) |
768 | { | 845 | { |
769 | int err; | ||
770 | struct nlmsghdr * nlh; | ||
771 | |||
772 | if (skb->len >= NLMSG_SPACE(0)) { | 846 | if (skb->len >= NLMSG_SPACE(0)) { |
773 | nlh = (struct nlmsghdr *)skb->data; | 847 | int err; |
774 | if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len) | 848 | struct nlmsghdr *nlh = (struct nlmsghdr *)skb->data; |
849 | |||
850 | if (nlh->nlmsg_len < sizeof(*nlh) || | ||
851 | skb->len < nlh->nlmsg_len) | ||
775 | return; | 852 | return; |
776 | err = inet_diag_rcv_msg(skb, nlh); | 853 | err = inet_diag_rcv_msg(skb, nlh); |
777 | if (err || nlh->nlmsg_flags & NLM_F_ACK) | 854 | if (err || nlh->nlmsg_flags & NLM_F_ACK) |
778 | netlink_ack(skb, nlh, err); | 855 | netlink_ack(skb, nlh, err); |
779 | } | 856 | } |
780 | } | 857 | } |
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c index ce5fe3f74a3d..2160874ce7aa 100644 --- a/net/ipv4/inetpeer.c +++ b/net/ipv4/inetpeer.c | |||
@@ -304,8 +304,7 @@ static void unlink_from_pool(struct inet_peer *p) | |||
304 | /* look for a node to insert instead of p */ | 304 | /* look for a node to insert instead of p */ |
305 | struct inet_peer *t; | 305 | struct inet_peer *t; |
306 | t = lookup_rightempty(p); | 306 | t = lookup_rightempty(p); |
307 | if (*stackptr[-1] != t) | 307 | BUG_ON(*stackptr[-1] != t); |
308 | BUG(); | ||
309 | **--stackptr = t->avl_left; | 308 | **--stackptr = t->avl_left; |
310 | /* t is removed, t->v4daddr > x->v4daddr for any | 309 | /* t is removed, t->v4daddr > x->v4daddr for any |
311 | * x in p->avl_left subtree. | 310 | * x in p->avl_left subtree. |
@@ -314,8 +313,7 @@ static void unlink_from_pool(struct inet_peer *p) | |||
314 | t->avl_left = p->avl_left; | 313 | t->avl_left = p->avl_left; |
315 | t->avl_right = p->avl_right; | 314 | t->avl_right = p->avl_right; |
316 | t->avl_height = p->avl_height; | 315 | t->avl_height = p->avl_height; |
317 | if (delp[1] != &p->avl_left) | 316 | BUG_ON(delp[1] != &p->avl_left); |
318 | BUG(); | ||
319 | delp[1] = &t->avl_left; /* was &p->avl_left */ | 317 | delp[1] = &t->avl_left; /* was &p->avl_left */ |
320 | } | 318 | } |
321 | peer_avl_rebalance(stack, stackptr); | 319 | peer_avl_rebalance(stack, stackptr); |
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index de16e944777f..1e93eafa7af1 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
@@ -188,7 +188,7 @@ static struct ip_tunnel * ipgre_tunnel_lookup(u32 remote, u32 local, u32 key) | |||
188 | } | 188 | } |
189 | 189 | ||
190 | if (ipgre_fb_tunnel_dev->flags&IFF_UP) | 190 | if (ipgre_fb_tunnel_dev->flags&IFF_UP) |
191 | return ipgre_fb_tunnel_dev->priv; | 191 | return netdev_priv(ipgre_fb_tunnel_dev); |
192 | return NULL; | 192 | return NULL; |
193 | } | 193 | } |
194 | 194 | ||
@@ -278,7 +278,7 @@ static struct ip_tunnel * ipgre_tunnel_locate(struct ip_tunnel_parm *parms, int | |||
278 | return NULL; | 278 | return NULL; |
279 | 279 | ||
280 | dev->init = ipgre_tunnel_init; | 280 | dev->init = ipgre_tunnel_init; |
281 | nt = dev->priv; | 281 | nt = netdev_priv(dev); |
282 | nt->parms = *parms; | 282 | nt->parms = *parms; |
283 | 283 | ||
284 | if (register_netdevice(dev) < 0) { | 284 | if (register_netdevice(dev) < 0) { |
@@ -286,9 +286,6 @@ static struct ip_tunnel * ipgre_tunnel_locate(struct ip_tunnel_parm *parms, int | |||
286 | goto failed; | 286 | goto failed; |
287 | } | 287 | } |
288 | 288 | ||
289 | nt = dev->priv; | ||
290 | nt->parms = *parms; | ||
291 | |||
292 | dev_hold(dev); | 289 | dev_hold(dev); |
293 | ipgre_tunnel_link(nt); | 290 | ipgre_tunnel_link(nt); |
294 | return nt; | 291 | return nt; |
@@ -299,7 +296,7 @@ failed: | |||
299 | 296 | ||
300 | static void ipgre_tunnel_uninit(struct net_device *dev) | 297 | static void ipgre_tunnel_uninit(struct net_device *dev) |
301 | { | 298 | { |
302 | ipgre_tunnel_unlink((struct ip_tunnel*)dev->priv); | 299 | ipgre_tunnel_unlink(netdev_priv(dev)); |
303 | dev_put(dev); | 300 | dev_put(dev); |
304 | } | 301 | } |
305 | 302 | ||
@@ -518,7 +515,7 @@ out: | |||
518 | skb2->dst->ops->update_pmtu(skb2->dst, rel_info); | 515 | skb2->dst->ops->update_pmtu(skb2->dst, rel_info); |
519 | rel_info = htonl(rel_info); | 516 | rel_info = htonl(rel_info); |
520 | } else if (type == ICMP_TIME_EXCEEDED) { | 517 | } else if (type == ICMP_TIME_EXCEEDED) { |
521 | struct ip_tunnel *t = (struct ip_tunnel*)skb2->dev->priv; | 518 | struct ip_tunnel *t = netdev_priv(skb2->dev); |
522 | if (t->parms.iph.ttl) { | 519 | if (t->parms.iph.ttl) { |
523 | rel_type = ICMP_DEST_UNREACH; | 520 | rel_type = ICMP_DEST_UNREACH; |
524 | rel_code = ICMP_HOST_UNREACH; | 521 | rel_code = ICMP_HOST_UNREACH; |
@@ -669,7 +666,7 @@ drop_nolock: | |||
669 | 666 | ||
670 | static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | 667 | static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) |
671 | { | 668 | { |
672 | struct ip_tunnel *tunnel = (struct ip_tunnel*)dev->priv; | 669 | struct ip_tunnel *tunnel = netdev_priv(dev); |
673 | struct net_device_stats *stats = &tunnel->stat; | 670 | struct net_device_stats *stats = &tunnel->stat; |
674 | struct iphdr *old_iph = skb->nh.iph; | 671 | struct iphdr *old_iph = skb->nh.iph; |
675 | struct iphdr *tiph; | 672 | struct iphdr *tiph; |
@@ -915,7 +912,7 @@ ipgre_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
915 | t = ipgre_tunnel_locate(&p, 0); | 912 | t = ipgre_tunnel_locate(&p, 0); |
916 | } | 913 | } |
917 | if (t == NULL) | 914 | if (t == NULL) |
918 | t = (struct ip_tunnel*)dev->priv; | 915 | t = netdev_priv(dev); |
919 | memcpy(&p, &t->parms, sizeof(p)); | 916 | memcpy(&p, &t->parms, sizeof(p)); |
920 | if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p))) | 917 | if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p))) |
921 | err = -EFAULT; | 918 | err = -EFAULT; |
@@ -955,7 +952,7 @@ ipgre_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
955 | } else { | 952 | } else { |
956 | unsigned nflags=0; | 953 | unsigned nflags=0; |
957 | 954 | ||
958 | t = (struct ip_tunnel*)dev->priv; | 955 | t = netdev_priv(dev); |
959 | 956 | ||
960 | if (MULTICAST(p.iph.daddr)) | 957 | if (MULTICAST(p.iph.daddr)) |
961 | nflags = IFF_BROADCAST; | 958 | nflags = IFF_BROADCAST; |
@@ -1004,7 +1001,7 @@ ipgre_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
1004 | if ((t = ipgre_tunnel_locate(&p, 0)) == NULL) | 1001 | if ((t = ipgre_tunnel_locate(&p, 0)) == NULL) |
1005 | goto done; | 1002 | goto done; |
1006 | err = -EPERM; | 1003 | err = -EPERM; |
1007 | if (t == ipgre_fb_tunnel_dev->priv) | 1004 | if (t == netdev_priv(ipgre_fb_tunnel_dev)) |
1008 | goto done; | 1005 | goto done; |
1009 | dev = t->dev; | 1006 | dev = t->dev; |
1010 | } | 1007 | } |
@@ -1021,12 +1018,12 @@ done: | |||
1021 | 1018 | ||
1022 | static struct net_device_stats *ipgre_tunnel_get_stats(struct net_device *dev) | 1019 | static struct net_device_stats *ipgre_tunnel_get_stats(struct net_device *dev) |
1023 | { | 1020 | { |
1024 | return &(((struct ip_tunnel*)dev->priv)->stat); | 1021 | return &(((struct ip_tunnel*)netdev_priv(dev))->stat); |
1025 | } | 1022 | } |
1026 | 1023 | ||
1027 | static int ipgre_tunnel_change_mtu(struct net_device *dev, int new_mtu) | 1024 | static int ipgre_tunnel_change_mtu(struct net_device *dev, int new_mtu) |
1028 | { | 1025 | { |
1029 | struct ip_tunnel *tunnel = (struct ip_tunnel*)dev->priv; | 1026 | struct ip_tunnel *tunnel = netdev_priv(dev); |
1030 | if (new_mtu < 68 || new_mtu > 0xFFF8 - tunnel->hlen) | 1027 | if (new_mtu < 68 || new_mtu > 0xFFF8 - tunnel->hlen) |
1031 | return -EINVAL; | 1028 | return -EINVAL; |
1032 | dev->mtu = new_mtu; | 1029 | dev->mtu = new_mtu; |
@@ -1066,7 +1063,7 @@ static int ipgre_tunnel_change_mtu(struct net_device *dev, int new_mtu) | |||
1066 | static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, | 1063 | static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, |
1067 | void *daddr, void *saddr, unsigned len) | 1064 | void *daddr, void *saddr, unsigned len) |
1068 | { | 1065 | { |
1069 | struct ip_tunnel *t = (struct ip_tunnel*)dev->priv; | 1066 | struct ip_tunnel *t = netdev_priv(dev); |
1070 | struct iphdr *iph = (struct iphdr *)skb_push(skb, t->hlen); | 1067 | struct iphdr *iph = (struct iphdr *)skb_push(skb, t->hlen); |
1071 | u16 *p = (u16*)(iph+1); | 1068 | u16 *p = (u16*)(iph+1); |
1072 | 1069 | ||
@@ -1093,7 +1090,7 @@ static int ipgre_header(struct sk_buff *skb, struct net_device *dev, unsigned sh | |||
1093 | 1090 | ||
1094 | static int ipgre_open(struct net_device *dev) | 1091 | static int ipgre_open(struct net_device *dev) |
1095 | { | 1092 | { |
1096 | struct ip_tunnel *t = (struct ip_tunnel*)dev->priv; | 1093 | struct ip_tunnel *t = netdev_priv(dev); |
1097 | 1094 | ||
1098 | if (MULTICAST(t->parms.iph.daddr)) { | 1095 | if (MULTICAST(t->parms.iph.daddr)) { |
1099 | struct flowi fl = { .oif = t->parms.link, | 1096 | struct flowi fl = { .oif = t->parms.link, |
@@ -1117,7 +1114,7 @@ static int ipgre_open(struct net_device *dev) | |||
1117 | 1114 | ||
1118 | static int ipgre_close(struct net_device *dev) | 1115 | static int ipgre_close(struct net_device *dev) |
1119 | { | 1116 | { |
1120 | struct ip_tunnel *t = (struct ip_tunnel*)dev->priv; | 1117 | struct ip_tunnel *t = netdev_priv(dev); |
1121 | if (MULTICAST(t->parms.iph.daddr) && t->mlink) { | 1118 | if (MULTICAST(t->parms.iph.daddr) && t->mlink) { |
1122 | struct in_device *in_dev = inetdev_by_index(t->mlink); | 1119 | struct in_device *in_dev = inetdev_by_index(t->mlink); |
1123 | if (in_dev) { | 1120 | if (in_dev) { |
@@ -1157,7 +1154,7 @@ static int ipgre_tunnel_init(struct net_device *dev) | |||
1157 | int mtu = ETH_DATA_LEN; | 1154 | int mtu = ETH_DATA_LEN; |
1158 | int addend = sizeof(struct iphdr) + 4; | 1155 | int addend = sizeof(struct iphdr) + 4; |
1159 | 1156 | ||
1160 | tunnel = (struct ip_tunnel*)dev->priv; | 1157 | tunnel = netdev_priv(dev); |
1161 | iph = &tunnel->parms.iph; | 1158 | iph = &tunnel->parms.iph; |
1162 | 1159 | ||
1163 | tunnel->dev = dev; | 1160 | tunnel->dev = dev; |
@@ -1221,7 +1218,7 @@ static int ipgre_tunnel_init(struct net_device *dev) | |||
1221 | 1218 | ||
1222 | static int __init ipgre_fb_tunnel_init(struct net_device *dev) | 1219 | static int __init ipgre_fb_tunnel_init(struct net_device *dev) |
1223 | { | 1220 | { |
1224 | struct ip_tunnel *tunnel = (struct ip_tunnel*)dev->priv; | 1221 | struct ip_tunnel *tunnel = netdev_priv(dev); |
1225 | struct iphdr *iph = &tunnel->parms.iph; | 1222 | struct iphdr *iph = &tunnel->parms.iph; |
1226 | 1223 | ||
1227 | tunnel->dev = dev; | 1224 | tunnel->dev = dev; |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index c2169b47ddfd..3324fbfe528a 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -69,6 +69,7 @@ | |||
69 | #include <net/ip.h> | 69 | #include <net/ip.h> |
70 | #include <net/protocol.h> | 70 | #include <net/protocol.h> |
71 | #include <net/route.h> | 71 | #include <net/route.h> |
72 | #include <net/xfrm.h> | ||
72 | #include <linux/skbuff.h> | 73 | #include <linux/skbuff.h> |
73 | #include <net/sock.h> | 74 | #include <net/sock.h> |
74 | #include <net/arp.h> | 75 | #include <net/arp.h> |
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index bbd85f5ec985..bc5ca23b2646 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c | |||
@@ -244,7 +244,7 @@ static struct ip_tunnel * ipip_tunnel_locate(struct ip_tunnel_parm *parms, int c | |||
244 | if (dev == NULL) | 244 | if (dev == NULL) |
245 | return NULL; | 245 | return NULL; |
246 | 246 | ||
247 | nt = dev->priv; | 247 | nt = netdev_priv(dev); |
248 | SET_MODULE_OWNER(dev); | 248 | SET_MODULE_OWNER(dev); |
249 | dev->init = ipip_tunnel_init; | 249 | dev->init = ipip_tunnel_init; |
250 | nt->parms = *parms; | 250 | nt->parms = *parms; |
@@ -269,7 +269,7 @@ static void ipip_tunnel_uninit(struct net_device *dev) | |||
269 | tunnels_wc[0] = NULL; | 269 | tunnels_wc[0] = NULL; |
270 | write_unlock_bh(&ipip_lock); | 270 | write_unlock_bh(&ipip_lock); |
271 | } else | 271 | } else |
272 | ipip_tunnel_unlink((struct ip_tunnel*)dev->priv); | 272 | ipip_tunnel_unlink(netdev_priv(dev)); |
273 | dev_put(dev); | 273 | dev_put(dev); |
274 | } | 274 | } |
275 | 275 | ||
@@ -443,7 +443,7 @@ out: | |||
443 | skb2->dst->ops->update_pmtu(skb2->dst, rel_info); | 443 | skb2->dst->ops->update_pmtu(skb2->dst, rel_info); |
444 | rel_info = htonl(rel_info); | 444 | rel_info = htonl(rel_info); |
445 | } else if (type == ICMP_TIME_EXCEEDED) { | 445 | } else if (type == ICMP_TIME_EXCEEDED) { |
446 | struct ip_tunnel *t = (struct ip_tunnel*)skb2->dev->priv; | 446 | struct ip_tunnel *t = netdev_priv(skb2->dev); |
447 | if (t->parms.iph.ttl) { | 447 | if (t->parms.iph.ttl) { |
448 | rel_type = ICMP_DEST_UNREACH; | 448 | rel_type = ICMP_DEST_UNREACH; |
449 | rel_code = ICMP_HOST_UNREACH; | 449 | rel_code = ICMP_HOST_UNREACH; |
@@ -514,7 +514,7 @@ out: | |||
514 | 514 | ||
515 | static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | 515 | static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) |
516 | { | 516 | { |
517 | struct ip_tunnel *tunnel = (struct ip_tunnel*)dev->priv; | 517 | struct ip_tunnel *tunnel = netdev_priv(dev); |
518 | struct net_device_stats *stats = &tunnel->stat; | 518 | struct net_device_stats *stats = &tunnel->stat; |
519 | struct iphdr *tiph = &tunnel->parms.iph; | 519 | struct iphdr *tiph = &tunnel->parms.iph; |
520 | u8 tos = tunnel->parms.iph.tos; | 520 | u8 tos = tunnel->parms.iph.tos; |
@@ -674,7 +674,7 @@ ipip_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
674 | t = ipip_tunnel_locate(&p, 0); | 674 | t = ipip_tunnel_locate(&p, 0); |
675 | } | 675 | } |
676 | if (t == NULL) | 676 | if (t == NULL) |
677 | t = (struct ip_tunnel*)dev->priv; | 677 | t = netdev_priv(dev); |
678 | memcpy(&p, &t->parms, sizeof(p)); | 678 | memcpy(&p, &t->parms, sizeof(p)); |
679 | if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p))) | 679 | if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p))) |
680 | err = -EFAULT; | 680 | err = -EFAULT; |
@@ -711,7 +711,7 @@ ipip_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
711 | err = -EINVAL; | 711 | err = -EINVAL; |
712 | break; | 712 | break; |
713 | } | 713 | } |
714 | t = (struct ip_tunnel*)dev->priv; | 714 | t = netdev_priv(dev); |
715 | ipip_tunnel_unlink(t); | 715 | ipip_tunnel_unlink(t); |
716 | t->parms.iph.saddr = p.iph.saddr; | 716 | t->parms.iph.saddr = p.iph.saddr; |
717 | t->parms.iph.daddr = p.iph.daddr; | 717 | t->parms.iph.daddr = p.iph.daddr; |
@@ -765,7 +765,7 @@ done: | |||
765 | 765 | ||
766 | static struct net_device_stats *ipip_tunnel_get_stats(struct net_device *dev) | 766 | static struct net_device_stats *ipip_tunnel_get_stats(struct net_device *dev) |
767 | { | 767 | { |
768 | return &(((struct ip_tunnel*)dev->priv)->stat); | 768 | return &(((struct ip_tunnel*)netdev_priv(dev))->stat); |
769 | } | 769 | } |
770 | 770 | ||
771 | static int ipip_tunnel_change_mtu(struct net_device *dev, int new_mtu) | 771 | static int ipip_tunnel_change_mtu(struct net_device *dev, int new_mtu) |
@@ -800,7 +800,7 @@ static int ipip_tunnel_init(struct net_device *dev) | |||
800 | struct ip_tunnel *tunnel; | 800 | struct ip_tunnel *tunnel; |
801 | struct iphdr *iph; | 801 | struct iphdr *iph; |
802 | 802 | ||
803 | tunnel = (struct ip_tunnel*)dev->priv; | 803 | tunnel = netdev_priv(dev); |
804 | iph = &tunnel->parms.iph; | 804 | iph = &tunnel->parms.iph; |
805 | 805 | ||
806 | tunnel->dev = dev; | 806 | tunnel->dev = dev; |
@@ -838,7 +838,7 @@ static int ipip_tunnel_init(struct net_device *dev) | |||
838 | 838 | ||
839 | static int __init ipip_fb_tunnel_init(struct net_device *dev) | 839 | static int __init ipip_fb_tunnel_init(struct net_device *dev) |
840 | { | 840 | { |
841 | struct ip_tunnel *tunnel = dev->priv; | 841 | struct ip_tunnel *tunnel = netdev_priv(dev); |
842 | struct iphdr *iph = &tunnel->parms.iph; | 842 | struct iphdr *iph = &tunnel->parms.iph; |
843 | 843 | ||
844 | tunnel->dev = dev; | 844 | tunnel->dev = dev; |
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 9a5c0ce7ff35..f58ac9854c3f 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -178,8 +178,8 @@ static int reg_vif_num = -1; | |||
178 | static int reg_vif_xmit(struct sk_buff *skb, struct net_device *dev) | 178 | static int reg_vif_xmit(struct sk_buff *skb, struct net_device *dev) |
179 | { | 179 | { |
180 | read_lock(&mrt_lock); | 180 | read_lock(&mrt_lock); |
181 | ((struct net_device_stats*)dev->priv)->tx_bytes += skb->len; | 181 | ((struct net_device_stats*)netdev_priv(dev))->tx_bytes += skb->len; |
182 | ((struct net_device_stats*)dev->priv)->tx_packets++; | 182 | ((struct net_device_stats*)netdev_priv(dev))->tx_packets++; |
183 | ipmr_cache_report(skb, reg_vif_num, IGMPMSG_WHOLEPKT); | 183 | ipmr_cache_report(skb, reg_vif_num, IGMPMSG_WHOLEPKT); |
184 | read_unlock(&mrt_lock); | 184 | read_unlock(&mrt_lock); |
185 | kfree_skb(skb); | 185 | kfree_skb(skb); |
@@ -188,7 +188,7 @@ static int reg_vif_xmit(struct sk_buff *skb, struct net_device *dev) | |||
188 | 188 | ||
189 | static struct net_device_stats *reg_vif_get_stats(struct net_device *dev) | 189 | static struct net_device_stats *reg_vif_get_stats(struct net_device *dev) |
190 | { | 190 | { |
191 | return (struct net_device_stats*)dev->priv; | 191 | return (struct net_device_stats*)netdev_priv(dev); |
192 | } | 192 | } |
193 | 193 | ||
194 | static void reg_vif_setup(struct net_device *dev) | 194 | static void reg_vif_setup(struct net_device *dev) |
@@ -1149,8 +1149,8 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi) | |||
1149 | if (vif->flags & VIFF_REGISTER) { | 1149 | if (vif->flags & VIFF_REGISTER) { |
1150 | vif->pkt_out++; | 1150 | vif->pkt_out++; |
1151 | vif->bytes_out+=skb->len; | 1151 | vif->bytes_out+=skb->len; |
1152 | ((struct net_device_stats*)vif->dev->priv)->tx_bytes += skb->len; | 1152 | ((struct net_device_stats*)netdev_priv(vif->dev))->tx_bytes += skb->len; |
1153 | ((struct net_device_stats*)vif->dev->priv)->tx_packets++; | 1153 | ((struct net_device_stats*)netdev_priv(vif->dev))->tx_packets++; |
1154 | ipmr_cache_report(skb, vifi, IGMPMSG_WHOLEPKT); | 1154 | ipmr_cache_report(skb, vifi, IGMPMSG_WHOLEPKT); |
1155 | kfree_skb(skb); | 1155 | kfree_skb(skb); |
1156 | return; | 1156 | return; |
@@ -1210,8 +1210,8 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi) | |||
1210 | if (vif->flags & VIFF_TUNNEL) { | 1210 | if (vif->flags & VIFF_TUNNEL) { |
1211 | ip_encap(skb, vif->local, vif->remote); | 1211 | ip_encap(skb, vif->local, vif->remote); |
1212 | /* FIXME: extra output firewall step used to be here. --RR */ | 1212 | /* FIXME: extra output firewall step used to be here. --RR */ |
1213 | ((struct ip_tunnel *)vif->dev->priv)->stat.tx_packets++; | 1213 | ((struct ip_tunnel *)netdev_priv(vif->dev))->stat.tx_packets++; |
1214 | ((struct ip_tunnel *)vif->dev->priv)->stat.tx_bytes+=skb->len; | 1214 | ((struct ip_tunnel *)netdev_priv(vif->dev))->stat.tx_bytes+=skb->len; |
1215 | } | 1215 | } |
1216 | 1216 | ||
1217 | IPCB(skb)->flags |= IPSKB_FORWARDED; | 1217 | IPCB(skb)->flags |= IPSKB_FORWARDED; |
@@ -1467,8 +1467,8 @@ int pim_rcv_v1(struct sk_buff * skb) | |||
1467 | skb->pkt_type = PACKET_HOST; | 1467 | skb->pkt_type = PACKET_HOST; |
1468 | dst_release(skb->dst); | 1468 | dst_release(skb->dst); |
1469 | skb->dst = NULL; | 1469 | skb->dst = NULL; |
1470 | ((struct net_device_stats*)reg_dev->priv)->rx_bytes += skb->len; | 1470 | ((struct net_device_stats*)netdev_priv(reg_dev))->rx_bytes += skb->len; |
1471 | ((struct net_device_stats*)reg_dev->priv)->rx_packets++; | 1471 | ((struct net_device_stats*)netdev_priv(reg_dev))->rx_packets++; |
1472 | nf_reset(skb); | 1472 | nf_reset(skb); |
1473 | netif_rx(skb); | 1473 | netif_rx(skb); |
1474 | dev_put(reg_dev); | 1474 | dev_put(reg_dev); |
@@ -1522,8 +1522,8 @@ static int pim_rcv(struct sk_buff * skb) | |||
1522 | skb->ip_summed = 0; | 1522 | skb->ip_summed = 0; |
1523 | skb->pkt_type = PACKET_HOST; | 1523 | skb->pkt_type = PACKET_HOST; |
1524 | dst_release(skb->dst); | 1524 | dst_release(skb->dst); |
1525 | ((struct net_device_stats*)reg_dev->priv)->rx_bytes += skb->len; | 1525 | ((struct net_device_stats*)netdev_priv(reg_dev))->rx_bytes += skb->len; |
1526 | ((struct net_device_stats*)reg_dev->priv)->rx_packets++; | 1526 | ((struct net_device_stats*)netdev_priv(reg_dev))->rx_packets++; |
1527 | skb->dst = NULL; | 1527 | skb->dst = NULL; |
1528 | nf_reset(skb); | 1528 | nf_reset(skb); |
1529 | netif_rx(skb); | 1529 | netif_rx(skb); |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 0a461232329f..a97ed5416c28 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -3347,7 +3347,7 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, | |||
3347 | int offset = start - TCP_SKB_CB(skb)->seq; | 3347 | int offset = start - TCP_SKB_CB(skb)->seq; |
3348 | int size = TCP_SKB_CB(skb)->end_seq - start; | 3348 | int size = TCP_SKB_CB(skb)->end_seq - start; |
3349 | 3349 | ||
3350 | if (offset < 0) BUG(); | 3350 | BUG_ON(offset < 0); |
3351 | if (size > 0) { | 3351 | if (size > 0) { |
3352 | size = min(copy, size); | 3352 | size = min(copy, size); |
3353 | if (skb_copy_bits(skb, offset, skb_put(nskb, size), size)) | 3353 | if (skb_copy_bits(skb, offset, skb_put(nskb, size), size)) |