diff options
| -rw-r--r-- | drivers/bluetooth/bpa10x.c | 1 | ||||
| -rw-r--r-- | drivers/bluetooth/btsdio.c | 4 | ||||
| -rw-r--r-- | drivers/bluetooth/hci_usb.c | 1 | ||||
| -rw-r--r-- | drivers/net/Kconfig | 6 | ||||
| -rw-r--r-- | drivers/net/hamradio/dmascc.c | 4 | ||||
| -rw-r--r-- | drivers/net/tun.c | 4 | ||||
| -rw-r--r-- | include/linux/Kbuild | 1 | ||||
| -rw-r--r-- | include/linux/pkt_cls.h | 3 | ||||
| -rw-r--r-- | include/linux/rtnetlink.h | 12 | ||||
| -rw-r--r-- | include/linux/tc_ematch/tc_em_meta.h | 1 | ||||
| -rw-r--r-- | include/net/inet_hashtables.h | 2 | ||||
| -rw-r--r-- | include/net/ip_fib.h | 8 | ||||
| -rw-r--r-- | include/net/ipv6.h | 6 | ||||
| -rw-r--r-- | net/bluetooth/hidp/core.c | 49 | ||||
| -rw-r--r-- | net/bluetooth/rfcomm/tty.c | 3 | ||||
| -rw-r--r-- | net/core/rtnetlink.c | 44 | ||||
| -rw-r--r-- | net/ipv4/fib_trie.c | 3 | ||||
| -rw-r--r-- | net/ipv4/icmp.c | 3 | ||||
| -rw-r--r-- | net/ipv4/inet_hashtables.c | 6 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_mode_beet.c | 2 | ||||
| -rw-r--r-- | net/ipv6/icmp.c | 3 | ||||
| -rw-r--r-- | net/ipv6/inet6_hashtables.c | 2 | ||||
| -rw-r--r-- | net/sched/cls_flow.c | 4 | ||||
| -rw-r--r-- | net/sched/em_meta.c | 17 | ||||
| -rw-r--r-- | net/sctp/auth.c | 6 | ||||
| -rw-r--r-- | net/sctp/sm_statefuns.c | 4 |
26 files changed, 84 insertions, 115 deletions
diff --git a/drivers/bluetooth/bpa10x.c b/drivers/bluetooth/bpa10x.c index 1375b5345a0a..3b28658f5a1f 100644 --- a/drivers/bluetooth/bpa10x.c +++ b/drivers/bluetooth/bpa10x.c | |||
| @@ -423,6 +423,7 @@ static int bpa10x_send_frame(struct sk_buff *skb) | |||
| 423 | break; | 423 | break; |
| 424 | 424 | ||
| 425 | default: | 425 | default: |
| 426 | usb_free_urb(urb); | ||
| 426 | return -EILSEQ; | 427 | return -EILSEQ; |
| 427 | } | 428 | } |
| 428 | 429 | ||
diff --git a/drivers/bluetooth/btsdio.c b/drivers/bluetooth/btsdio.c index b786f6187902..58630cc1eff2 100644 --- a/drivers/bluetooth/btsdio.c +++ b/drivers/bluetooth/btsdio.c | |||
| @@ -162,10 +162,8 @@ static int btsdio_rx_packet(struct btsdio_data *data) | |||
| 162 | bt_cb(skb)->pkt_type = hdr[3]; | 162 | bt_cb(skb)->pkt_type = hdr[3]; |
| 163 | 163 | ||
| 164 | err = hci_recv_frame(skb); | 164 | err = hci_recv_frame(skb); |
| 165 | if (err < 0) { | 165 | if (err < 0) |
| 166 | kfree(skb); | ||
| 167 | return err; | 166 | return err; |
| 168 | } | ||
| 169 | 167 | ||
| 170 | sdio_writeb(data->func, 0x00, REG_PC_RRT, NULL); | 168 | sdio_writeb(data->func, 0x00, REG_PC_RRT, NULL); |
| 171 | 169 | ||
diff --git a/drivers/bluetooth/hci_usb.c b/drivers/bluetooth/hci_usb.c index 98a9cdeaffb6..372c7ef633da 100644 --- a/drivers/bluetooth/hci_usb.c +++ b/drivers/bluetooth/hci_usb.c | |||
| @@ -111,6 +111,7 @@ static struct usb_device_id blacklist_ids[] = { | |||
| 111 | { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE }, | 111 | { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE }, |
| 112 | 112 | ||
| 113 | /* Broadcom BCM2035 */ | 113 | /* Broadcom BCM2035 */ |
| 114 | { USB_DEVICE(0x0a5c, 0x2035), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU }, | ||
| 114 | { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU }, | 115 | { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_WRONG_SCO_MTU }, |
| 115 | { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 }, | 116 | { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 }, |
| 116 | 117 | ||
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index f234ba3f0404..7d170cd381c3 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
| @@ -920,8 +920,7 @@ config ENC28J60 | |||
| 920 | ---help--- | 920 | ---help--- |
| 921 | Support for the Microchip EN28J60 ethernet chip. | 921 | Support for the Microchip EN28J60 ethernet chip. |
| 922 | 922 | ||
| 923 | To compile this driver as a module, choose M here and read | 923 | To compile this driver as a module, choose M here. The module will be |
| 924 | <file:Documentation/networking/net-modules.txt>. The module will be | ||
| 925 | called enc28j60. | 924 | called enc28j60. |
| 926 | 925 | ||
| 927 | config ENC28J60_WRITEVERIFY | 926 | config ENC28J60_WRITEVERIFY |
| @@ -2041,8 +2040,7 @@ config IGB | |||
| 2041 | More specific information on configuring the driver is in | 2040 | More specific information on configuring the driver is in |
| 2042 | <file:Documentation/networking/e1000.txt>. | 2041 | <file:Documentation/networking/e1000.txt>. |
| 2043 | 2042 | ||
| 2044 | To compile this driver as a module, choose M here and read | 2043 | To compile this driver as a module, choose M here. The module |
| 2045 | <file:Documentation/networking/net-modules.txt>. The module | ||
| 2046 | will be called igb. | 2044 | will be called igb. |
| 2047 | 2045 | ||
| 2048 | source "drivers/net/ixp2000/Kconfig" | 2046 | source "drivers/net/ixp2000/Kconfig" |
diff --git a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c index 11b83dae00ac..e04bf9926441 100644 --- a/drivers/net/hamradio/dmascc.c +++ b/drivers/net/hamradio/dmascc.c | |||
| @@ -262,8 +262,8 @@ static void tm_isr(struct scc_priv *priv); | |||
| 262 | 262 | ||
| 263 | static int io[MAX_NUM_DEVS] __initdata = { 0, }; | 263 | static int io[MAX_NUM_DEVS] __initdata = { 0, }; |
| 264 | 264 | ||
| 265 | /* Beware! hw[] is also used in cleanup_module(). */ | 265 | /* Beware! hw[] is also used in dmascc_exit(). */ |
| 266 | static struct scc_hardware hw[NUM_TYPES] __initdata_or_module = HARDWARE; | 266 | static struct scc_hardware hw[NUM_TYPES] = HARDWARE; |
| 267 | 267 | ||
| 268 | 268 | ||
| 269 | /* Global variables */ | 269 | /* Global variables */ |
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 46339f6bcd00..038c1ef94d2e 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
| @@ -529,9 +529,13 @@ static int tun_set_iff(struct file *file, struct ifreq *ifr) | |||
| 529 | 529 | ||
| 530 | if (ifr->ifr_flags & IFF_NO_PI) | 530 | if (ifr->ifr_flags & IFF_NO_PI) |
| 531 | tun->flags |= TUN_NO_PI; | 531 | tun->flags |= TUN_NO_PI; |
| 532 | else | ||
| 533 | tun->flags &= ~TUN_NO_PI; | ||
| 532 | 534 | ||
| 533 | if (ifr->ifr_flags & IFF_ONE_QUEUE) | 535 | if (ifr->ifr_flags & IFF_ONE_QUEUE) |
| 534 | tun->flags |= TUN_ONE_QUEUE; | 536 | tun->flags |= TUN_ONE_QUEUE; |
| 537 | else | ||
| 538 | tun->flags &= ~TUN_ONE_QUEUE; | ||
| 535 | 539 | ||
| 536 | file->private_data = tun; | 540 | file->private_data = tun; |
| 537 | tun->attached = 1; | 541 | tun->attached = 1; |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index c0f9bb78727d..93631229fd5c 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -219,6 +219,7 @@ unifdef-y += i2c-dev.h | |||
| 219 | unifdef-y += icmp.h | 219 | unifdef-y += icmp.h |
| 220 | unifdef-y += icmpv6.h | 220 | unifdef-y += icmpv6.h |
| 221 | unifdef-y += if_addr.h | 221 | unifdef-y += if_addr.h |
| 222 | unifdef-y += if_addrlabel.h | ||
| 222 | unifdef-y += if_arp.h | 223 | unifdef-y += if_arp.h |
| 223 | unifdef-y += if_bridge.h | 224 | unifdef-y += if_bridge.h |
| 224 | unifdef-y += if_ec.h | 225 | unifdef-y += if_ec.h |
diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h index 1c1dba9ea5fb..40fac8c4559d 100644 --- a/include/linux/pkt_cls.h +++ b/include/linux/pkt_cls.h | |||
| @@ -459,7 +459,8 @@ enum | |||
| 459 | #define TCF_EM_U32 3 | 459 | #define TCF_EM_U32 3 |
| 460 | #define TCF_EM_META 4 | 460 | #define TCF_EM_META 4 |
| 461 | #define TCF_EM_TEXT 5 | 461 | #define TCF_EM_TEXT 5 |
| 462 | #define TCF_EM_MAX 5 | 462 | #define TCF_EM_VLAN 6 |
| 463 | #define TCF_EM_MAX 6 | ||
| 463 | 464 | ||
| 464 | enum | 465 | enum |
| 465 | { | 466 | { |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index b014f6b7fe29..b9e174079002 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
| @@ -602,24 +602,12 @@ struct tcamsg | |||
| 602 | 602 | ||
| 603 | #include <linux/mutex.h> | 603 | #include <linux/mutex.h> |
| 604 | 604 | ||
| 605 | extern size_t rtattr_strlcpy(char *dest, const struct rtattr *rta, size_t size); | ||
| 606 | static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) | 605 | static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) |
| 607 | { | 606 | { |
| 608 | int len = strlen(str) + 1; | 607 | int len = strlen(str) + 1; |
| 609 | return len > rta->rta_len || memcmp(RTA_DATA(rta), str, len); | 608 | return len > rta->rta_len || memcmp(RTA_DATA(rta), str, len); |
| 610 | } | 609 | } |
| 611 | 610 | ||
| 612 | extern int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len); | ||
| 613 | extern int __rtattr_parse_nested_compat(struct rtattr *tb[], int maxattr, | ||
| 614 | struct rtattr *rta, int len); | ||
| 615 | |||
| 616 | #define rtattr_parse_nested(tb, max, rta) \ | ||
| 617 | rtattr_parse((tb), (max), RTA_DATA((rta)), RTA_PAYLOAD((rta))) | ||
| 618 | |||
| 619 | #define rtattr_parse_nested_compat(tb, max, rta, data, len) \ | ||
| 620 | ({ data = RTA_PAYLOAD(rta) >= len ? RTA_DATA(rta) : NULL; \ | ||
| 621 | __rtattr_parse_nested_compat(tb, max, rta, len); }) | ||
| 622 | |||
| 623 | extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo); | 611 | extern int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, u32 group, int echo); |
| 624 | extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid); | 612 | extern int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid); |
| 625 | extern int rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, | 613 | extern int rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group, |
diff --git a/include/linux/tc_ematch/tc_em_meta.h b/include/linux/tc_ematch/tc_em_meta.h index e21937cf91d0..c50d2ba5caf0 100644 --- a/include/linux/tc_ematch/tc_em_meta.h +++ b/include/linux/tc_ematch/tc_em_meta.h | |||
| @@ -81,6 +81,7 @@ enum | |||
| 81 | TCF_META_ID_SK_SNDTIMEO, | 81 | TCF_META_ID_SK_SNDTIMEO, |
| 82 | TCF_META_ID_SK_SENDMSG_OFF, | 82 | TCF_META_ID_SK_SENDMSG_OFF, |
| 83 | TCF_META_ID_SK_WRITE_PENDING, | 83 | TCF_META_ID_SK_WRITE_PENDING, |
| 84 | TCF_META_ID_VLAN_TAG, | ||
| 84 | __TCF_META_ID_MAX | 85 | __TCF_META_ID_MAX |
| 85 | }; | 86 | }; |
| 86 | #define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1) | 87 | #define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1) |
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index 48ac620cb846..97dc35ad09be 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h | |||
| @@ -389,7 +389,7 @@ static inline struct sock *inet_lookup(struct net *net, | |||
| 389 | } | 389 | } |
| 390 | 390 | ||
| 391 | extern int __inet_hash_connect(struct inet_timewait_death_row *death_row, | 391 | extern int __inet_hash_connect(struct inet_timewait_death_row *death_row, |
| 392 | struct sock *sk, | 392 | struct sock *sk, u32 port_offset, |
| 393 | int (*check_established)(struct inet_timewait_death_row *, | 393 | int (*check_established)(struct inet_timewait_death_row *, |
| 394 | struct sock *, __u16, struct inet_timewait_sock **), | 394 | struct sock *, __u16, struct inet_timewait_sock **), |
| 395 | void (*hash)(struct sock *sk)); | 395 | void (*hash)(struct sock *sk)); |
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index 90d1175f63de..8b12667f7a2b 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h | |||
| @@ -266,6 +266,14 @@ static inline void fib_res_put(struct fib_result *res) | |||
| 266 | #ifdef CONFIG_PROC_FS | 266 | #ifdef CONFIG_PROC_FS |
| 267 | extern int __net_init fib_proc_init(struct net *net); | 267 | extern int __net_init fib_proc_init(struct net *net); |
| 268 | extern void __net_exit fib_proc_exit(struct net *net); | 268 | extern void __net_exit fib_proc_exit(struct net *net); |
| 269 | #else | ||
| 270 | static inline int fib_proc_init(struct net *net) | ||
| 271 | { | ||
| 272 | return 0; | ||
| 273 | } | ||
| 274 | static inline void fib_proc_exit(struct net *net) | ||
| 275 | { | ||
| 276 | } | ||
| 269 | #endif | 277 | #endif |
| 270 | 278 | ||
| 271 | #endif /* _NET_FIB_H */ | 279 | #endif /* _NET_FIB_H */ |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index fa80ea48639d..c0c019f72ba9 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
| @@ -110,7 +110,6 @@ struct frag_hdr { | |||
| 110 | 110 | ||
| 111 | /* sysctls */ | 111 | /* sysctls */ |
| 112 | extern int sysctl_mld_max_msf; | 112 | extern int sysctl_mld_max_msf; |
| 113 | |||
| 114 | extern struct ctl_path net_ipv6_ctl_path[]; | 113 | extern struct ctl_path net_ipv6_ctl_path[]; |
| 115 | 114 | ||
| 116 | #define _DEVINC(statname, modifier, idev, field) \ | 115 | #define _DEVINC(statname, modifier, idev, field) \ |
| @@ -586,9 +585,6 @@ extern int ip6_mc_msfget(struct sock *sk, struct group_filter *gsf, | |||
| 586 | int __user *optlen); | 585 | int __user *optlen); |
| 587 | 586 | ||
| 588 | #ifdef CONFIG_PROC_FS | 587 | #ifdef CONFIG_PROC_FS |
| 589 | extern struct ctl_table *ipv6_icmp_sysctl_init(struct net *net); | ||
| 590 | extern struct ctl_table *ipv6_route_sysctl_init(struct net *net); | ||
| 591 | |||
| 592 | extern int ac6_proc_init(void); | 588 | extern int ac6_proc_init(void); |
| 593 | extern void ac6_proc_exit(void); | 589 | extern void ac6_proc_exit(void); |
| 594 | extern int raw6_proc_init(void); | 590 | extern int raw6_proc_init(void); |
| @@ -621,6 +617,8 @@ static inline int snmp6_unregister_dev(struct inet6_dev *idev) | |||
| 621 | extern ctl_table ipv6_route_table_template[]; | 617 | extern ctl_table ipv6_route_table_template[]; |
| 622 | extern ctl_table ipv6_icmp_table_template[]; | 618 | extern ctl_table ipv6_icmp_table_template[]; |
| 623 | 619 | ||
| 620 | extern struct ctl_table *ipv6_icmp_sysctl_init(struct net *net); | ||
| 621 | extern struct ctl_table *ipv6_route_sysctl_init(struct net *net); | ||
| 624 | extern int ipv6_sysctl_register(void); | 622 | extern int ipv6_sysctl_register(void); |
| 625 | extern void ipv6_sysctl_unregister(void); | 623 | extern void ipv6_sysctl_unregister(void); |
| 626 | #endif | 624 | #endif |
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index 782a22602b86..519cdb920f93 100644 --- a/net/bluetooth/hidp/core.c +++ b/net/bluetooth/hidp/core.c | |||
| @@ -135,8 +135,8 @@ static void __hidp_copy_session(struct hidp_session *session, struct hidp_connin | |||
| 135 | } | 135 | } |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | static inline int hidp_queue_event(struct hidp_session *session, struct input_dev *dev, | 138 | static int hidp_queue_event(struct hidp_session *session, struct input_dev *dev, |
| 139 | unsigned int type, unsigned int code, int value) | 139 | unsigned int type, unsigned int code, int value) |
| 140 | { | 140 | { |
| 141 | unsigned char newleds; | 141 | unsigned char newleds; |
| 142 | struct sk_buff *skb; | 142 | struct sk_buff *skb; |
| @@ -243,7 +243,8 @@ static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb) | |||
| 243 | input_sync(dev); | 243 | input_sync(dev); |
| 244 | } | 244 | } |
| 245 | 245 | ||
| 246 | static inline int hidp_queue_report(struct hidp_session *session, unsigned char *data, int size) | 246 | static int hidp_queue_report(struct hidp_session *session, |
| 247 | unsigned char *data, int size) | ||
| 247 | { | 248 | { |
| 248 | struct sk_buff *skb; | 249 | struct sk_buff *skb; |
| 249 | 250 | ||
| @@ -287,7 +288,7 @@ static void hidp_idle_timeout(unsigned long arg) | |||
| 287 | hidp_schedule(session); | 288 | hidp_schedule(session); |
| 288 | } | 289 | } |
| 289 | 290 | ||
| 290 | static inline void hidp_set_timer(struct hidp_session *session) | 291 | static void hidp_set_timer(struct hidp_session *session) |
| 291 | { | 292 | { |
| 292 | if (session->idle_to > 0) | 293 | if (session->idle_to > 0) |
| 293 | mod_timer(&session->timer, jiffies + HZ * session->idle_to); | 294 | mod_timer(&session->timer, jiffies + HZ * session->idle_to); |
| @@ -332,7 +333,8 @@ static inline int hidp_send_ctrl_message(struct hidp_session *session, | |||
| 332 | return err; | 333 | return err; |
| 333 | } | 334 | } |
| 334 | 335 | ||
| 335 | static inline void hidp_process_handshake(struct hidp_session *session, unsigned char param) | 336 | static void hidp_process_handshake(struct hidp_session *session, |
| 337 | unsigned char param) | ||
| 336 | { | 338 | { |
| 337 | BT_DBG("session %p param 0x%02x", session, param); | 339 | BT_DBG("session %p param 0x%02x", session, param); |
| 338 | 340 | ||
| @@ -365,38 +367,23 @@ static inline void hidp_process_handshake(struct hidp_session *session, unsigned | |||
| 365 | } | 367 | } |
| 366 | } | 368 | } |
| 367 | 369 | ||
| 368 | static inline void hidp_process_hid_control(struct hidp_session *session, unsigned char param) | 370 | static void hidp_process_hid_control(struct hidp_session *session, |
| 371 | unsigned char param) | ||
| 369 | { | 372 | { |
| 370 | BT_DBG("session %p param 0x%02x", session, param); | 373 | BT_DBG("session %p param 0x%02x", session, param); |
| 371 | 374 | ||
| 372 | switch (param) { | 375 | if (param == HIDP_CTRL_VIRTUAL_CABLE_UNPLUG) { |
| 373 | case HIDP_CTRL_NOP: | ||
| 374 | break; | ||
| 375 | |||
| 376 | case HIDP_CTRL_VIRTUAL_CABLE_UNPLUG: | ||
| 377 | /* Flush the transmit queues */ | 376 | /* Flush the transmit queues */ |
| 378 | skb_queue_purge(&session->ctrl_transmit); | 377 | skb_queue_purge(&session->ctrl_transmit); |
| 379 | skb_queue_purge(&session->intr_transmit); | 378 | skb_queue_purge(&session->intr_transmit); |
| 380 | 379 | ||
| 381 | /* Kill session thread */ | 380 | /* Kill session thread */ |
| 382 | atomic_inc(&session->terminate); | 381 | atomic_inc(&session->terminate); |
| 383 | break; | ||
| 384 | |||
| 385 | case HIDP_CTRL_HARD_RESET: | ||
| 386 | case HIDP_CTRL_SOFT_RESET: | ||
| 387 | case HIDP_CTRL_SUSPEND: | ||
| 388 | case HIDP_CTRL_EXIT_SUSPEND: | ||
| 389 | /* FIXME: We have to parse these and return no error */ | ||
| 390 | break; | ||
| 391 | |||
| 392 | default: | ||
| 393 | __hidp_send_ctrl_message(session, | ||
| 394 | HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0); | ||
| 395 | break; | ||
| 396 | } | 382 | } |
| 397 | } | 383 | } |
| 398 | 384 | ||
| 399 | static inline void hidp_process_data(struct hidp_session *session, struct sk_buff *skb, unsigned char param) | 385 | static void hidp_process_data(struct hidp_session *session, struct sk_buff *skb, |
| 386 | unsigned char param) | ||
| 400 | { | 387 | { |
| 401 | BT_DBG("session %p skb %p len %d param 0x%02x", session, skb, skb->len, param); | 388 | BT_DBG("session %p skb %p len %d param 0x%02x", session, skb, skb->len, param); |
| 402 | 389 | ||
| @@ -423,7 +410,8 @@ static inline void hidp_process_data(struct hidp_session *session, struct sk_buf | |||
| 423 | } | 410 | } |
| 424 | } | 411 | } |
| 425 | 412 | ||
| 426 | static inline void hidp_recv_ctrl_frame(struct hidp_session *session, struct sk_buff *skb) | 413 | static void hidp_recv_ctrl_frame(struct hidp_session *session, |
| 414 | struct sk_buff *skb) | ||
| 427 | { | 415 | { |
| 428 | unsigned char hdr, type, param; | 416 | unsigned char hdr, type, param; |
| 429 | 417 | ||
| @@ -457,7 +445,8 @@ static inline void hidp_recv_ctrl_frame(struct hidp_session *session, struct sk_ | |||
| 457 | kfree_skb(skb); | 445 | kfree_skb(skb); |
| 458 | } | 446 | } |
| 459 | 447 | ||
| 460 | static inline void hidp_recv_intr_frame(struct hidp_session *session, struct sk_buff *skb) | 448 | static void hidp_recv_intr_frame(struct hidp_session *session, |
| 449 | struct sk_buff *skb) | ||
| 461 | { | 450 | { |
| 462 | unsigned char hdr; | 451 | unsigned char hdr; |
| 463 | 452 | ||
| @@ -625,7 +614,8 @@ static struct device *hidp_get_device(struct hidp_session *session) | |||
| 625 | return conn ? &conn->dev : NULL; | 614 | return conn ? &conn->dev : NULL; |
| 626 | } | 615 | } |
| 627 | 616 | ||
| 628 | static inline int hidp_setup_input(struct hidp_session *session, struct hidp_connadd_req *req) | 617 | static int hidp_setup_input(struct hidp_session *session, |
| 618 | struct hidp_connadd_req *req) | ||
| 629 | { | 619 | { |
| 630 | struct input_dev *input = session->input; | 620 | struct input_dev *input = session->input; |
| 631 | int i; | 621 | int i; |
| @@ -702,7 +692,8 @@ static void hidp_setup_quirks(struct hid_device *hid) | |||
| 702 | hid->quirks = hidp_blacklist[n].quirks; | 692 | hid->quirks = hidp_blacklist[n].quirks; |
| 703 | } | 693 | } |
| 704 | 694 | ||
| 705 | static inline void hidp_setup_hid(struct hidp_session *session, struct hidp_connadd_req *req) | 695 | static void hidp_setup_hid(struct hidp_session *session, |
| 696 | struct hidp_connadd_req *req) | ||
| 706 | { | 697 | { |
| 707 | struct hid_device *hid = session->hid; | 698 | struct hid_device *hid = session->hid; |
| 708 | struct hid_report *report; | 699 | struct hid_report *report; |
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index 788c70321858..e4c779bb8d76 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c | |||
| @@ -429,7 +429,8 @@ static int rfcomm_release_dev(void __user *arg) | |||
| 429 | if (dev->tty) | 429 | if (dev->tty) |
| 430 | tty_vhangup(dev->tty); | 430 | tty_vhangup(dev->tty); |
| 431 | 431 | ||
| 432 | rfcomm_dev_del(dev); | 432 | if (!test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) |
| 433 | rfcomm_dev_del(dev); | ||
| 433 | rfcomm_dev_put(dev); | 434 | rfcomm_dev_put(dev); |
| 434 | return 0; | 435 | return 0; |
| 435 | } | 436 | } |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index ddbdde82a700..61ac8d06292c 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
| @@ -82,32 +82,6 @@ int rtnl_trylock(void) | |||
| 82 | return mutex_trylock(&rtnl_mutex); | 82 | return mutex_trylock(&rtnl_mutex); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len) | ||
| 86 | { | ||
| 87 | memset(tb, 0, sizeof(struct rtattr*)*maxattr); | ||
| 88 | |||
| 89 | while (RTA_OK(rta, len)) { | ||
| 90 | unsigned flavor = rta->rta_type; | ||
| 91 | if (flavor && flavor <= maxattr) | ||
| 92 | tb[flavor-1] = rta; | ||
| 93 | rta = RTA_NEXT(rta, len); | ||
| 94 | } | ||
| 95 | return 0; | ||
| 96 | } | ||
| 97 | |||
| 98 | int __rtattr_parse_nested_compat(struct rtattr *tb[], int maxattr, | ||
| 99 | struct rtattr *rta, int len) | ||
| 100 | { | ||
| 101 | if (RTA_PAYLOAD(rta) < len) | ||
| 102 | return -1; | ||
| 103 | if (RTA_PAYLOAD(rta) >= RTA_ALIGN(len) + sizeof(struct rtattr)) { | ||
| 104 | rta = RTA_DATA(rta) + RTA_ALIGN(len); | ||
| 105 | return rtattr_parse_nested(tb, maxattr, rta); | ||
| 106 | } | ||
| 107 | memset(tb, 0, sizeof(struct rtattr *) * maxattr); | ||
| 108 | return 0; | ||
| 109 | } | ||
| 110 | |||
| 111 | static struct rtnl_link *rtnl_msg_handlers[NPROTO]; | 85 | static struct rtnl_link *rtnl_msg_handlers[NPROTO]; |
| 112 | 86 | ||
| 113 | static inline int rtm_msgindex(int msgtype) | 87 | static inline int rtm_msgindex(int msgtype) |
| @@ -442,21 +416,6 @@ void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data | |||
| 442 | memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size); | 416 | memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size); |
| 443 | } | 417 | } |
| 444 | 418 | ||
| 445 | size_t rtattr_strlcpy(char *dest, const struct rtattr *rta, size_t size) | ||
| 446 | { | ||
| 447 | size_t ret = RTA_PAYLOAD(rta); | ||
| 448 | char *src = RTA_DATA(rta); | ||
| 449 | |||
| 450 | if (ret > 0 && src[ret - 1] == '\0') | ||
| 451 | ret--; | ||
| 452 | if (size > 0) { | ||
| 453 | size_t len = (ret >= size) ? size - 1 : ret; | ||
| 454 | memset(dest, 0, size); | ||
| 455 | memcpy(dest, src, len); | ||
| 456 | } | ||
| 457 | return ret; | ||
| 458 | } | ||
| 459 | |||
| 460 | int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group, int echo) | 419 | int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group, int echo) |
| 461 | { | 420 | { |
| 462 | struct sock *rtnl = net->rtnl; | 421 | struct sock *rtnl = net->rtnl; |
| @@ -1411,9 +1370,6 @@ void __init rtnetlink_init(void) | |||
| 1411 | } | 1370 | } |
| 1412 | 1371 | ||
| 1413 | EXPORT_SYMBOL(__rta_fill); | 1372 | EXPORT_SYMBOL(__rta_fill); |
| 1414 | EXPORT_SYMBOL(rtattr_strlcpy); | ||
| 1415 | EXPORT_SYMBOL(rtattr_parse); | ||
| 1416 | EXPORT_SYMBOL(__rtattr_parse_nested_compat); | ||
| 1417 | EXPORT_SYMBOL(rtnetlink_put_metrics); | 1373 | EXPORT_SYMBOL(rtnetlink_put_metrics); |
| 1418 | EXPORT_SYMBOL(rtnl_lock); | 1374 | EXPORT_SYMBOL(rtnl_lock); |
| 1419 | EXPORT_SYMBOL(rtnl_trylock); | 1375 | EXPORT_SYMBOL(rtnl_trylock); |
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 35851c96bdfb..f5fba3f71c06 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
| @@ -2431,8 +2431,7 @@ static int fib_trie_seq_show(struct seq_file *seq, void *v) | |||
| 2431 | rtn_type(buf2, sizeof(buf2), | 2431 | rtn_type(buf2, sizeof(buf2), |
| 2432 | fa->fa_type)); | 2432 | fa->fa_type)); |
| 2433 | if (fa->fa_tos) | 2433 | if (fa->fa_tos) |
| 2434 | seq_printf(seq, "tos =%d\n", | 2434 | seq_printf(seq, " tos=%d", fa->fa_tos); |
| 2435 | fa->fa_tos); | ||
| 2436 | seq_putc(seq, '\n'); | 2435 | seq_putc(seq, '\n'); |
| 2437 | } | 2436 | } |
| 2438 | } | 2437 | } |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index a7321a82df6d..a13c074dac09 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
| @@ -1015,7 +1015,8 @@ int icmp_rcv(struct sk_buff *skb) | |||
| 1015 | goto error; | 1015 | goto error; |
| 1016 | } | 1016 | } |
| 1017 | 1017 | ||
| 1018 | __skb_pull(skb, sizeof(*icmph)); | 1018 | if (!pskb_pull(skb, sizeof(*icmph))) |
| 1019 | goto error; | ||
| 1019 | 1020 | ||
| 1020 | icmph = icmp_hdr(skb); | 1021 | icmph = icmp_hdr(skb); |
| 1021 | 1022 | ||
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index 90f422c9447b..9cac6c034abd 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c | |||
| @@ -398,7 +398,7 @@ out: | |||
| 398 | EXPORT_SYMBOL_GPL(inet_unhash); | 398 | EXPORT_SYMBOL_GPL(inet_unhash); |
| 399 | 399 | ||
| 400 | int __inet_hash_connect(struct inet_timewait_death_row *death_row, | 400 | int __inet_hash_connect(struct inet_timewait_death_row *death_row, |
| 401 | struct sock *sk, | 401 | struct sock *sk, u32 port_offset, |
| 402 | int (*check_established)(struct inet_timewait_death_row *, | 402 | int (*check_established)(struct inet_timewait_death_row *, |
| 403 | struct sock *, __u16, struct inet_timewait_sock **), | 403 | struct sock *, __u16, struct inet_timewait_sock **), |
| 404 | void (*hash)(struct sock *sk)) | 404 | void (*hash)(struct sock *sk)) |
| @@ -413,7 +413,7 @@ int __inet_hash_connect(struct inet_timewait_death_row *death_row, | |||
| 413 | if (!snum) { | 413 | if (!snum) { |
| 414 | int i, remaining, low, high, port; | 414 | int i, remaining, low, high, port; |
| 415 | static u32 hint; | 415 | static u32 hint; |
| 416 | u32 offset = hint + inet_sk_port_offset(sk); | 416 | u32 offset = hint + port_offset; |
| 417 | struct hlist_node *node; | 417 | struct hlist_node *node; |
| 418 | struct inet_timewait_sock *tw = NULL; | 418 | struct inet_timewait_sock *tw = NULL; |
| 419 | 419 | ||
| @@ -502,7 +502,7 @@ EXPORT_SYMBOL_GPL(__inet_hash_connect); | |||
| 502 | int inet_hash_connect(struct inet_timewait_death_row *death_row, | 502 | int inet_hash_connect(struct inet_timewait_death_row *death_row, |
| 503 | struct sock *sk) | 503 | struct sock *sk) |
| 504 | { | 504 | { |
| 505 | return __inet_hash_connect(death_row, sk, | 505 | return __inet_hash_connect(death_row, sk, inet_sk_port_offset(sk), |
| 506 | __inet_check_established, __inet_hash_nolisten); | 506 | __inet_check_established, __inet_hash_nolisten); |
| 507 | } | 507 | } |
| 508 | 508 | ||
diff --git a/net/ipv4/xfrm4_mode_beet.c b/net/ipv4/xfrm4_mode_beet.c index e093a7b59e18..b47030ba162b 100644 --- a/net/ipv4/xfrm4_mode_beet.c +++ b/net/ipv4/xfrm4_mode_beet.c | |||
| @@ -102,7 +102,7 @@ static int xfrm4_beet_input(struct xfrm_state *x, struct sk_buff *skb) | |||
| 102 | 102 | ||
| 103 | XFRM_MODE_SKB_CB(skb)->protocol = ph->nexthdr; | 103 | XFRM_MODE_SKB_CB(skb)->protocol = ph->nexthdr; |
| 104 | 104 | ||
| 105 | if (!pskb_may_pull(skb, phlen)); | 105 | if (!pskb_may_pull(skb, phlen)) |
| 106 | goto out; | 106 | goto out; |
| 107 | __skb_pull(skb, phlen); | 107 | __skb_pull(skb, phlen); |
| 108 | } | 108 | } |
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index cbb5b9cf84ad..121d517bf91c 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
| @@ -683,7 +683,8 @@ static int icmpv6_rcv(struct sk_buff *skb) | |||
| 683 | } | 683 | } |
| 684 | } | 684 | } |
| 685 | 685 | ||
| 686 | __skb_pull(skb, sizeof(*hdr)); | 686 | if (!pskb_pull(skb, sizeof(*hdr))) |
| 687 | goto discard_it; | ||
| 687 | 688 | ||
| 688 | hdr = icmp6_hdr(skb); | 689 | hdr = icmp6_hdr(skb); |
| 689 | 690 | ||
diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c index 43f3993e1f30..99fd25f7f005 100644 --- a/net/ipv6/inet6_hashtables.c +++ b/net/ipv6/inet6_hashtables.c | |||
| @@ -236,7 +236,7 @@ static inline u32 inet6_sk_port_offset(const struct sock *sk) | |||
| 236 | int inet6_hash_connect(struct inet_timewait_death_row *death_row, | 236 | int inet6_hash_connect(struct inet_timewait_death_row *death_row, |
| 237 | struct sock *sk) | 237 | struct sock *sk) |
| 238 | { | 238 | { |
| 239 | return __inet_hash_connect(death_row, sk, | 239 | return __inet_hash_connect(death_row, sk, inet6_sk_port_offset(sk), |
| 240 | __inet6_check_established, __inet6_hash); | 240 | __inet6_check_established, __inet6_hash); |
| 241 | } | 241 | } |
| 242 | 242 | ||
diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c index 5a7f6a3060fc..8d7698621f0a 100644 --- a/net/sched/cls_flow.c +++ b/net/sched/cls_flow.c | |||
| @@ -594,11 +594,11 @@ static int flow_dump(struct tcf_proto *tp, unsigned long fh, | |||
| 594 | 594 | ||
| 595 | if (tcf_exts_dump(skb, &f->exts, &flow_ext_map) < 0) | 595 | if (tcf_exts_dump(skb, &f->exts, &flow_ext_map) < 0) |
| 596 | goto nla_put_failure; | 596 | goto nla_put_failure; |
| 597 | 597 | #ifdef CONFIG_NET_EMATCH | |
| 598 | if (f->ematches.hdr.nmatches && | 598 | if (f->ematches.hdr.nmatches && |
| 599 | tcf_em_tree_dump(skb, &f->ematches, TCA_FLOW_EMATCHES) < 0) | 599 | tcf_em_tree_dump(skb, &f->ematches, TCA_FLOW_EMATCHES) < 0) |
| 600 | goto nla_put_failure; | 600 | goto nla_put_failure; |
| 601 | 601 | #endif | |
| 602 | nla_nest_end(skb, nest); | 602 | nla_nest_end(skb, nest); |
| 603 | 603 | ||
| 604 | if (tcf_exts_dump_stats(skb, &f->exts, &flow_ext_map) < 0) | 604 | if (tcf_exts_dump_stats(skb, &f->exts, &flow_ext_map) < 0) |
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c index a1e5619b1876..9c2ec1992a2a 100644 --- a/net/sched/em_meta.c +++ b/net/sched/em_meta.c | |||
| @@ -65,6 +65,7 @@ | |||
| 65 | #include <linux/string.h> | 65 | #include <linux/string.h> |
| 66 | #include <linux/skbuff.h> | 66 | #include <linux/skbuff.h> |
| 67 | #include <linux/random.h> | 67 | #include <linux/random.h> |
| 68 | #include <linux/if_vlan.h> | ||
| 68 | #include <linux/tc_ematch/tc_em_meta.h> | 69 | #include <linux/tc_ematch/tc_em_meta.h> |
| 69 | #include <net/dst.h> | 70 | #include <net/dst.h> |
| 70 | #include <net/route.h> | 71 | #include <net/route.h> |
| @@ -170,6 +171,21 @@ META_COLLECTOR(var_dev) | |||
| 170 | } | 171 | } |
| 171 | 172 | ||
| 172 | /************************************************************************** | 173 | /************************************************************************** |
| 174 | * vlan tag | ||
| 175 | **************************************************************************/ | ||
| 176 | |||
| 177 | META_COLLECTOR(int_vlan_tag) | ||
| 178 | { | ||
| 179 | unsigned short tag; | ||
| 180 | if (vlan_get_tag(skb, &tag) < 0) | ||
| 181 | *err = -1; | ||
| 182 | else | ||
| 183 | dst->value = tag; | ||
| 184 | } | ||
| 185 | |||
| 186 | |||
| 187 | |||
| 188 | /************************************************************************** | ||
| 173 | * skb attributes | 189 | * skb attributes |
| 174 | **************************************************************************/ | 190 | **************************************************************************/ |
| 175 | 191 | ||
| @@ -520,6 +536,7 @@ static struct meta_ops __meta_ops[TCF_META_TYPE_MAX+1][TCF_META_ID_MAX+1] = { | |||
| 520 | [META_ID(SK_SNDTIMEO)] = META_FUNC(int_sk_sndtimeo), | 536 | [META_ID(SK_SNDTIMEO)] = META_FUNC(int_sk_sndtimeo), |
| 521 | [META_ID(SK_SENDMSG_OFF)] = META_FUNC(int_sk_sendmsg_off), | 537 | [META_ID(SK_SENDMSG_OFF)] = META_FUNC(int_sk_sendmsg_off), |
| 522 | [META_ID(SK_WRITE_PENDING)] = META_FUNC(int_sk_write_pend), | 538 | [META_ID(SK_WRITE_PENDING)] = META_FUNC(int_sk_write_pend), |
| 539 | [META_ID(VLAN_TAG)] = META_FUNC(int_vlan_tag), | ||
| 523 | } | 540 | } |
| 524 | }; | 541 | }; |
| 525 | 542 | ||
diff --git a/net/sctp/auth.c b/net/sctp/auth.c index 97e6ebd14500..ae367c82e512 100644 --- a/net/sctp/auth.c +++ b/net/sctp/auth.c | |||
| @@ -420,15 +420,15 @@ struct sctp_shared_key *sctp_auth_get_shkey( | |||
| 420 | const struct sctp_association *asoc, | 420 | const struct sctp_association *asoc, |
| 421 | __u16 key_id) | 421 | __u16 key_id) |
| 422 | { | 422 | { |
| 423 | struct sctp_shared_key *key = NULL; | 423 | struct sctp_shared_key *key; |
| 424 | 424 | ||
| 425 | /* First search associations set of endpoint pair shared keys */ | 425 | /* First search associations set of endpoint pair shared keys */ |
| 426 | key_for_each(key, &asoc->endpoint_shared_keys) { | 426 | key_for_each(key, &asoc->endpoint_shared_keys) { |
| 427 | if (key->key_id == key_id) | 427 | if (key->key_id == key_id) |
| 428 | break; | 428 | return key; |
| 429 | } | 429 | } |
| 430 | 430 | ||
| 431 | return key; | 431 | return NULL; |
| 432 | } | 432 | } |
| 433 | 433 | ||
| 434 | /* | 434 | /* |
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index 5df0c4bd415b..f98658782d4f 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c | |||
| @@ -3865,6 +3865,10 @@ sctp_disposition_t sctp_sf_eat_auth(const struct sctp_endpoint *ep, | |||
| 3865 | struct sctp_chunk *err_chunk; | 3865 | struct sctp_chunk *err_chunk; |
| 3866 | sctp_ierror_t error; | 3866 | sctp_ierror_t error; |
| 3867 | 3867 | ||
| 3868 | /* Make sure that the peer has AUTH capable */ | ||
| 3869 | if (!asoc->peer.auth_capable) | ||
| 3870 | return sctp_sf_unk_chunk(ep, asoc, type, arg, commands); | ||
| 3871 | |||
| 3868 | if (!sctp_vtag_verify(chunk, asoc)) { | 3872 | if (!sctp_vtag_verify(chunk, asoc)) { |
| 3869 | sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, | 3873 | sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, |
| 3870 | SCTP_NULL()); | 3874 | SCTP_NULL()); |
