| .. | .. |
|---|
| 255 | 255 | |
|---|
| 256 | 256 | if (tunnel) |
|---|
| 257 | 257 | l2tp_tunnel_delete(tunnel); |
|---|
| 258 | | - |
|---|
| 259 | | - inet6_destroy_sock(sk); |
|---|
| 260 | 258 | } |
|---|
| 261 | 259 | |
|---|
| 262 | 260 | static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) |
|---|
| .. | .. |
|---|
| 510 | 508 | */ |
|---|
| 511 | 509 | if (len > INT_MAX - transhdrlen) |
|---|
| 512 | 510 | return -EMSGSIZE; |
|---|
| 513 | | - ulen = len + transhdrlen; |
|---|
| 514 | 511 | |
|---|
| 515 | 512 | /* Mirror BSD error message compatibility */ |
|---|
| 516 | 513 | if (msg->msg_flags & MSG_OOB) |
|---|
| .. | .. |
|---|
| 631 | 628 | |
|---|
| 632 | 629 | back_from_confirm: |
|---|
| 633 | 630 | lock_sock(sk); |
|---|
| 631 | + ulen = len + skb_queue_empty(&sk->sk_write_queue) ? transhdrlen : 0; |
|---|
| 634 | 632 | err = ip6_append_data(sk, ip_generic_getfrag, msg, |
|---|
| 635 | 633 | ulen, transhdrlen, &ipc6, |
|---|
| 636 | 634 | &fl6, (struct rt6_info *)dst, |
|---|