diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index a692ef49c9bb..fe96c5d34299 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -583,7 +583,7 @@ static int sock_getbindtodevice(struct sock *sk, char __user *optval, | |||
583 | goto out; | 583 | goto out; |
584 | 584 | ||
585 | retry: | 585 | retry: |
586 | seq = read_seqbegin(&devnet_rename_seq); | 586 | seq = read_seqcount_begin(&devnet_rename_seq); |
587 | rcu_read_lock(); | 587 | rcu_read_lock(); |
588 | dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if); | 588 | dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if); |
589 | ret = -ENODEV; | 589 | ret = -ENODEV; |
@@ -594,7 +594,7 @@ retry: | |||
594 | 594 | ||
595 | strcpy(devname, dev->name); | 595 | strcpy(devname, dev->name); |
596 | rcu_read_unlock(); | 596 | rcu_read_unlock(); |
597 | if (read_seqretry(&devnet_rename_seq, seq)) | 597 | if (read_seqcount_retry(&devnet_rename_seq, seq)) |
598 | goto retry; | 598 | goto retry; |
599 | 599 | ||
600 | len = strlen(devname) + 1; | 600 | len = strlen(devname) + 1; |
@@ -665,6 +665,9 @@ int sock_setsockopt(struct socket *sock, int level, int optname, | |||
665 | case SO_REUSEADDR: | 665 | case SO_REUSEADDR: |
666 | sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE); | 666 | sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE); |
667 | break; | 667 | break; |
668 | case SO_REUSEPORT: | ||
669 | sk->sk_reuseport = valbool; | ||
670 | break; | ||
668 | case SO_TYPE: | 671 | case SO_TYPE: |
669 | case SO_PROTOCOL: | 672 | case SO_PROTOCOL: |
670 | case SO_DOMAIN: | 673 | case SO_DOMAIN: |
@@ -861,6 +864,13 @@ set_rcvbuf: | |||
861 | ret = sk_detach_filter(sk); | 864 | ret = sk_detach_filter(sk); |
862 | break; | 865 | break; |
863 | 866 | ||
867 | case SO_LOCK_FILTER: | ||
868 | if (sock_flag(sk, SOCK_FILTER_LOCKED) && !valbool) | ||
869 | ret = -EPERM; | ||
870 | else | ||
871 | sock_valbool_flag(sk, SOCK_FILTER_LOCKED, valbool); | ||
872 | break; | ||
873 | |||
864 | case SO_PASSSEC: | 874 | case SO_PASSSEC: |
865 | if (valbool) | 875 | if (valbool) |
866 | set_bit(SOCK_PASSSEC, &sock->flags); | 876 | set_bit(SOCK_PASSSEC, &sock->flags); |
@@ -965,6 +975,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname, | |||
965 | v.val = sk->sk_reuse; | 975 | v.val = sk->sk_reuse; |
966 | break; | 976 | break; |
967 | 977 | ||
978 | case SO_REUSEPORT: | ||
979 | v.val = sk->sk_reuseport; | ||
980 | break; | ||
981 | |||
968 | case SO_KEEPALIVE: | 982 | case SO_KEEPALIVE: |
969 | v.val = sock_flag(sk, SOCK_KEEPOPEN); | 983 | v.val = sock_flag(sk, SOCK_KEEPOPEN); |
970 | break; | 984 | break; |
@@ -1140,6 +1154,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname, | |||
1140 | 1154 | ||
1141 | goto lenout; | 1155 | goto lenout; |
1142 | 1156 | ||
1157 | case SO_LOCK_FILTER: | ||
1158 | v.val = sock_flag(sk, SOCK_FILTER_LOCKED); | ||
1159 | break; | ||
1160 | |||
1143 | default: | 1161 | default: |
1144 | return -ENOPROTOOPT; | 1162 | return -ENOPROTOOPT; |
1145 | } | 1163 | } |
@@ -2212,7 +2230,7 @@ EXPORT_SYMBOL(sk_reset_timer); | |||
2212 | 2230 | ||
2213 | void sk_stop_timer(struct sock *sk, struct timer_list* timer) | 2231 | void sk_stop_timer(struct sock *sk, struct timer_list* timer) |
2214 | { | 2232 | { |
2215 | if (timer_pending(timer) && del_timer(timer)) | 2233 | if (del_timer(timer)) |
2216 | __sock_put(sk); | 2234 | __sock_put(sk); |
2217 | } | 2235 | } |
2218 | EXPORT_SYMBOL(sk_stop_timer); | 2236 | EXPORT_SYMBOL(sk_stop_timer); |
@@ -2818,7 +2836,7 @@ static const struct file_operations proto_seq_fops = { | |||
2818 | 2836 | ||
2819 | static __net_init int proto_init_net(struct net *net) | 2837 | static __net_init int proto_init_net(struct net *net) |
2820 | { | 2838 | { |
2821 | if (!proc_net_fops_create(net, "protocols", S_IRUGO, &proto_seq_fops)) | 2839 | if (!proc_create("protocols", S_IRUGO, net->proc_net, &proto_seq_fops)) |
2822 | return -ENOMEM; | 2840 | return -ENOMEM; |
2823 | 2841 | ||
2824 | return 0; | 2842 | return 0; |
@@ -2826,7 +2844,7 @@ static __net_init int proto_init_net(struct net *net) | |||
2826 | 2844 | ||
2827 | static __net_exit void proto_exit_net(struct net *net) | 2845 | static __net_exit void proto_exit_net(struct net *net) |
2828 | { | 2846 | { |
2829 | proc_net_remove(net, "protocols"); | 2847 | remove_proc_entry("protocols", net->proc_net); |
2830 | } | 2848 | } |
2831 | 2849 | ||
2832 | 2850 | ||