|
@@ -428,7 +428,6 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
|
|
char __user *optval, int optlen)
|
|
char __user *optval, int optlen)
|
|
{
|
|
{
|
|
struct sock *sk=sock->sk;
|
|
struct sock *sk=sock->sk;
|
|
- struct sk_filter *filter;
|
|
|
|
int val;
|
|
int val;
|
|
int valbool;
|
|
int valbool;
|
|
struct linger ling;
|
|
struct linger ling;
|
|
@@ -652,16 +651,7 @@ set_rcvbuf:
|
|
break;
|
|
break;
|
|
|
|
|
|
case SO_DETACH_FILTER:
|
|
case SO_DETACH_FILTER:
|
|
- rcu_read_lock_bh();
|
|
|
|
- filter = rcu_dereference(sk->sk_filter);
|
|
|
|
- if (filter) {
|
|
|
|
- rcu_assign_pointer(sk->sk_filter, NULL);
|
|
|
|
- sk_filter_release(sk, filter);
|
|
|
|
- rcu_read_unlock_bh();
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- rcu_read_unlock_bh();
|
|
|
|
- ret = -ENONET;
|
|
|
|
|
|
+ ret = sk_detach_filter(sk);
|
|
break;
|
|
break;
|
|
|
|
|
|
case SO_PASSSEC:
|
|
case SO_PASSSEC:
|