diff options
| -rw-r--r-- | include/net/ipv6.h | 4 | ||||
| -rw-r--r-- | net/ipv6/ipv6_sockglue.c | 7 | ||||
| -rw-r--r-- | net/ipv6/raw.c | 2 |
3 files changed, 4 insertions, 9 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index c2222ee74d66..6b7982d3dda0 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
| @@ -227,9 +227,7 @@ static inline void fl6_sock_release(struct ip6_flowlabel *fl) | |||
| 227 | atomic_dec(&fl->users); | 227 | atomic_dec(&fl->users); |
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | extern int ip6_ra_control(struct sock *sk, int sel, | 230 | extern int ip6_ra_control(struct sock *sk, int sel); |
| 231 | void (*destructor)(struct sock *)); | ||
| 232 | |||
| 233 | 231 | ||
| 234 | extern int ipv6_parse_hopopts(struct sk_buff *skb); | 232 | extern int ipv6_parse_hopopts(struct sk_buff *skb); |
| 235 | 233 | ||
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 030c0c956f9d..8c6ea07f4d56 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
| @@ -59,7 +59,7 @@ DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics) __read_mostly; | |||
| 59 | struct ip6_ra_chain *ip6_ra_chain; | 59 | struct ip6_ra_chain *ip6_ra_chain; |
| 60 | DEFINE_RWLOCK(ip6_ra_lock); | 60 | DEFINE_RWLOCK(ip6_ra_lock); |
| 61 | 61 | ||
| 62 | int ip6_ra_control(struct sock *sk, int sel, void (*destructor)(struct sock *)) | 62 | int ip6_ra_control(struct sock *sk, int sel) |
| 63 | { | 63 | { |
| 64 | struct ip6_ra_chain *ra, *new_ra, **rap; | 64 | struct ip6_ra_chain *ra, *new_ra, **rap; |
| 65 | 65 | ||
| @@ -81,8 +81,6 @@ int ip6_ra_control(struct sock *sk, int sel, void (*destructor)(struct sock *)) | |||
| 81 | *rap = ra->next; | 81 | *rap = ra->next; |
| 82 | write_unlock_bh(&ip6_ra_lock); | 82 | write_unlock_bh(&ip6_ra_lock); |
| 83 | 83 | ||
| 84 | if (ra->destructor) | ||
| 85 | ra->destructor(sk); | ||
| 86 | sock_put(sk); | 84 | sock_put(sk); |
| 87 | kfree(ra); | 85 | kfree(ra); |
| 88 | return 0; | 86 | return 0; |
| @@ -94,7 +92,6 @@ int ip6_ra_control(struct sock *sk, int sel, void (*destructor)(struct sock *)) | |||
| 94 | } | 92 | } |
| 95 | new_ra->sk = sk; | 93 | new_ra->sk = sk; |
| 96 | new_ra->sel = sel; | 94 | new_ra->sel = sel; |
| 97 | new_ra->destructor = destructor; | ||
| 98 | new_ra->next = ra; | 95 | new_ra->next = ra; |
| 99 | *rap = new_ra; | 96 | *rap = new_ra; |
| 100 | sock_hold(sk); | 97 | sock_hold(sk); |
| @@ -632,7 +629,7 @@ done: | |||
| 632 | case IPV6_ROUTER_ALERT: | 629 | case IPV6_ROUTER_ALERT: |
| 633 | if (optlen < sizeof(int)) | 630 | if (optlen < sizeof(int)) |
| 634 | goto e_inval; | 631 | goto e_inval; |
| 635 | retv = ip6_ra_control(sk, val, NULL); | 632 | retv = ip6_ra_control(sk, val); |
| 636 | break; | 633 | break; |
| 637 | case IPV6_MTU_DISCOVER: | 634 | case IPV6_MTU_DISCOVER: |
| 638 | if (optlen < sizeof(int)) | 635 | if (optlen < sizeof(int)) |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 34cfb3f41c2c..01d47674f7e5 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
| @@ -1157,7 +1157,7 @@ static int rawv6_ioctl(struct sock *sk, int cmd, unsigned long arg) | |||
| 1157 | static void rawv6_close(struct sock *sk, long timeout) | 1157 | static void rawv6_close(struct sock *sk, long timeout) |
| 1158 | { | 1158 | { |
| 1159 | if (inet_sk(sk)->num == IPPROTO_RAW) | 1159 | if (inet_sk(sk)->num == IPPROTO_RAW) |
| 1160 | ip6_ra_control(sk, -1, NULL); | 1160 | ip6_ra_control(sk, -1); |
| 1161 | ip6mr_sk_done(sk); | 1161 | ip6mr_sk_done(sk); |
| 1162 | sk_common_release(sk); | 1162 | sk_common_release(sk); |
| 1163 | } | 1163 | } |
