af_inet6.c (84a73014d86fd660822a20c032625e3afe99ca58) | af_inet6.c (45f6fad84cc305103b28d73482b344d7f5b76f39) |
---|---|
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 --- 414 unchanged lines hidden (view full) --- 423 if (skb) 424 kfree_skb(skb); 425 426 /* Free flowlabels */ 427 fl6_free_socklist(sk); 428 429 /* Free tx options */ 430 | 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 --- 414 unchanged lines hidden (view full) --- 423 if (skb) 424 kfree_skb(skb); 425 426 /* Free flowlabels */ 427 fl6_free_socklist(sk); 428 429 /* Free tx options */ 430 |
431 opt = xchg(&np->opt, NULL); 432 if (opt) 433 sock_kfree_s(sk, opt, opt->tot_len); | 431 opt = xchg((__force struct ipv6_txoptions **)&np->opt, NULL); 432 if (opt) { 433 atomic_sub(opt->tot_len, &sk->sk_omem_alloc); 434 txopt_put(opt); 435 } |
434} 435EXPORT_SYMBOL_GPL(inet6_destroy_sock); 436 437/* 438 * This does both peername and sockname. 439 */ 440 441int inet6_getname(struct socket *sock, struct sockaddr *uaddr, --- 212 unchanged lines hidden (view full) --- 654 fl6.saddr = np->saddr; 655 fl6.flowlabel = np->flow_label; 656 fl6.flowi6_oif = sk->sk_bound_dev_if; 657 fl6.flowi6_mark = sk->sk_mark; 658 fl6.fl6_dport = inet->inet_dport; 659 fl6.fl6_sport = inet->inet_sport; 660 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); 661 | 436} 437EXPORT_SYMBOL_GPL(inet6_destroy_sock); 438 439/* 440 * This does both peername and sockname. 441 */ 442 443int inet6_getname(struct socket *sock, struct sockaddr *uaddr, --- 212 unchanged lines hidden (view full) --- 656 fl6.saddr = np->saddr; 657 fl6.flowlabel = np->flow_label; 658 fl6.flowi6_oif = sk->sk_bound_dev_if; 659 fl6.flowi6_mark = sk->sk_mark; 660 fl6.fl6_dport = inet->inet_dport; 661 fl6.fl6_sport = inet->inet_sport; 662 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6)); 663 |
662 final_p = fl6_update_dst(&fl6, np->opt, &final); | 664 rcu_read_lock(); 665 final_p = fl6_update_dst(&fl6, rcu_dereference(np->opt), 666 &final); 667 rcu_read_unlock(); |
663 664 dst = ip6_dst_lookup_flow(sk, &fl6, final_p); 665 if (IS_ERR(dst)) { 666 sk->sk_route_caps = 0; 667 sk->sk_err_soft = -PTR_ERR(dst); 668 return PTR_ERR(dst); 669 } 670 --- 364 unchanged lines hidden --- | 668 669 dst = ip6_dst_lookup_flow(sk, &fl6, final_p); 670 if (IS_ERR(dst)) { 671 sk->sk_route_caps = 0; 672 sk->sk_err_soft = -PTR_ERR(dst); 673 return PTR_ERR(dst); 674 } 675 --- 364 unchanged lines hidden --- |