diff options
Diffstat (limited to 'net')
30 files changed, 220 insertions, 139 deletions
diff --git a/net/9p/Kconfig b/net/9p/Kconfig index 0663f99e977..7ed75c7bd5d 100644 --- a/net/9p/Kconfig +++ b/net/9p/Kconfig | |||
| @@ -23,7 +23,7 @@ config NET_9P_VIRTIO | |||
| 23 | guest partitions and a host partition. | 23 | guest partitions and a host partition. |
| 24 | 24 | ||
| 25 | config NET_9P_RDMA | 25 | config NET_9P_RDMA |
| 26 | depends on INET && INFINIBAND && EXPERIMENTAL | 26 | depends on INET && INFINIBAND && INFINIBAND_ADDR_TRANS && EXPERIMENTAL |
| 27 | tristate "9P RDMA Transport (Experimental)" | 27 | tristate "9P RDMA Transport (Experimental)" |
| 28 | help | 28 | help |
| 29 | This builds support for an RDMA transport. | 29 | This builds support for an RDMA transport. |
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index a65e43a17fb..cf754ace0b7 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c | |||
| @@ -58,11 +58,11 @@ static struct ctl_table_header *brnf_sysctl_header; | |||
| 58 | static int brnf_call_iptables __read_mostly = 1; | 58 | static int brnf_call_iptables __read_mostly = 1; |
| 59 | static int brnf_call_ip6tables __read_mostly = 1; | 59 | static int brnf_call_ip6tables __read_mostly = 1; |
| 60 | static int brnf_call_arptables __read_mostly = 1; | 60 | static int brnf_call_arptables __read_mostly = 1; |
| 61 | static int brnf_filter_vlan_tagged __read_mostly = 1; | 61 | static int brnf_filter_vlan_tagged __read_mostly = 0; |
| 62 | static int brnf_filter_pppoe_tagged __read_mostly = 1; | 62 | static int brnf_filter_pppoe_tagged __read_mostly = 0; |
| 63 | #else | 63 | #else |
| 64 | #define brnf_filter_vlan_tagged 1 | 64 | #define brnf_filter_vlan_tagged 0 |
| 65 | #define brnf_filter_pppoe_tagged 1 | 65 | #define brnf_filter_pppoe_tagged 0 |
| 66 | #endif | 66 | #endif |
| 67 | 67 | ||
| 68 | static inline __be16 vlan_proto(const struct sk_buff *skb) | 68 | static inline __be16 vlan_proto(const struct sk_buff *skb) |
| @@ -686,8 +686,11 @@ static unsigned int br_nf_forward_ip(unsigned int hook, struct sk_buff *skb, | |||
| 686 | if (skb->protocol == htons(ETH_P_IP) || IS_VLAN_IP(skb) || | 686 | if (skb->protocol == htons(ETH_P_IP) || IS_VLAN_IP(skb) || |
| 687 | IS_PPPOE_IP(skb)) | 687 | IS_PPPOE_IP(skb)) |
| 688 | pf = PF_INET; | 688 | pf = PF_INET; |
| 689 | else | 689 | else if (skb->protocol == htons(ETH_P_IPV6) || IS_VLAN_IPV6(skb) || |
| 690 | IS_PPPOE_IPV6(skb)) | ||
| 690 | pf = PF_INET6; | 691 | pf = PF_INET6; |
| 692 | else | ||
| 693 | return NF_ACCEPT; | ||
| 691 | 694 | ||
| 692 | nf_bridge_pull_encap_header(skb); | 695 | nf_bridge_pull_encap_header(skb); |
| 693 | 696 | ||
| @@ -828,8 +831,11 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff *skb, | |||
| 828 | if (skb->protocol == htons(ETH_P_IP) || IS_VLAN_IP(skb) || | 831 | if (skb->protocol == htons(ETH_P_IP) || IS_VLAN_IP(skb) || |
| 829 | IS_PPPOE_IP(skb)) | 832 | IS_PPPOE_IP(skb)) |
| 830 | pf = PF_INET; | 833 | pf = PF_INET; |
| 831 | else | 834 | else if (skb->protocol == htons(ETH_P_IPV6) || IS_VLAN_IPV6(skb) || |
| 835 | IS_PPPOE_IPV6(skb)) | ||
| 832 | pf = PF_INET6; | 836 | pf = PF_INET6; |
| 837 | else | ||
| 838 | return NF_ACCEPT; | ||
| 833 | 839 | ||
| 834 | #ifdef CONFIG_NETFILTER_DEBUG | 840 | #ifdef CONFIG_NETFILTER_DEBUG |
| 835 | if (skb->dst == NULL) { | 841 | if (skb->dst == NULL) { |
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c index fa108c46e85..820252aee81 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c | |||
| @@ -79,18 +79,19 @@ static inline int ebt_do_match (struct ebt_entry_match *m, | |||
| 79 | { | 79 | { |
| 80 | par->match = m->u.match; | 80 | par->match = m->u.match; |
| 81 | par->matchinfo = m->data; | 81 | par->matchinfo = m->data; |
| 82 | return m->u.match->match(skb, par); | 82 | return m->u.match->match(skb, par) ? EBT_MATCH : EBT_NOMATCH; |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | static inline int ebt_dev_check(char *entry, const struct net_device *device) | 85 | static inline int ebt_dev_check(char *entry, const struct net_device *device) |
| 86 | { | 86 | { |
| 87 | int i = 0; | 87 | int i = 0; |
| 88 | const char *devname = device->name; | 88 | const char *devname; |
| 89 | 89 | ||
| 90 | if (*entry == '\0') | 90 | if (*entry == '\0') |
| 91 | return 0; | 91 | return 0; |
| 92 | if (!device) | 92 | if (!device) |
| 93 | return 1; | 93 | return 1; |
| 94 | devname = device->name; | ||
| 94 | /* 1 is the wildcard token */ | 95 | /* 1 is the wildcard token */ |
| 95 | while (entry[i] != '\0' && entry[i] != 1 && entry[i] == devname[i]) | 96 | while (entry[i] != '\0' && entry[i] != 1 && entry[i] == devname[i]) |
| 96 | i++; | 97 | i++; |
diff --git a/net/can/bcm.c b/net/can/bcm.c index 1649c8ab2c2..b7c7d465113 100644 --- a/net/can/bcm.c +++ b/net/can/bcm.c | |||
| @@ -347,51 +347,54 @@ static void bcm_tx_timeout_tsklet(unsigned long data) | |||
| 347 | struct bcm_op *op = (struct bcm_op *)data; | 347 | struct bcm_op *op = (struct bcm_op *)data; |
| 348 | struct bcm_msg_head msg_head; | 348 | struct bcm_msg_head msg_head; |
| 349 | 349 | ||
| 350 | /* create notification to user */ | ||
| 351 | msg_head.opcode = TX_EXPIRED; | ||
| 352 | msg_head.flags = op->flags; | ||
| 353 | msg_head.count = op->count; | ||
| 354 | msg_head.ival1 = op->ival1; | ||
| 355 | msg_head.ival2 = op->ival2; | ||
| 356 | msg_head.can_id = op->can_id; | ||
| 357 | msg_head.nframes = 0; | ||
| 358 | |||
| 359 | bcm_send_to_user(op, &msg_head, NULL, 0); | ||
| 360 | } | ||
| 361 | |||
| 362 | /* | ||
| 363 | * bcm_tx_timeout_handler - performes cyclic CAN frame transmissions | ||
| 364 | */ | ||
| 365 | static enum hrtimer_restart bcm_tx_timeout_handler(struct hrtimer *hrtimer) | ||
| 366 | { | ||
| 367 | struct bcm_op *op = container_of(hrtimer, struct bcm_op, timer); | ||
| 368 | enum hrtimer_restart ret = HRTIMER_NORESTART; | ||
| 369 | |||
| 370 | if (op->kt_ival1.tv64 && (op->count > 0)) { | 350 | if (op->kt_ival1.tv64 && (op->count > 0)) { |
| 371 | 351 | ||
| 372 | op->count--; | 352 | op->count--; |
| 373 | if (!op->count && (op->flags & TX_COUNTEVT)) | 353 | if (!op->count && (op->flags & TX_COUNTEVT)) { |
| 374 | tasklet_schedule(&op->tsklet); | 354 | |
| 355 | /* create notification to user */ | ||
| 356 | msg_head.opcode = TX_EXPIRED; | ||
| 357 | msg_head.flags = op->flags; | ||
| 358 | msg_head.count = op->count; | ||
| 359 | msg_head.ival1 = op->ival1; | ||
| 360 | msg_head.ival2 = op->ival2; | ||
| 361 | msg_head.can_id = op->can_id; | ||
| 362 | msg_head.nframes = 0; | ||
| 363 | |||
| 364 | bcm_send_to_user(op, &msg_head, NULL, 0); | ||
| 365 | } | ||
| 375 | } | 366 | } |
| 376 | 367 | ||
| 377 | if (op->kt_ival1.tv64 && (op->count > 0)) { | 368 | if (op->kt_ival1.tv64 && (op->count > 0)) { |
| 378 | 369 | ||
| 379 | /* send (next) frame */ | 370 | /* send (next) frame */ |
| 380 | bcm_can_tx(op); | 371 | bcm_can_tx(op); |
| 381 | hrtimer_forward(hrtimer, ktime_get(), op->kt_ival1); | 372 | hrtimer_start(&op->timer, |
| 382 | ret = HRTIMER_RESTART; | 373 | ktime_add(ktime_get(), op->kt_ival1), |
| 374 | HRTIMER_MODE_ABS); | ||
| 383 | 375 | ||
| 384 | } else { | 376 | } else { |
| 385 | if (op->kt_ival2.tv64) { | 377 | if (op->kt_ival2.tv64) { |
| 386 | 378 | ||
| 387 | /* send (next) frame */ | 379 | /* send (next) frame */ |
| 388 | bcm_can_tx(op); | 380 | bcm_can_tx(op); |
| 389 | hrtimer_forward(hrtimer, ktime_get(), op->kt_ival2); | 381 | hrtimer_start(&op->timer, |
| 390 | ret = HRTIMER_RESTART; | 382 | ktime_add(ktime_get(), op->kt_ival2), |
| 383 | HRTIMER_MODE_ABS); | ||
| 391 | } | 384 | } |
| 392 | } | 385 | } |
| 386 | } | ||
| 393 | 387 | ||
| 394 | return ret; | 388 | /* |
| 389 | * bcm_tx_timeout_handler - performes cyclic CAN frame transmissions | ||
| 390 | */ | ||
| 391 | static enum hrtimer_restart bcm_tx_timeout_handler(struct hrtimer *hrtimer) | ||
| 392 | { | ||
| 393 | struct bcm_op *op = container_of(hrtimer, struct bcm_op, timer); | ||
| 394 | |||
| 395 | tasklet_schedule(&op->tsklet); | ||
| 396 | |||
| 397 | return HRTIMER_NORESTART; | ||
| 395 | } | 398 | } |
| 396 | 399 | ||
| 397 | /* | 400 | /* |
diff --git a/net/core/dev.c b/net/core/dev.c index 5f736f1ceea..8d675975d85 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -1088,6 +1088,11 @@ int dev_open(struct net_device *dev) | |||
| 1088 | dev->flags |= IFF_UP; | 1088 | dev->flags |= IFF_UP; |
| 1089 | 1089 | ||
| 1090 | /* | 1090 | /* |
| 1091 | * Enable NET_DMA | ||
| 1092 | */ | ||
| 1093 | dmaengine_get(); | ||
| 1094 | |||
| 1095 | /* | ||
| 1091 | * Initialize multicasting status | 1096 | * Initialize multicasting status |
| 1092 | */ | 1097 | */ |
| 1093 | dev_set_rx_mode(dev); | 1098 | dev_set_rx_mode(dev); |
| @@ -1164,6 +1169,11 @@ int dev_close(struct net_device *dev) | |||
| 1164 | */ | 1169 | */ |
| 1165 | call_netdevice_notifiers(NETDEV_DOWN, dev); | 1170 | call_netdevice_notifiers(NETDEV_DOWN, dev); |
| 1166 | 1171 | ||
| 1172 | /* | ||
| 1173 | * Shutdown NET_DMA | ||
| 1174 | */ | ||
| 1175 | dmaengine_put(); | ||
| 1176 | |||
| 1167 | return 0; | 1177 | return 0; |
| 1168 | } | 1178 | } |
| 1169 | 1179 | ||
| @@ -2382,6 +2392,9 @@ int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) | |||
| 2382 | if (!(skb->dev->features & NETIF_F_GRO)) | 2392 | if (!(skb->dev->features & NETIF_F_GRO)) |
| 2383 | goto normal; | 2393 | goto normal; |
| 2384 | 2394 | ||
| 2395 | if (skb_is_gso(skb) || skb_shinfo(skb)->frag_list) | ||
| 2396 | goto normal; | ||
| 2397 | |||
| 2385 | rcu_read_lock(); | 2398 | rcu_read_lock(); |
| 2386 | list_for_each_entry_rcu(ptype, head, list) { | 2399 | list_for_each_entry_rcu(ptype, head, list) { |
| 2387 | struct sk_buff *p; | 2400 | struct sk_buff *p; |
| @@ -2478,12 +2491,6 @@ EXPORT_SYMBOL(napi_gro_receive); | |||
| 2478 | 2491 | ||
| 2479 | void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb) | 2492 | void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb) |
| 2480 | { | 2493 | { |
| 2481 | skb_shinfo(skb)->nr_frags = 0; | ||
| 2482 | |||
| 2483 | skb->len -= skb->data_len; | ||
| 2484 | skb->truesize -= skb->data_len; | ||
| 2485 | skb->data_len = 0; | ||
| 2486 | |||
| 2487 | __skb_pull(skb, skb_headlen(skb)); | 2494 | __skb_pull(skb, skb_headlen(skb)); |
| 2488 | skb_reserve(skb, NET_IP_ALIGN - skb_headroom(skb)); | 2495 | skb_reserve(skb, NET_IP_ALIGN - skb_headroom(skb)); |
| 2489 | 2496 | ||
| @@ -4424,6 +4431,45 @@ err_uninit: | |||
| 4424 | } | 4431 | } |
| 4425 | 4432 | ||
| 4426 | /** | 4433 | /** |
| 4434 | * init_dummy_netdev - init a dummy network device for NAPI | ||
| 4435 | * @dev: device to init | ||
| 4436 | * | ||
| 4437 | * This takes a network device structure and initialize the minimum | ||
| 4438 | * amount of fields so it can be used to schedule NAPI polls without | ||
| 4439 | * registering a full blown interface. This is to be used by drivers | ||
| 4440 | * that need to tie several hardware interfaces to a single NAPI | ||
| 4441 | * poll scheduler due to HW limitations. | ||
| 4442 | */ | ||
| 4443 | int init_dummy_netdev(struct net_device *dev) | ||
| 4444 | { | ||
| 4445 | /* Clear everything. Note we don't initialize spinlocks | ||
| 4446 | * are they aren't supposed to be taken by any of the | ||
| 4447 | * NAPI code and this dummy netdev is supposed to be | ||
| 4448 | * only ever used for NAPI polls | ||
| 4449 | */ | ||
| 4450 | memset(dev, 0, sizeof(struct net_device)); | ||
| 4451 | |||
| 4452 | /* make sure we BUG if trying to hit standard | ||
| 4453 | * register/unregister code path | ||
| 4454 | */ | ||
| 4455 | dev->reg_state = NETREG_DUMMY; | ||
| 4456 | |||
| 4457 | /* initialize the ref count */ | ||
| 4458 | atomic_set(&dev->refcnt, 1); | ||
| 4459 | |||
| 4460 | /* NAPI wants this */ | ||
| 4461 | INIT_LIST_HEAD(&dev->napi_list); | ||
| 4462 | |||
| 4463 | /* a dummy interface is started by default */ | ||
| 4464 | set_bit(__LINK_STATE_PRESENT, &dev->state); | ||
| 4465 | set_bit(__LINK_STATE_START, &dev->state); | ||
| 4466 | |||
| 4467 | return 0; | ||
| 4468 | } | ||
| 4469 | EXPORT_SYMBOL_GPL(init_dummy_netdev); | ||
| 4470 | |||
| 4471 | |||
| 4472 | /** | ||
| 4427 | * register_netdev - register a network device | 4473 | * register_netdev - register a network device |
| 4428 | * @dev: device to register | 4474 | * @dev: device to register |
| 4429 | * | 4475 | * |
| @@ -5151,9 +5197,6 @@ static int __init net_dev_init(void) | |||
| 5151 | hotcpu_notifier(dev_cpu_callback, 0); | 5197 | hotcpu_notifier(dev_cpu_callback, 0); |
| 5152 | dst_init(); | 5198 | dst_init(); |
| 5153 | dev_mcast_init(); | 5199 | dev_mcast_init(); |
| 5154 | #ifdef CONFIG_NET_DMA | ||
| 5155 | dmaengine_get(); | ||
| 5156 | #endif | ||
| 5157 | rc = 0; | 5200 | rc = 0; |
| 5158 | out: | 5201 | out: |
| 5159 | return rc; | 5202 | return rc; |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 5110b359c75..65eac773903 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
| @@ -2602,6 +2602,12 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb) | |||
| 2602 | skb_shinfo(skb)->nr_frags * sizeof(skb_frag_t)); | 2602 | skb_shinfo(skb)->nr_frags * sizeof(skb_frag_t)); |
| 2603 | 2603 | ||
| 2604 | skb_shinfo(p)->nr_frags += skb_shinfo(skb)->nr_frags; | 2604 | skb_shinfo(p)->nr_frags += skb_shinfo(skb)->nr_frags; |
| 2605 | skb_shinfo(skb)->nr_frags = 0; | ||
| 2606 | |||
| 2607 | skb->truesize -= skb->data_len; | ||
| 2608 | skb->len -= skb->data_len; | ||
| 2609 | skb->data_len = 0; | ||
| 2610 | |||
| 2605 | NAPI_GRO_CB(skb)->free = 1; | 2611 | NAPI_GRO_CB(skb)->free = 1; |
| 2606 | goto done; | 2612 | goto done; |
| 2607 | } | 2613 | } |
diff --git a/net/dccp/ccids/Kconfig b/net/dccp/ccids/Kconfig index b28bf962edc..4b5db44970a 100644 --- a/net/dccp/ccids/Kconfig +++ b/net/dccp/ccids/Kconfig | |||
| @@ -29,7 +29,7 @@ config IP_DCCP_CCID3 | |||
| 29 | http://www.ietf.org/rfc/rfc4342.txt | 29 | http://www.ietf.org/rfc/rfc4342.txt |
| 30 | 30 | ||
| 31 | The TFRC congestion control algorithms were initially described in | 31 | The TFRC congestion control algorithms were initially described in |
| 32 | RFC 5448. | 32 | RFC 5348. |
| 33 | 33 | ||
| 34 | This text was extracted from RFC 4340 (sec. 10.2), | 34 | This text was extracted from RFC 4340 (sec. 10.2), |
| 35 | http://www.ietf.org/rfc/rfc4340.txt | 35 | http://www.ietf.org/rfc/rfc4340.txt |
diff --git a/net/dccp/ccids/lib/tfrc.c b/net/dccp/ccids/lib/tfrc.c index 60c412ccfee..4902029854d 100644 --- a/net/dccp/ccids/lib/tfrc.c +++ b/net/dccp/ccids/lib/tfrc.c | |||
| @@ -36,7 +36,7 @@ out: | |||
| 36 | return rc; | 36 | return rc; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | void __exit tfrc_lib_exit(void) | 39 | void tfrc_lib_exit(void) |
| 40 | { | 40 | { |
| 41 | tfrc_rx_packet_history_exit(); | 41 | tfrc_rx_packet_history_exit(); |
| 42 | tfrc_tx_packet_history_exit(); | 42 | tfrc_tx_packet_history_exit(); |
diff --git a/net/ipv4/netfilter/iptable_filter.c b/net/ipv4/netfilter/iptable_filter.c index c9224310eba..52cb6939d09 100644 --- a/net/ipv4/netfilter/iptable_filter.c +++ b/net/ipv4/netfilter/iptable_filter.c | |||
| @@ -93,13 +93,8 @@ ipt_local_out_hook(unsigned int hook, | |||
| 93 | { | 93 | { |
| 94 | /* root is playing with raw sockets. */ | 94 | /* root is playing with raw sockets. */ |
| 95 | if (skb->len < sizeof(struct iphdr) || | 95 | if (skb->len < sizeof(struct iphdr) || |
| 96 | ip_hdrlen(skb) < sizeof(struct iphdr)) { | 96 | ip_hdrlen(skb) < sizeof(struct iphdr)) |
| 97 | if (net_ratelimit()) | ||
| 98 | printk("iptable_filter: ignoring short SOCK_RAW " | ||
| 99 | "packet.\n"); | ||
| 100 | return NF_ACCEPT; | 97 | return NF_ACCEPT; |
| 101 | } | ||
| 102 | |||
| 103 | return ipt_do_table(skb, hook, in, out, | 98 | return ipt_do_table(skb, hook, in, out, |
| 104 | dev_net(out)->ipv4.iptable_filter); | 99 | dev_net(out)->ipv4.iptable_filter); |
| 105 | } | 100 | } |
diff --git a/net/ipv4/netfilter/iptable_mangle.c b/net/ipv4/netfilter/iptable_mangle.c index 69f2c428714..3929d20b9e4 100644 --- a/net/ipv4/netfilter/iptable_mangle.c +++ b/net/ipv4/netfilter/iptable_mangle.c | |||
| @@ -132,12 +132,8 @@ ipt_local_hook(unsigned int hook, | |||
| 132 | 132 | ||
| 133 | /* root is playing with raw sockets. */ | 133 | /* root is playing with raw sockets. */ |
| 134 | if (skb->len < sizeof(struct iphdr) | 134 | if (skb->len < sizeof(struct iphdr) |
| 135 | || ip_hdrlen(skb) < sizeof(struct iphdr)) { | 135 | || ip_hdrlen(skb) < sizeof(struct iphdr)) |
| 136 | if (net_ratelimit()) | ||
| 137 | printk("iptable_mangle: ignoring short SOCK_RAW " | ||
| 138 | "packet.\n"); | ||
| 139 | return NF_ACCEPT; | 136 | return NF_ACCEPT; |
| 140 | } | ||
| 141 | 137 | ||
| 142 | /* Save things which could affect route */ | 138 | /* Save things which could affect route */ |
| 143 | mark = skb->mark; | 139 | mark = skb->mark; |
diff --git a/net/ipv4/netfilter/iptable_raw.c b/net/ipv4/netfilter/iptable_raw.c index 8faebfe638f..7f65d18333e 100644 --- a/net/ipv4/netfilter/iptable_raw.c +++ b/net/ipv4/netfilter/iptable_raw.c | |||
| @@ -65,12 +65,8 @@ ipt_local_hook(unsigned int hook, | |||
| 65 | { | 65 | { |
| 66 | /* root is playing with raw sockets. */ | 66 | /* root is playing with raw sockets. */ |
| 67 | if (skb->len < sizeof(struct iphdr) || | 67 | if (skb->len < sizeof(struct iphdr) || |
| 68 | ip_hdrlen(skb) < sizeof(struct iphdr)) { | 68 | ip_hdrlen(skb) < sizeof(struct iphdr)) |
| 69 | if (net_ratelimit()) | ||
| 70 | printk("iptable_raw: ignoring short SOCK_RAW " | ||
| 71 | "packet.\n"); | ||
| 72 | return NF_ACCEPT; | 69 | return NF_ACCEPT; |
| 73 | } | ||
| 74 | return ipt_do_table(skb, hook, in, out, | 70 | return ipt_do_table(skb, hook, in, out, |
| 75 | dev_net(out)->ipv4.iptable_raw); | 71 | dev_net(out)->ipv4.iptable_raw); |
| 76 | } | 72 | } |
diff --git a/net/ipv4/netfilter/iptable_security.c b/net/ipv4/netfilter/iptable_security.c index 36f3be3cc42..a52a35f4a58 100644 --- a/net/ipv4/netfilter/iptable_security.c +++ b/net/ipv4/netfilter/iptable_security.c | |||
| @@ -96,12 +96,8 @@ ipt_local_out_hook(unsigned int hook, | |||
| 96 | { | 96 | { |
| 97 | /* Somebody is playing with raw sockets. */ | 97 | /* Somebody is playing with raw sockets. */ |
| 98 | if (skb->len < sizeof(struct iphdr) | 98 | if (skb->len < sizeof(struct iphdr) |
| 99 | || ip_hdrlen(skb) < sizeof(struct iphdr)) { | 99 | || ip_hdrlen(skb) < sizeof(struct iphdr)) |
| 100 | if (net_ratelimit()) | ||
| 101 | printk(KERN_INFO "iptable_security: ignoring short " | ||
| 102 | "SOCK_RAW packet.\n"); | ||
| 103 | return NF_ACCEPT; | 100 | return NF_ACCEPT; |
| 104 | } | ||
| 105 | return ipt_do_table(skb, hook, in, out, | 101 | return ipt_do_table(skb, hook, in, out, |
| 106 | dev_net(out)->ipv4.iptable_security); | 102 | dev_net(out)->ipv4.iptable_security); |
| 107 | } | 103 | } |
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c index b2141e11575..4beb04fac58 100644 --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | |||
| @@ -145,11 +145,8 @@ static unsigned int ipv4_conntrack_local(unsigned int hooknum, | |||
| 145 | { | 145 | { |
| 146 | /* root is playing with raw sockets. */ | 146 | /* root is playing with raw sockets. */ |
| 147 | if (skb->len < sizeof(struct iphdr) || | 147 | if (skb->len < sizeof(struct iphdr) || |
| 148 | ip_hdrlen(skb) < sizeof(struct iphdr)) { | 148 | ip_hdrlen(skb) < sizeof(struct iphdr)) |
| 149 | if (net_ratelimit()) | ||
| 150 | printk("ipt_hook: happy cracking.\n"); | ||
| 151 | return NF_ACCEPT; | 149 | return NF_ACCEPT; |
| 152 | } | ||
| 153 | return nf_conntrack_in(dev_net(out), PF_INET, hooknum, skb); | 150 | return nf_conntrack_in(dev_net(out), PF_INET, hooknum, skb); |
| 154 | } | 151 | } |
| 155 | 152 | ||
diff --git a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c index 1fd3ef7718b..2a8bee26f43 100644 --- a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c +++ b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | #include <net/netfilter/nf_conntrack_core.h> | 20 | #include <net/netfilter/nf_conntrack_core.h> |
| 21 | #include <net/netfilter/nf_log.h> | 21 | #include <net/netfilter/nf_log.h> |
| 22 | 22 | ||
| 23 | static unsigned long nf_ct_icmp_timeout __read_mostly = 30*HZ; | 23 | static unsigned int nf_ct_icmp_timeout __read_mostly = 30*HZ; |
| 24 | 24 | ||
| 25 | static bool icmp_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff, | 25 | static bool icmp_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff, |
| 26 | struct nf_conntrack_tuple *tuple) | 26 | struct nf_conntrack_tuple *tuple) |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index ce572f9dff0..0cd71b84e48 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
| @@ -522,8 +522,12 @@ static int tcp_splice_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, | |||
| 522 | unsigned int offset, size_t len) | 522 | unsigned int offset, size_t len) |
| 523 | { | 523 | { |
| 524 | struct tcp_splice_state *tss = rd_desc->arg.data; | 524 | struct tcp_splice_state *tss = rd_desc->arg.data; |
| 525 | int ret; | ||
| 525 | 526 | ||
| 526 | return skb_splice_bits(skb, offset, tss->pipe, tss->len, tss->flags); | 527 | ret = skb_splice_bits(skb, offset, tss->pipe, rd_desc->count, tss->flags); |
| 528 | if (ret > 0) | ||
| 529 | rd_desc->count -= ret; | ||
| 530 | return ret; | ||
| 527 | } | 531 | } |
| 528 | 532 | ||
| 529 | static int __tcp_splice_read(struct sock *sk, struct tcp_splice_state *tss) | 533 | static int __tcp_splice_read(struct sock *sk, struct tcp_splice_state *tss) |
| @@ -531,6 +535,7 @@ static int __tcp_splice_read(struct sock *sk, struct tcp_splice_state *tss) | |||
| 531 | /* Store TCP splice context information in read_descriptor_t. */ | 535 | /* Store TCP splice context information in read_descriptor_t. */ |
| 532 | read_descriptor_t rd_desc = { | 536 | read_descriptor_t rd_desc = { |
| 533 | .arg.data = tss, | 537 | .arg.data = tss, |
| 538 | .count = tss->len, | ||
| 534 | }; | 539 | }; |
| 535 | 540 | ||
| 536 | return tcp_read_sock(sk, &rd_desc, tcp_splice_data_recv); | 541 | return tcp_read_sock(sk, &rd_desc, tcp_splice_data_recv); |
| @@ -611,11 +616,13 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *ppos, | |||
| 611 | tss.len -= ret; | 616 | tss.len -= ret; |
| 612 | spliced += ret; | 617 | spliced += ret; |
| 613 | 618 | ||
| 619 | if (!timeo) | ||
| 620 | break; | ||
| 614 | release_sock(sk); | 621 | release_sock(sk); |
| 615 | lock_sock(sk); | 622 | lock_sock(sk); |
| 616 | 623 | ||
| 617 | if (sk->sk_err || sk->sk_state == TCP_CLOSE || | 624 | if (sk->sk_err || sk->sk_state == TCP_CLOSE || |
| 618 | (sk->sk_shutdown & RCV_SHUTDOWN) || !timeo || | 625 | (sk->sk_shutdown & RCV_SHUTDOWN) || |
| 619 | signal_pending(current)) | 626 | signal_pending(current)) |
| 620 | break; | 627 | break; |
| 621 | } | 628 | } |
| @@ -2382,7 +2389,7 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features) | |||
| 2382 | unsigned int seq; | 2389 | unsigned int seq; |
| 2383 | __be32 delta; | 2390 | __be32 delta; |
| 2384 | unsigned int oldlen; | 2391 | unsigned int oldlen; |
| 2385 | unsigned int len; | 2392 | unsigned int mss; |
| 2386 | 2393 | ||
| 2387 | if (!pskb_may_pull(skb, sizeof(*th))) | 2394 | if (!pskb_may_pull(skb, sizeof(*th))) |
| 2388 | goto out; | 2395 | goto out; |
| @@ -2398,10 +2405,13 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features) | |||
| 2398 | oldlen = (u16)~skb->len; | 2405 | oldlen = (u16)~skb->len; |
| 2399 | __skb_pull(skb, thlen); | 2406 | __skb_pull(skb, thlen); |
| 2400 | 2407 | ||
| 2408 | mss = skb_shinfo(skb)->gso_size; | ||
| 2409 | if (unlikely(skb->len <= mss)) | ||
| 2410 | goto out; | ||
| 2411 | |||
| 2401 | if (skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST)) { | 2412 | if (skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST)) { |
| 2402 | /* Packet is from an untrusted source, reset gso_segs. */ | 2413 | /* Packet is from an untrusted source, reset gso_segs. */ |
| 2403 | int type = skb_shinfo(skb)->gso_type; | 2414 | int type = skb_shinfo(skb)->gso_type; |
| 2404 | int mss; | ||
| 2405 | 2415 | ||
| 2406 | if (unlikely(type & | 2416 | if (unlikely(type & |
| 2407 | ~(SKB_GSO_TCPV4 | | 2417 | ~(SKB_GSO_TCPV4 | |
| @@ -2412,7 +2422,6 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features) | |||
| 2412 | !(type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))) | 2422 | !(type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))) |
| 2413 | goto out; | 2423 | goto out; |
| 2414 | 2424 | ||
| 2415 | mss = skb_shinfo(skb)->gso_size; | ||
| 2416 | skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(skb->len, mss); | 2425 | skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(skb->len, mss); |
| 2417 | 2426 | ||
| 2418 | segs = NULL; | 2427 | segs = NULL; |
| @@ -2423,8 +2432,7 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features) | |||
| 2423 | if (IS_ERR(segs)) | 2432 | if (IS_ERR(segs)) |
| 2424 | goto out; | 2433 | goto out; |
| 2425 | 2434 | ||
| 2426 | len = skb_shinfo(skb)->gso_size; | 2435 | delta = htonl(oldlen + (thlen + mss)); |
| 2427 | delta = htonl(oldlen + (thlen + len)); | ||
| 2428 | 2436 | ||
| 2429 | skb = segs; | 2437 | skb = segs; |
| 2430 | th = tcp_hdr(skb); | 2438 | th = tcp_hdr(skb); |
| @@ -2440,7 +2448,7 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features) | |||
| 2440 | csum_fold(csum_partial(skb_transport_header(skb), | 2448 | csum_fold(csum_partial(skb_transport_header(skb), |
| 2441 | thlen, skb->csum)); | 2449 | thlen, skb->csum)); |
| 2442 | 2450 | ||
| 2443 | seq += len; | 2451 | seq += mss; |
| 2444 | skb = skb->next; | 2452 | skb = skb->next; |
| 2445 | th = tcp_hdr(skb); | 2453 | th = tcp_hdr(skb); |
| 2446 | 2454 | ||
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index 29c7c99e69f..52ee1dced2f 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c | |||
| @@ -298,6 +298,10 @@ static void fib6_dump_end(struct netlink_callback *cb) | |||
| 298 | struct fib6_walker_t *w = (void*)cb->args[2]; | 298 | struct fib6_walker_t *w = (void*)cb->args[2]; |
| 299 | 299 | ||
| 300 | if (w) { | 300 | if (w) { |
| 301 | if (cb->args[4]) { | ||
| 302 | cb->args[4] = 0; | ||
| 303 | fib6_walker_unlink(w); | ||
| 304 | } | ||
| 301 | cb->args[2] = 0; | 305 | cb->args[2] = 0; |
| 302 | kfree(w); | 306 | kfree(w); |
| 303 | } | 307 | } |
| @@ -330,15 +334,12 @@ static int fib6_dump_table(struct fib6_table *table, struct sk_buff *skb, | |||
| 330 | read_lock_bh(&table->tb6_lock); | 334 | read_lock_bh(&table->tb6_lock); |
| 331 | res = fib6_walk_continue(w); | 335 | res = fib6_walk_continue(w); |
| 332 | read_unlock_bh(&table->tb6_lock); | 336 | read_unlock_bh(&table->tb6_lock); |
| 333 | if (res != 0) { | 337 | if (res <= 0) { |
| 334 | if (res < 0) | 338 | fib6_walker_unlink(w); |
| 335 | fib6_walker_unlink(w); | 339 | cb->args[4] = 0; |
| 336 | goto end; | ||
| 337 | } | 340 | } |
| 338 | fib6_walker_unlink(w); | ||
| 339 | cb->args[4] = 0; | ||
| 340 | } | 341 | } |
| 341 | end: | 342 | |
| 342 | return res; | 343 | return res; |
| 343 | } | 344 | } |
| 344 | 345 | ||
diff --git a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c index bd52151d31e..c455cf4ee75 100644 --- a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c +++ b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include <net/netfilter/ipv6/nf_conntrack_icmpv6.h> | 26 | #include <net/netfilter/ipv6/nf_conntrack_icmpv6.h> |
| 27 | #include <net/netfilter/nf_log.h> | 27 | #include <net/netfilter/nf_log.h> |
| 28 | 28 | ||
| 29 | static unsigned long nf_ct_icmpv6_timeout __read_mostly = 30*HZ; | 29 | static unsigned int nf_ct_icmpv6_timeout __read_mostly = 30*HZ; |
| 30 | 30 | ||
| 31 | static bool icmpv6_pkt_to_tuple(const struct sk_buff *skb, | 31 | static bool icmpv6_pkt_to_tuple(const struct sk_buff *skb, |
| 32 | unsigned int dataoff, | 32 | unsigned int dataoff, |
diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c index 5f510a13b9f..c5c0c527109 100644 --- a/net/mac80211/ht.c +++ b/net/mac80211/ht.c | |||
| @@ -469,7 +469,7 @@ int ieee80211_start_tx_ba_session(struct ieee80211_hw *hw, u8 *ra, u16 tid) | |||
| 469 | struct ieee80211_sub_if_data *sdata; | 469 | struct ieee80211_sub_if_data *sdata; |
| 470 | u16 start_seq_num; | 470 | u16 start_seq_num; |
| 471 | u8 *state; | 471 | u8 *state; |
| 472 | int ret; | 472 | int ret = 0; |
| 473 | 473 | ||
| 474 | if ((tid >= STA_TID_NUM) || !(hw->flags & IEEE80211_HW_AMPDU_AGGREGATION)) | 474 | if ((tid >= STA_TID_NUM) || !(hw->flags & IEEE80211_HW_AMPDU_AGGREGATION)) |
| 475 | return -EINVAL; | 475 | return -EINVAL; |
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 5abbc3f07dd..b9074824862 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
| @@ -699,7 +699,8 @@ int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata, | |||
| 699 | return 0; | 699 | return 0; |
| 700 | 700 | ||
| 701 | /* Setting ad-hoc mode on non-IBSS channel is not supported. */ | 701 | /* Setting ad-hoc mode on non-IBSS channel is not supported. */ |
| 702 | if (sdata->local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS) | 702 | if (sdata->local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS && |
| 703 | type == NL80211_IFTYPE_ADHOC) | ||
| 703 | return -EOPNOTSUPP; | 704 | return -EOPNOTSUPP; |
| 704 | 705 | ||
| 705 | /* | 706 | /* |
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c index 929ba542fd7..1159bdb4119 100644 --- a/net/mac80211/mesh_plink.c +++ b/net/mac80211/mesh_plink.c | |||
| @@ -107,6 +107,7 @@ static struct sta_info *mesh_plink_alloc(struct ieee80211_sub_if_data *sdata, | |||
| 107 | 107 | ||
| 108 | sta->flags = WLAN_STA_AUTHORIZED; | 108 | sta->flags = WLAN_STA_AUTHORIZED; |
| 109 | sta->sta.supp_rates[local->hw.conf.channel->band] = rates; | 109 | sta->sta.supp_rates[local->hw.conf.channel->band] = rates; |
| 110 | rate_control_rate_init(sta); | ||
| 110 | 111 | ||
| 111 | return sta; | 112 | return sta; |
| 112 | } | 113 | } |
diff --git a/net/mac80211/rc80211_minstrel.c b/net/mac80211/rc80211_minstrel.c index 2b3b490a607..3824990d340 100644 --- a/net/mac80211/rc80211_minstrel.c +++ b/net/mac80211/rc80211_minstrel.c | |||
| @@ -395,13 +395,15 @@ minstrel_rate_init(void *priv, struct ieee80211_supported_band *sband, | |||
| 395 | { | 395 | { |
| 396 | struct minstrel_sta_info *mi = priv_sta; | 396 | struct minstrel_sta_info *mi = priv_sta; |
| 397 | struct minstrel_priv *mp = priv; | 397 | struct minstrel_priv *mp = priv; |
| 398 | struct minstrel_rate *mr_ctl; | 398 | struct ieee80211_local *local = hw_to_local(mp->hw); |
| 399 | struct ieee80211_rate *ctl_rate; | ||
| 399 | unsigned int i, n = 0; | 400 | unsigned int i, n = 0; |
| 400 | unsigned int t_slot = 9; /* FIXME: get real slot time */ | 401 | unsigned int t_slot = 9; /* FIXME: get real slot time */ |
| 401 | 402 | ||
| 402 | mi->lowest_rix = rate_lowest_index(sband, sta); | 403 | mi->lowest_rix = rate_lowest_index(sband, sta); |
| 403 | mr_ctl = &mi->r[rix_to_ndx(mi, mi->lowest_rix)]; | 404 | ctl_rate = &sband->bitrates[mi->lowest_rix]; |
| 404 | mi->sp_ack_dur = mr_ctl->ack_time; | 405 | mi->sp_ack_dur = ieee80211_frame_duration(local, 10, ctl_rate->bitrate, |
| 406 | !!(ctl_rate->flags & IEEE80211_RATE_ERP_G), 1); | ||
| 405 | 407 | ||
| 406 | for (i = 0; i < sband->n_bitrates; i++) { | 408 | for (i = 0; i < sband->n_bitrates; i++) { |
| 407 | struct minstrel_rate *mr = &mi->r[n]; | 409 | struct minstrel_rate *mr = &mi->r[n]; |
| @@ -416,7 +418,7 @@ minstrel_rate_init(void *priv, struct ieee80211_supported_band *sband, | |||
| 416 | 418 | ||
| 417 | mr->rix = i; | 419 | mr->rix = i; |
| 418 | mr->bitrate = sband->bitrates[i].bitrate / 5; | 420 | mr->bitrate = sband->bitrates[i].bitrate / 5; |
| 419 | calc_rate_durations(mi, hw_to_local(mp->hw), mr, | 421 | calc_rate_durations(mi, local, mr, |
| 420 | &sband->bitrates[i]); | 422 | &sband->bitrates[i]); |
| 421 | 423 | ||
| 422 | /* calculate maximum number of retransmissions before | 424 | /* calculate maximum number of retransmissions before |
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index 7e83f74cd5d..90ce9ddb945 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c | |||
| @@ -469,7 +469,7 @@ struct nf_conn *nf_conntrack_alloc(struct net *net, | |||
| 469 | const struct nf_conntrack_tuple *repl, | 469 | const struct nf_conntrack_tuple *repl, |
| 470 | gfp_t gfp) | 470 | gfp_t gfp) |
| 471 | { | 471 | { |
| 472 | struct nf_conn *ct = NULL; | 472 | struct nf_conn *ct; |
| 473 | 473 | ||
| 474 | if (unlikely(!nf_conntrack_hash_rnd_initted)) { | 474 | if (unlikely(!nf_conntrack_hash_rnd_initted)) { |
| 475 | get_random_bytes(&nf_conntrack_hash_rnd, 4); | 475 | get_random_bytes(&nf_conntrack_hash_rnd, 4); |
| @@ -551,7 +551,7 @@ init_conntrack(struct net *net, | |||
| 551 | } | 551 | } |
| 552 | 552 | ||
| 553 | ct = nf_conntrack_alloc(net, tuple, &repl_tuple, GFP_ATOMIC); | 553 | ct = nf_conntrack_alloc(net, tuple, &repl_tuple, GFP_ATOMIC); |
| 554 | if (ct == NULL || IS_ERR(ct)) { | 554 | if (IS_ERR(ct)) { |
| 555 | pr_debug("Can't allocate conntrack.\n"); | 555 | pr_debug("Can't allocate conntrack.\n"); |
| 556 | return (struct nf_conntrack_tuple_hash *)ct; | 556 | return (struct nf_conntrack_tuple_hash *)ct; |
| 557 | } | 557 | } |
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 00e8c27130f..3dddec6d2f7 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
| @@ -1134,7 +1134,7 @@ ctnetlink_create_conntrack(struct nlattr *cda[], | |||
| 1134 | struct nf_conntrack_helper *helper; | 1134 | struct nf_conntrack_helper *helper; |
| 1135 | 1135 | ||
| 1136 | ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_ATOMIC); | 1136 | ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_ATOMIC); |
| 1137 | if (ct == NULL || IS_ERR(ct)) | 1137 | if (IS_ERR(ct)) |
| 1138 | return -ENOMEM; | 1138 | return -ENOMEM; |
| 1139 | 1139 | ||
| 1140 | if (!cda[CTA_TIMEOUT]) | 1140 | if (!cda[CTA_TIMEOUT]) |
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c index 89837a4eef7..bfbf521f6ea 100644 --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c | |||
| @@ -273,6 +273,10 @@ static int match_revfn(u8 af, const char *name, u8 revision, int *bestp) | |||
| 273 | have_rev = 1; | 273 | have_rev = 1; |
| 274 | } | 274 | } |
| 275 | } | 275 | } |
| 276 | |||
| 277 | if (af != NFPROTO_UNSPEC && !have_rev) | ||
| 278 | return match_revfn(NFPROTO_UNSPEC, name, revision, bestp); | ||
| 279 | |||
| 276 | return have_rev; | 280 | return have_rev; |
| 277 | } | 281 | } |
| 278 | 282 | ||
| @@ -289,6 +293,10 @@ static int target_revfn(u8 af, const char *name, u8 revision, int *bestp) | |||
| 289 | have_rev = 1; | 293 | have_rev = 1; |
| 290 | } | 294 | } |
| 291 | } | 295 | } |
| 296 | |||
| 297 | if (af != NFPROTO_UNSPEC && !have_rev) | ||
| 298 | return target_revfn(NFPROTO_UNSPEC, name, revision, bestp); | ||
| 299 | |||
| 292 | return have_rev; | 300 | return have_rev; |
| 293 | } | 301 | } |
| 294 | 302 | ||
diff --git a/net/netfilter/xt_time.c b/net/netfilter/xt_time.c index 29375ba8db7..93acaa59d10 100644 --- a/net/netfilter/xt_time.c +++ b/net/netfilter/xt_time.c | |||
| @@ -243,6 +243,17 @@ static struct xt_match xt_time_mt_reg __read_mostly = { | |||
| 243 | 243 | ||
| 244 | static int __init time_mt_init(void) | 244 | static int __init time_mt_init(void) |
| 245 | { | 245 | { |
| 246 | int minutes = sys_tz.tz_minuteswest; | ||
| 247 | |||
| 248 | if (minutes < 0) /* east of Greenwich */ | ||
| 249 | printk(KERN_INFO KBUILD_MODNAME | ||
| 250 | ": kernel timezone is +%02d%02d\n", | ||
| 251 | -minutes / 60, -minutes % 60); | ||
| 252 | else /* west of Greenwich */ | ||
| 253 | printk(KERN_INFO KBUILD_MODNAME | ||
| 254 | ": kernel timezone is -%02d%02d\n", | ||
| 255 | minutes / 60, minutes % 60); | ||
| 256 | |||
| 246 | return xt_register_match(&xt_time_mt_reg); | 257 | return xt_register_match(&xt_time_mt_reg); |
| 247 | } | 258 | } |
| 248 | 259 | ||
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 5070643ce53..2f0f0b04d3f 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
| @@ -661,12 +661,13 @@ static void htb_charge_class(struct htb_sched *q, struct htb_class *cl, | |||
| 661 | * next pending event (0 for no event in pq). | 661 | * next pending event (0 for no event in pq). |
| 662 | * Note: Applied are events whose have cl->pq_key <= q->now. | 662 | * Note: Applied are events whose have cl->pq_key <= q->now. |
| 663 | */ | 663 | */ |
| 664 | static psched_time_t htb_do_events(struct htb_sched *q, int level) | 664 | static psched_time_t htb_do_events(struct htb_sched *q, int level, |
| 665 | unsigned long start) | ||
| 665 | { | 666 | { |
| 666 | /* don't run for longer than 2 jiffies; 2 is used instead of | 667 | /* don't run for longer than 2 jiffies; 2 is used instead of |
| 667 | 1 to simplify things when jiffy is going to be incremented | 668 | 1 to simplify things when jiffy is going to be incremented |
| 668 | too soon */ | 669 | too soon */ |
| 669 | unsigned long stop_at = jiffies + 2; | 670 | unsigned long stop_at = start + 2; |
| 670 | while (time_before(jiffies, stop_at)) { | 671 | while (time_before(jiffies, stop_at)) { |
| 671 | struct htb_class *cl; | 672 | struct htb_class *cl; |
| 672 | long diff; | 673 | long diff; |
| @@ -685,8 +686,8 @@ static psched_time_t htb_do_events(struct htb_sched *q, int level) | |||
| 685 | if (cl->cmode != HTB_CAN_SEND) | 686 | if (cl->cmode != HTB_CAN_SEND) |
| 686 | htb_add_to_wait_tree(q, cl, diff); | 687 | htb_add_to_wait_tree(q, cl, diff); |
| 687 | } | 688 | } |
| 688 | /* too much load - let's continue on next jiffie */ | 689 | /* too much load - let's continue on next jiffie (including above) */ |
| 689 | return q->now + PSCHED_TICKS_PER_SEC / HZ; | 690 | return q->now + 2 * PSCHED_TICKS_PER_SEC / HZ; |
| 690 | } | 691 | } |
| 691 | 692 | ||
| 692 | /* Returns class->node+prio from id-tree where classe's id is >= id. NULL | 693 | /* Returns class->node+prio from id-tree where classe's id is >= id. NULL |
| @@ -845,6 +846,7 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch) | |||
| 845 | struct htb_sched *q = qdisc_priv(sch); | 846 | struct htb_sched *q = qdisc_priv(sch); |
| 846 | int level; | 847 | int level; |
| 847 | psched_time_t next_event; | 848 | psched_time_t next_event; |
| 849 | unsigned long start_at; | ||
| 848 | 850 | ||
| 849 | /* try to dequeue direct packets as high prio (!) to minimize cpu work */ | 851 | /* try to dequeue direct packets as high prio (!) to minimize cpu work */ |
| 850 | skb = __skb_dequeue(&q->direct_queue); | 852 | skb = __skb_dequeue(&q->direct_queue); |
| @@ -857,6 +859,7 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch) | |||
| 857 | if (!sch->q.qlen) | 859 | if (!sch->q.qlen) |
| 858 | goto fin; | 860 | goto fin; |
| 859 | q->now = psched_get_time(); | 861 | q->now = psched_get_time(); |
| 862 | start_at = jiffies; | ||
| 860 | 863 | ||
| 861 | next_event = q->now + 5 * PSCHED_TICKS_PER_SEC; | 864 | next_event = q->now + 5 * PSCHED_TICKS_PER_SEC; |
| 862 | 865 | ||
| @@ -866,14 +869,14 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch) | |||
| 866 | psched_time_t event; | 869 | psched_time_t event; |
| 867 | 870 | ||
| 868 | if (q->now >= q->near_ev_cache[level]) { | 871 | if (q->now >= q->near_ev_cache[level]) { |
| 869 | event = htb_do_events(q, level); | 872 | event = htb_do_events(q, level, start_at); |
| 870 | if (!event) | 873 | if (!event) |
| 871 | event = q->now + PSCHED_TICKS_PER_SEC; | 874 | event = q->now + PSCHED_TICKS_PER_SEC; |
| 872 | q->near_ev_cache[level] = event; | 875 | q->near_ev_cache[level] = event; |
| 873 | } else | 876 | } else |
| 874 | event = q->near_ev_cache[level]; | 877 | event = q->near_ev_cache[level]; |
| 875 | 878 | ||
| 876 | if (event && next_event > event) | 879 | if (next_event > event) |
| 877 | next_event = event; | 880 | next_event = event; |
| 878 | 881 | ||
| 879 | m = ~q->row_mask[level]; | 882 | m = ~q->row_mask[level]; |
diff --git a/net/socket.c b/net/socket.c index 06603d73c41..35dd7371752 100644 --- a/net/socket.c +++ b/net/socket.c | |||
| @@ -1214,7 +1214,7 @@ int sock_create_kern(int family, int type, int protocol, struct socket **res) | |||
| 1214 | return __sock_create(&init_net, family, type, protocol, res, 1); | 1214 | return __sock_create(&init_net, family, type, protocol, res, 1); |
| 1215 | } | 1215 | } |
| 1216 | 1216 | ||
| 1217 | asmlinkage long sys_socket(int family, int type, int protocol) | 1217 | SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) |
| 1218 | { | 1218 | { |
| 1219 | int retval; | 1219 | int retval; |
| 1220 | struct socket *sock; | 1220 | struct socket *sock; |
| @@ -1255,8 +1255,8 @@ out_release: | |||
| 1255 | * Create a pair of connected sockets. | 1255 | * Create a pair of connected sockets. |
| 1256 | */ | 1256 | */ |
| 1257 | 1257 | ||
| 1258 | asmlinkage long sys_socketpair(int family, int type, int protocol, | 1258 | SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol, |
| 1259 | int __user *usockvec) | 1259 | int __user *, usockvec) |
| 1260 | { | 1260 | { |
| 1261 | struct socket *sock1, *sock2; | 1261 | struct socket *sock1, *sock2; |
| 1262 | int fd1, fd2, err; | 1262 | int fd1, fd2, err; |
| @@ -1356,7 +1356,7 @@ out_fd1: | |||
| 1356 | * the protocol layer (having also checked the address is ok). | 1356 | * the protocol layer (having also checked the address is ok). |
| 1357 | */ | 1357 | */ |
| 1358 | 1358 | ||
| 1359 | asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) | 1359 | SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) |
| 1360 | { | 1360 | { |
| 1361 | struct socket *sock; | 1361 | struct socket *sock; |
| 1362 | struct sockaddr_storage address; | 1362 | struct sockaddr_storage address; |
| @@ -1385,7 +1385,7 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) | |||
| 1385 | * ready for listening. | 1385 | * ready for listening. |
| 1386 | */ | 1386 | */ |
| 1387 | 1387 | ||
| 1388 | asmlinkage long sys_listen(int fd, int backlog) | 1388 | SYSCALL_DEFINE2(listen, int, fd, int, backlog) |
| 1389 | { | 1389 | { |
| 1390 | struct socket *sock; | 1390 | struct socket *sock; |
| 1391 | int err, fput_needed; | 1391 | int err, fput_needed; |
| @@ -1418,8 +1418,8 @@ asmlinkage long sys_listen(int fd, int backlog) | |||
| 1418 | * clean when we restucture accept also. | 1418 | * clean when we restucture accept also. |
| 1419 | */ | 1419 | */ |
| 1420 | 1420 | ||
| 1421 | asmlinkage long sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, | 1421 | SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, |
| 1422 | int __user *upeer_addrlen, int flags) | 1422 | int __user *, upeer_addrlen, int, flags) |
| 1423 | { | 1423 | { |
| 1424 | struct socket *sock, *newsock; | 1424 | struct socket *sock, *newsock; |
| 1425 | struct file *newfile; | 1425 | struct file *newfile; |
| @@ -1502,8 +1502,8 @@ out_fd: | |||
| 1502 | goto out_put; | 1502 | goto out_put; |
| 1503 | } | 1503 | } |
| 1504 | 1504 | ||
| 1505 | asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, | 1505 | SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr, |
| 1506 | int __user *upeer_addrlen) | 1506 | int __user *, upeer_addrlen) |
| 1507 | { | 1507 | { |
| 1508 | return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0); | 1508 | return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0); |
| 1509 | } | 1509 | } |
| @@ -1520,8 +1520,8 @@ asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, | |||
| 1520 | * include the -EINPROGRESS status for such sockets. | 1520 | * include the -EINPROGRESS status for such sockets. |
| 1521 | */ | 1521 | */ |
| 1522 | 1522 | ||
| 1523 | asmlinkage long sys_connect(int fd, struct sockaddr __user *uservaddr, | 1523 | SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, |
| 1524 | int addrlen) | 1524 | int, addrlen) |
| 1525 | { | 1525 | { |
| 1526 | struct socket *sock; | 1526 | struct socket *sock; |
| 1527 | struct sockaddr_storage address; | 1527 | struct sockaddr_storage address; |
| @@ -1552,8 +1552,8 @@ out: | |||
| 1552 | * name to user space. | 1552 | * name to user space. |
| 1553 | */ | 1553 | */ |
| 1554 | 1554 | ||
| 1555 | asmlinkage long sys_getsockname(int fd, struct sockaddr __user *usockaddr, | 1555 | SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr, |
| 1556 | int __user *usockaddr_len) | 1556 | int __user *, usockaddr_len) |
| 1557 | { | 1557 | { |
| 1558 | struct socket *sock; | 1558 | struct socket *sock; |
| 1559 | struct sockaddr_storage address; | 1559 | struct sockaddr_storage address; |
| @@ -1583,8 +1583,8 @@ out: | |||
| 1583 | * name to user space. | 1583 | * name to user space. |
| 1584 | */ | 1584 | */ |
| 1585 | 1585 | ||
| 1586 | asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr, | 1586 | SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, |
| 1587 | int __user *usockaddr_len) | 1587 | int __user *, usockaddr_len) |
| 1588 | { | 1588 | { |
| 1589 | struct socket *sock; | 1589 | struct socket *sock; |
| 1590 | struct sockaddr_storage address; | 1590 | struct sockaddr_storage address; |
| @@ -1615,9 +1615,9 @@ asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr, | |||
| 1615 | * the protocol. | 1615 | * the protocol. |
| 1616 | */ | 1616 | */ |
| 1617 | 1617 | ||
| 1618 | asmlinkage long sys_sendto(int fd, void __user *buff, size_t len, | 1618 | SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len, |
| 1619 | unsigned flags, struct sockaddr __user *addr, | 1619 | unsigned, flags, struct sockaddr __user *, addr, |
| 1620 | int addr_len) | 1620 | int, addr_len) |
| 1621 | { | 1621 | { |
| 1622 | struct socket *sock; | 1622 | struct socket *sock; |
| 1623 | struct sockaddr_storage address; | 1623 | struct sockaddr_storage address; |
| @@ -1660,7 +1660,8 @@ out: | |||
| 1660 | * Send a datagram down a socket. | 1660 | * Send a datagram down a socket. |
| 1661 | */ | 1661 | */ |
| 1662 | 1662 | ||
| 1663 | asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags) | 1663 | SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len, |
| 1664 | unsigned, flags) | ||
| 1664 | { | 1665 | { |
| 1665 | return sys_sendto(fd, buff, len, flags, NULL, 0); | 1666 | return sys_sendto(fd, buff, len, flags, NULL, 0); |
| 1666 | } | 1667 | } |
| @@ -1671,9 +1672,9 @@ asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags) | |||
| 1671 | * sender address from kernel to user space. | 1672 | * sender address from kernel to user space. |
| 1672 | */ | 1673 | */ |
| 1673 | 1674 | ||
| 1674 | asmlinkage long sys_recvfrom(int fd, void __user *ubuf, size_t size, | 1675 | SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, |
| 1675 | unsigned flags, struct sockaddr __user *addr, | 1676 | unsigned, flags, struct sockaddr __user *, addr, |
| 1676 | int __user *addr_len) | 1677 | int __user *, addr_len) |
| 1677 | { | 1678 | { |
| 1678 | struct socket *sock; | 1679 | struct socket *sock; |
| 1679 | struct iovec iov; | 1680 | struct iovec iov; |
| @@ -1725,8 +1726,8 @@ asmlinkage long sys_recv(int fd, void __user *ubuf, size_t size, | |||
| 1725 | * to pass the user mode parameter for the protocols to sort out. | 1726 | * to pass the user mode parameter for the protocols to sort out. |
| 1726 | */ | 1727 | */ |
| 1727 | 1728 | ||
| 1728 | asmlinkage long sys_setsockopt(int fd, int level, int optname, | 1729 | SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname, |
| 1729 | char __user *optval, int optlen) | 1730 | char __user *, optval, int, optlen) |
| 1730 | { | 1731 | { |
| 1731 | int err, fput_needed; | 1732 | int err, fput_needed; |
| 1732 | struct socket *sock; | 1733 | struct socket *sock; |
| @@ -1759,8 +1760,8 @@ out_put: | |||
| 1759 | * to pass a user mode parameter for the protocols to sort out. | 1760 | * to pass a user mode parameter for the protocols to sort out. |
| 1760 | */ | 1761 | */ |
| 1761 | 1762 | ||
| 1762 | asmlinkage long sys_getsockopt(int fd, int level, int optname, | 1763 | SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname, |
| 1763 | char __user *optval, int __user *optlen) | 1764 | char __user *, optval, int __user *, optlen) |
| 1764 | { | 1765 | { |
| 1765 | int err, fput_needed; | 1766 | int err, fput_needed; |
| 1766 | struct socket *sock; | 1767 | struct socket *sock; |
| @@ -1789,7 +1790,7 @@ out_put: | |||
| 1789 | * Shutdown a socket. | 1790 | * Shutdown a socket. |
| 1790 | */ | 1791 | */ |
| 1791 | 1792 | ||
| 1792 | asmlinkage long sys_shutdown(int fd, int how) | 1793 | SYSCALL_DEFINE2(shutdown, int, fd, int, how) |
| 1793 | { | 1794 | { |
| 1794 | int err, fput_needed; | 1795 | int err, fput_needed; |
| 1795 | struct socket *sock; | 1796 | struct socket *sock; |
| @@ -1815,7 +1816,7 @@ asmlinkage long sys_shutdown(int fd, int how) | |||
| 1815 | * BSD sendmsg interface | 1816 | * BSD sendmsg interface |
| 1816 | */ | 1817 | */ |
| 1817 | 1818 | ||
| 1818 | asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags) | 1819 | SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags) |
| 1819 | { | 1820 | { |
| 1820 | struct compat_msghdr __user *msg_compat = | 1821 | struct compat_msghdr __user *msg_compat = |
| 1821 | (struct compat_msghdr __user *)msg; | 1822 | (struct compat_msghdr __user *)msg; |
| @@ -1921,8 +1922,8 @@ out: | |||
| 1921 | * BSD recvmsg interface | 1922 | * BSD recvmsg interface |
| 1922 | */ | 1923 | */ |
| 1923 | 1924 | ||
| 1924 | asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, | 1925 | SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg, |
| 1925 | unsigned int flags) | 1926 | unsigned int, flags) |
| 1926 | { | 1927 | { |
| 1927 | struct compat_msghdr __user *msg_compat = | 1928 | struct compat_msghdr __user *msg_compat = |
| 1928 | (struct compat_msghdr __user *)msg; | 1929 | (struct compat_msghdr __user *)msg; |
| @@ -2045,7 +2046,7 @@ static const unsigned char nargs[19]={ | |||
| 2045 | * it is set by the callees. | 2046 | * it is set by the callees. |
| 2046 | */ | 2047 | */ |
| 2047 | 2048 | ||
| 2048 | asmlinkage long sys_socketcall(int call, unsigned long __user *args) | 2049 | SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args) |
| 2049 | { | 2050 | { |
| 2050 | unsigned long a[6]; | 2051 | unsigned long a[6]; |
| 2051 | unsigned long a0, a1; | 2052 | unsigned long a0, a1; |
diff --git a/net/tipc/bcast.h b/net/tipc/bcast.h index 5aa024b99c5..2f2d731bc1c 100644 --- a/net/tipc/bcast.h +++ b/net/tipc/bcast.h | |||
| @@ -124,7 +124,7 @@ static inline int tipc_nmap_equal(struct tipc_node_map *nm_a, struct tipc_node_m | |||
| 124 | static inline void tipc_nmap_diff(struct tipc_node_map *nm_a, struct tipc_node_map *nm_b, | 124 | static inline void tipc_nmap_diff(struct tipc_node_map *nm_a, struct tipc_node_map *nm_b, |
| 125 | struct tipc_node_map *nm_diff) | 125 | struct tipc_node_map *nm_diff) |
| 126 | { | 126 | { |
| 127 | int stop = sizeof(nm_a->map) / sizeof(u32); | 127 | int stop = ARRAY_SIZE(nm_a->map); |
| 128 | int w; | 128 | int w; |
| 129 | int b; | 129 | int b; |
| 130 | u32 map; | 130 | u32 map; |
diff --git a/net/xfrm/xfrm_ipcomp.c b/net/xfrm/xfrm_ipcomp.c index c609a4b98e1..42cd18391f4 100644 --- a/net/xfrm/xfrm_ipcomp.c +++ b/net/xfrm/xfrm_ipcomp.c | |||
| @@ -63,7 +63,6 @@ static int ipcomp_decompress(struct xfrm_state *x, struct sk_buff *skb) | |||
| 63 | if (len > skb_tailroom(skb)) | 63 | if (len > skb_tailroom(skb)) |
| 64 | len = skb_tailroom(skb); | 64 | len = skb_tailroom(skb); |
| 65 | 65 | ||
| 66 | skb->truesize += len; | ||
| 67 | __skb_put(skb, len); | 66 | __skb_put(skb, len); |
| 68 | 67 | ||
| 69 | len += plen; | 68 | len += plen; |
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index b95a2d64eb5..7877e7975da 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c | |||
| @@ -1914,10 +1914,17 @@ static int xfrm_send_migrate(struct xfrm_selector *sel, u8 dir, u8 type, | |||
| 1914 | } | 1914 | } |
| 1915 | #endif | 1915 | #endif |
| 1916 | 1916 | ||
| 1917 | /* For the xfrm_usersa_info cases we have to work around some 32-bit vs. | ||
| 1918 | * 64-bit compatability issues. On 32-bit the structure is 220 bytes, but | ||
| 1919 | * for 64-bit it gets padded out to 224 bytes. Those bytes are just | ||
| 1920 | * padding and don't have any content we care about. Therefore as long | ||
| 1921 | * as we have enough bytes for the content we can make both cases work. | ||
| 1922 | */ | ||
| 1923 | |||
| 1917 | #define XMSGSIZE(type) sizeof(struct type) | 1924 | #define XMSGSIZE(type) sizeof(struct type) |
| 1918 | 1925 | ||
| 1919 | static const int xfrm_msg_min[XFRM_NR_MSGTYPES] = { | 1926 | static const int xfrm_msg_min[XFRM_NR_MSGTYPES] = { |
| 1920 | [XFRM_MSG_NEWSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_info), | 1927 | [XFRM_MSG_NEWSA - XFRM_MSG_BASE] = 220, /* see above */ |
| 1921 | [XFRM_MSG_DELSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id), | 1928 | [XFRM_MSG_DELSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id), |
| 1922 | [XFRM_MSG_GETSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id), | 1929 | [XFRM_MSG_GETSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id), |
| 1923 | [XFRM_MSG_NEWPOLICY - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_info), | 1930 | [XFRM_MSG_NEWPOLICY - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_info), |
| @@ -1927,7 +1934,7 @@ static const int xfrm_msg_min[XFRM_NR_MSGTYPES] = { | |||
| 1927 | [XFRM_MSG_ACQUIRE - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_acquire), | 1934 | [XFRM_MSG_ACQUIRE - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_acquire), |
| 1928 | [XFRM_MSG_EXPIRE - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_expire), | 1935 | [XFRM_MSG_EXPIRE - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_expire), |
| 1929 | [XFRM_MSG_UPDPOLICY - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_info), | 1936 | [XFRM_MSG_UPDPOLICY - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_info), |
| 1930 | [XFRM_MSG_UPDSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_info), | 1937 | [XFRM_MSG_UPDSA - XFRM_MSG_BASE] = 220, /* see above */ |
| 1931 | [XFRM_MSG_POLEXPIRE - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_polexpire), | 1938 | [XFRM_MSG_POLEXPIRE - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_polexpire), |
| 1932 | [XFRM_MSG_FLUSHSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_flush), | 1939 | [XFRM_MSG_FLUSHSA - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_flush), |
| 1933 | [XFRM_MSG_FLUSHPOLICY - XFRM_MSG_BASE] = 0, | 1940 | [XFRM_MSG_FLUSHPOLICY - XFRM_MSG_BASE] = 0, |
