af_inet6.c (ce046c568cbfb4734583131086f88cfe993c01d0) af_inet6.c (63159f29be1df7f93563a8a0f78c5e65fc844ed6)
1/*
2 * PF_INET6 socket protocol family
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 *
8 * Adapted from linux/net/ipv4/af_inet.c

--- 150 unchanged lines hidden (view full) ---

159 !ns_capable(net->user_ns, CAP_NET_RAW))
160 goto out_rcu_unlock;
161
162 sock->ops = answer->ops;
163 answer_prot = answer->prot;
164 answer_flags = answer->flags;
165 rcu_read_unlock();
166
1/*
2 * PF_INET6 socket protocol family
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 *
8 * Adapted from linux/net/ipv4/af_inet.c

--- 150 unchanged lines hidden (view full) ---

159 !ns_capable(net->user_ns, CAP_NET_RAW))
160 goto out_rcu_unlock;
161
162 sock->ops = answer->ops;
163 answer_prot = answer->prot;
164 answer_flags = answer->flags;
165 rcu_read_unlock();
166
167 WARN_ON(answer_prot->slab == NULL);
167 WARN_ON(!answer_prot->slab);
168
169 err = -ENOBUFS;
170 sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot);
168
169 err = -ENOBUFS;
170 sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot);
171 if (sk == NULL)
171 if (!sk)
172 goto out;
173
174 sock_init_data(sock, sk);
175
176 err = 0;
177 if (INET_PROTOSW_REUSE & answer_flags)
178 sk->sk_reuse = SK_CAN_REUSE;
179

--- 206 unchanged lines hidden (view full) ---

386 goto out;
387}
388EXPORT_SYMBOL(inet6_bind);
389
390int inet6_release(struct socket *sock)
391{
392 struct sock *sk = sock->sk;
393
172 goto out;
173
174 sock_init_data(sock, sk);
175
176 err = 0;
177 if (INET_PROTOSW_REUSE & answer_flags)
178 sk->sk_reuse = SK_CAN_REUSE;
179

--- 206 unchanged lines hidden (view full) ---

386 goto out;
387}
388EXPORT_SYMBOL(inet6_bind);
389
390int inet6_release(struct socket *sock)
391{
392 struct sock *sk = sock->sk;
393
394 if (sk == NULL)
394 if (!sk)
395 return -EINVAL;
396
397 /* Free mc lists */
398 ipv6_sock_mc_close(sk);
399
400 /* Free ac lists */
401 ipv6_sock_ac_close(sk);
402

--- 232 unchanged lines hidden (view full) ---

635
636int inet6_sk_rebuild_header(struct sock *sk)
637{
638 struct ipv6_pinfo *np = inet6_sk(sk);
639 struct dst_entry *dst;
640
641 dst = __sk_dst_check(sk, np->dst_cookie);
642
395 return -EINVAL;
396
397 /* Free mc lists */
398 ipv6_sock_mc_close(sk);
399
400 /* Free ac lists */
401 ipv6_sock_ac_close(sk);
402

--- 232 unchanged lines hidden (view full) ---

635
636int inet6_sk_rebuild_header(struct sock *sk)
637{
638 struct ipv6_pinfo *np = inet6_sk(sk);
639 struct dst_entry *dst;
640
641 dst = __sk_dst_check(sk, np->dst_cookie);
642
643 if (dst == NULL) {
643 if (!dst) {
644 struct inet_sock *inet = inet_sk(sk);
645 struct in6_addr *final_p, final;
646 struct flowi6 fl6;
647
648 memset(&fl6, 0, sizeof(fl6));
649 fl6.flowi6_proto = sk->sk_protocol;
650 fl6.daddr = sk->sk_v6_daddr;
651 fl6.saddr = np->saddr;

--- 379 unchanged lines hidden ---
644 struct inet_sock *inet = inet_sk(sk);
645 struct in6_addr *final_p, final;
646 struct flowi6 fl6;
647
648 memset(&fl6, 0, sizeof(fl6));
649 fl6.flowi6_proto = sk->sk_protocol;
650 fl6.daddr = sk->sk_v6_daddr;
651 fl6.saddr = np->saddr;

--- 379 unchanged lines hidden ---