diff options
Diffstat (limited to 'net/netrom/af_netrom.c')
| -rw-r--r-- | net/netrom/af_netrom.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index 31ed4a9a1d06..162a85fed150 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c | |||
| @@ -459,12 +459,7 @@ static struct sock *nr_make_new(struct sock *osk) | |||
| 459 | sk->sk_sndbuf = osk->sk_sndbuf; | 459 | sk->sk_sndbuf = osk->sk_sndbuf; |
| 460 | sk->sk_state = TCP_ESTABLISHED; | 460 | sk->sk_state = TCP_ESTABLISHED; |
| 461 | sk->sk_sleep = osk->sk_sleep; | 461 | sk->sk_sleep = osk->sk_sleep; |
| 462 | 462 | sock_copy_flags(sk, osk); | |
| 463 | if (sock_flag(osk, SOCK_ZAPPED)) | ||
| 464 | sock_set_flag(sk, SOCK_ZAPPED); | ||
| 465 | |||
| 466 | if (sock_flag(osk, SOCK_DBG)) | ||
| 467 | sock_set_flag(sk, SOCK_DBG); | ||
| 468 | 463 | ||
| 469 | skb_queue_head_init(&nr->ack_queue); | 464 | skb_queue_head_init(&nr->ack_queue); |
| 470 | skb_queue_head_init(&nr->reseq_queue); | 465 | skb_queue_head_init(&nr->reseq_queue); |
| @@ -541,7 +536,8 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
| 541 | struct nr_sock *nr = nr_sk(sk); | 536 | struct nr_sock *nr = nr_sk(sk); |
| 542 | struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr; | 537 | struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr; |
| 543 | struct net_device *dev; | 538 | struct net_device *dev; |
| 544 | ax25_address *user, *source; | 539 | ax25_uid_assoc *user; |
| 540 | ax25_address *source; | ||
| 545 | 541 | ||
| 546 | lock_sock(sk); | 542 | lock_sock(sk); |
| 547 | if (!sock_flag(sk, SOCK_ZAPPED)) { | 543 | if (!sock_flag(sk, SOCK_ZAPPED)) { |
| @@ -580,16 +576,19 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
| 580 | } else { | 576 | } else { |
| 581 | source = &addr->fsa_ax25.sax25_call; | 577 | source = &addr->fsa_ax25.sax25_call; |
| 582 | 578 | ||
| 583 | if ((user = ax25_findbyuid(current->euid)) == NULL) { | 579 | user = ax25_findbyuid(current->euid); |
| 580 | if (user) { | ||
| 581 | nr->user_addr = user->call; | ||
| 582 | ax25_uid_put(user); | ||
| 583 | } else { | ||
| 584 | if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) { | 584 | if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) { |
| 585 | release_sock(sk); | 585 | release_sock(sk); |
| 586 | dev_put(dev); | 586 | dev_put(dev); |
| 587 | return -EPERM; | 587 | return -EPERM; |
| 588 | } | 588 | } |
| 589 | user = source; | 589 | nr->user_addr = *source; |
| 590 | } | 590 | } |
| 591 | 591 | ||
| 592 | nr->user_addr = *user; | ||
| 593 | nr->source_addr = *source; | 592 | nr->source_addr = *source; |
| 594 | } | 593 | } |
| 595 | 594 | ||
| @@ -609,7 +608,8 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr, | |||
| 609 | struct sock *sk = sock->sk; | 608 | struct sock *sk = sock->sk; |
| 610 | struct nr_sock *nr = nr_sk(sk); | 609 | struct nr_sock *nr = nr_sk(sk); |
| 611 | struct sockaddr_ax25 *addr = (struct sockaddr_ax25 *)uaddr; | 610 | struct sockaddr_ax25 *addr = (struct sockaddr_ax25 *)uaddr; |
| 612 | ax25_address *user, *source = NULL; | 611 | ax25_address *source = NULL; |
| 612 | ax25_uid_assoc *user; | ||
| 613 | struct net_device *dev; | 613 | struct net_device *dev; |
| 614 | 614 | ||
| 615 | lock_sock(sk); | 615 | lock_sock(sk); |
| @@ -650,16 +650,19 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr, | |||
| 650 | } | 650 | } |
| 651 | source = (ax25_address *)dev->dev_addr; | 651 | source = (ax25_address *)dev->dev_addr; |
| 652 | 652 | ||
| 653 | if ((user = ax25_findbyuid(current->euid)) == NULL) { | 653 | user = ax25_findbyuid(current->euid); |
| 654 | if (user) { | ||
| 655 | nr->user_addr = user->call; | ||
| 656 | ax25_uid_put(user); | ||
| 657 | } else { | ||
| 654 | if (ax25_uid_policy && !capable(CAP_NET_ADMIN)) { | 658 | if (ax25_uid_policy && !capable(CAP_NET_ADMIN)) { |
| 655 | dev_put(dev); | 659 | dev_put(dev); |
| 656 | release_sock(sk); | 660 | release_sock(sk); |
| 657 | return -EPERM; | 661 | return -EPERM; |
| 658 | } | 662 | } |
| 659 | user = source; | 663 | nr->user_addr = *source; |
| 660 | } | 664 | } |
| 661 | 665 | ||
| 662 | nr->user_addr = *user; | ||
| 663 | nr->source_addr = *source; | 666 | nr->source_addr = *source; |
| 664 | nr->device = dev; | 667 | nr->device = dev; |
| 665 | 668 | ||
