af_x25.c (25aa4efe4feb4150fe613169795df505c5018f2b) | af_x25.c (90c27297a9bfb8ea11c0e3f73ad90c4c66e8501e) |
---|---|
1/* 2 * X.25 Packet Layer release 002 3 * 4 * This is ALPHA test software. This code may break your machine, 5 * randomly fail to work with new releases, misbehave and/or generally 6 * screw up. It might even work. 7 * 8 * This code REQUIRES 2.1.15 or higher --- 674 unchanged lines hidden (view full) --- 683} 684 685static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) 686{ 687 struct sock *sk = sock->sk; 688 struct sockaddr_x25 *addr = (struct sockaddr_x25 *)uaddr; 689 int len, i, rc = 0; 690 | 1/* 2 * X.25 Packet Layer release 002 3 * 4 * This is ALPHA test software. This code may break your machine, 5 * randomly fail to work with new releases, misbehave and/or generally 6 * screw up. It might even work. 7 * 8 * This code REQUIRES 2.1.15 or higher --- 674 unchanged lines hidden (view full) --- 683} 684 685static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) 686{ 687 struct sock *sk = sock->sk; 688 struct sockaddr_x25 *addr = (struct sockaddr_x25 *)uaddr; 689 int len, i, rc = 0; 690 |
691 lock_kernel(); | |
692 if (!sock_flag(sk, SOCK_ZAPPED) || 693 addr_len != sizeof(struct sockaddr_x25) || 694 addr->sx25_family != AF_X25) { 695 rc = -EINVAL; 696 goto out; 697 } 698 699 len = strlen(addr->sx25_addr.x25_addr); 700 for (i = 0; i < len; i++) { 701 if (!isdigit(addr->sx25_addr.x25_addr[i])) { 702 rc = -EINVAL; 703 goto out; 704 } 705 } 706 | 691 if (!sock_flag(sk, SOCK_ZAPPED) || 692 addr_len != sizeof(struct sockaddr_x25) || 693 addr->sx25_family != AF_X25) { 694 rc = -EINVAL; 695 goto out; 696 } 697 698 len = strlen(addr->sx25_addr.x25_addr); 699 for (i = 0; i < len; i++) { 700 if (!isdigit(addr->sx25_addr.x25_addr[i])) { 701 rc = -EINVAL; 702 goto out; 703 } 704 } 705 |
706 lock_sock(sk); |
|
707 x25_sk(sk)->source_addr = addr->sx25_addr; 708 x25_insert_socket(sk); 709 sock_reset_flag(sk, SOCK_ZAPPED); | 707 x25_sk(sk)->source_addr = addr->sx25_addr; 708 x25_insert_socket(sk); 709 sock_reset_flag(sk, SOCK_ZAPPED); |
710 release_sock(sk); |
|
710 SOCK_DEBUG(sk, "x25_bind: socket is bound\n"); 711out: | 711 SOCK_DEBUG(sk, "x25_bind: socket is bound\n"); 712out: |
712 unlock_kernel(); | |
713 return rc; 714} 715 716static int x25_wait_for_connection_establishment(struct sock *sk) 717{ 718 DECLARE_WAITQUEUE(wait, current); 719 int rc; 720 --- 1125 unchanged lines hidden --- | 713 return rc; 714} 715 716static int x25_wait_for_connection_establishment(struct sock *sk) 717{ 718 DECLARE_WAITQUEUE(wait, current); 719 int rc; 720 --- 1125 unchanged lines hidden --- |