diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2012-03-19 20:02:01 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2012-03-19 20:02:01 -0400 |
commit | 10ce3cc919f50c2043b41ca968b43c26a3672600 (patch) | |
tree | ea409366a5208aced495bc0516a08b81fd43222e /net/socket.c | |
parent | 24e3e5ae1e4c2a3a32f5b1f96b4e3fd721806acd (diff) | |
parent | 5c6a7a62c130afef3d61c1dee153012231ff5cd9 (diff) |
Merge branch 'next' into for-linus
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/net/socket.c b/net/socket.c index 2877647f347b..28a96af484b4 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -538,6 +538,8 @@ int sock_tx_timestamp(struct sock *sk, __u8 *tx_flags) | |||
538 | *tx_flags |= SKBTX_HW_TSTAMP; | 538 | *tx_flags |= SKBTX_HW_TSTAMP; |
539 | if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE)) | 539 | if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE)) |
540 | *tx_flags |= SKBTX_SW_TSTAMP; | 540 | *tx_flags |= SKBTX_SW_TSTAMP; |
541 | if (sock_flag(sk, SOCK_WIFI_STATUS)) | ||
542 | *tx_flags |= SKBTX_WIFI_STATUS; | ||
541 | return 0; | 543 | return 0; |
542 | } | 544 | } |
543 | EXPORT_SYMBOL(sock_tx_timestamp); | 545 | EXPORT_SYMBOL(sock_tx_timestamp); |
@@ -549,6 +551,8 @@ static inline int __sock_sendmsg_nosec(struct kiocb *iocb, struct socket *sock, | |||
549 | 551 | ||
550 | sock_update_classid(sock->sk); | 552 | sock_update_classid(sock->sk); |
551 | 553 | ||
554 | sock_update_netprioidx(sock->sk); | ||
555 | |||
552 | si->sock = sock; | 556 | si->sock = sock; |
553 | si->scm = NULL; | 557 | si->scm = NULL; |
554 | si->msg = msg; | 558 | si->msg = msg; |
@@ -674,6 +678,22 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk, | |||
674 | } | 678 | } |
675 | EXPORT_SYMBOL_GPL(__sock_recv_timestamp); | 679 | EXPORT_SYMBOL_GPL(__sock_recv_timestamp); |
676 | 680 | ||
681 | void __sock_recv_wifi_status(struct msghdr *msg, struct sock *sk, | ||
682 | struct sk_buff *skb) | ||
683 | { | ||
684 | int ack; | ||
685 | |||
686 | if (!sock_flag(sk, SOCK_WIFI_STATUS)) | ||
687 | return; | ||
688 | if (!skb->wifi_acked_valid) | ||
689 | return; | ||
690 | |||
691 | ack = skb->wifi_acked; | ||
692 | |||
693 | put_cmsg(msg, SOL_SOCKET, SCM_WIFI_STATUS, sizeof(ack), &ack); | ||
694 | } | ||
695 | EXPORT_SYMBOL_GPL(__sock_recv_wifi_status); | ||
696 | |||
677 | static inline void sock_recv_drops(struct msghdr *msg, struct sock *sk, | 697 | static inline void sock_recv_drops(struct msghdr *msg, struct sock *sk, |
678 | struct sk_buff *skb) | 698 | struct sk_buff *skb) |
679 | { | 699 | { |
@@ -2472,7 +2492,7 @@ int sock_register(const struct net_proto_family *ops) | |||
2472 | lockdep_is_held(&net_family_lock))) | 2492 | lockdep_is_held(&net_family_lock))) |
2473 | err = -EEXIST; | 2493 | err = -EEXIST; |
2474 | else { | 2494 | else { |
2475 | RCU_INIT_POINTER(net_families[ops->family], ops); | 2495 | rcu_assign_pointer(net_families[ops->family], ops); |
2476 | err = 0; | 2496 | err = 0; |
2477 | } | 2497 | } |
2478 | spin_unlock(&net_family_lock); | 2498 | spin_unlock(&net_family_lock); |
@@ -2738,10 +2758,10 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) | |||
2738 | case ETHTOOL_GRXRINGS: | 2758 | case ETHTOOL_GRXRINGS: |
2739 | case ETHTOOL_GRXCLSRLCNT: | 2759 | case ETHTOOL_GRXCLSRLCNT: |
2740 | case ETHTOOL_GRXCLSRULE: | 2760 | case ETHTOOL_GRXCLSRULE: |
2761 | case ETHTOOL_SRXCLSRLINS: | ||
2741 | convert_out = true; | 2762 | convert_out = true; |
2742 | /* fall through */ | 2763 | /* fall through */ |
2743 | case ETHTOOL_SRXCLSRLDEL: | 2764 | case ETHTOOL_SRXCLSRLDEL: |
2744 | case ETHTOOL_SRXCLSRLINS: | ||
2745 | buf_size += sizeof(struct ethtool_rxnfc); | 2765 | buf_size += sizeof(struct ethtool_rxnfc); |
2746 | convert_in = true; | 2766 | convert_in = true; |
2747 | break; | 2767 | break; |
@@ -2883,7 +2903,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd, | |||
2883 | 2903 | ||
2884 | return dev_ioctl(net, cmd, uifr); | 2904 | return dev_ioctl(net, cmd, uifr); |
2885 | default: | 2905 | default: |
2886 | return -EINVAL; | 2906 | return -ENOIOCTLCMD; |
2887 | } | 2907 | } |
2888 | } | 2908 | } |
2889 | 2909 | ||
@@ -3210,20 +3230,6 @@ static int compat_sock_ioctl_trans(struct file *file, struct socket *sock, | |||
3210 | return sock_do_ioctl(net, sock, cmd, arg); | 3230 | return sock_do_ioctl(net, sock, cmd, arg); |
3211 | } | 3231 | } |
3212 | 3232 | ||
3213 | /* Prevent warning from compat_sys_ioctl, these always | ||
3214 | * result in -EINVAL in the native case anyway. */ | ||
3215 | switch (cmd) { | ||
3216 | case SIOCRTMSG: | ||
3217 | case SIOCGIFCOUNT: | ||
3218 | case SIOCSRARP: | ||
3219 | case SIOCGRARP: | ||
3220 | case SIOCDRARP: | ||
3221 | case SIOCSIFLINK: | ||
3222 | case SIOCGIFSLAVE: | ||
3223 | case SIOCSIFSLAVE: | ||
3224 | return -EINVAL; | ||
3225 | } | ||
3226 | |||
3227 | return -ENOIOCTLCMD; | 3233 | return -ENOIOCTLCMD; |
3228 | } | 3234 | } |
3229 | 3235 | ||