diff options
Diffstat (limited to 'net/x25/af_x25.c')
-rw-r--r-- | net/x25/af_x25.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c index 36e84e13c6aa..5e86d4e97dce 100644 --- a/net/x25/af_x25.c +++ b/net/x25/af_x25.c | |||
@@ -453,7 +453,6 @@ static int x25_setsockopt(struct socket *sock, int level, int optname, | |||
453 | struct sock *sk = sock->sk; | 453 | struct sock *sk = sock->sk; |
454 | int rc = -ENOPROTOOPT; | 454 | int rc = -ENOPROTOOPT; |
455 | 455 | ||
456 | lock_kernel(); | ||
457 | if (level != SOL_X25 || optname != X25_QBITINCL) | 456 | if (level != SOL_X25 || optname != X25_QBITINCL) |
458 | goto out; | 457 | goto out; |
459 | 458 | ||
@@ -465,10 +464,12 @@ static int x25_setsockopt(struct socket *sock, int level, int optname, | |||
465 | if (get_user(opt, (int __user *)optval)) | 464 | if (get_user(opt, (int __user *)optval)) |
466 | goto out; | 465 | goto out; |
467 | 466 | ||
468 | x25_sk(sk)->qbitincl = !!opt; | 467 | if (opt) |
468 | set_bit(X25_Q_BIT_FLAG, &x25_sk(sk)->flags); | ||
469 | else | ||
470 | clear_bit(X25_Q_BIT_FLAG, &x25_sk(sk)->flags); | ||
469 | rc = 0; | 471 | rc = 0; |
470 | out: | 472 | out: |
471 | unlock_kernel(); | ||
472 | return rc; | 473 | return rc; |
473 | } | 474 | } |
474 | 475 | ||
@@ -478,7 +479,6 @@ static int x25_getsockopt(struct socket *sock, int level, int optname, | |||
478 | struct sock *sk = sock->sk; | 479 | struct sock *sk = sock->sk; |
479 | int val, len, rc = -ENOPROTOOPT; | 480 | int val, len, rc = -ENOPROTOOPT; |
480 | 481 | ||
481 | lock_kernel(); | ||
482 | if (level != SOL_X25 || optname != X25_QBITINCL) | 482 | if (level != SOL_X25 || optname != X25_QBITINCL) |
483 | goto out; | 483 | goto out; |
484 | 484 | ||
@@ -496,10 +496,9 @@ static int x25_getsockopt(struct socket *sock, int level, int optname, | |||
496 | if (put_user(len, optlen)) | 496 | if (put_user(len, optlen)) |
497 | goto out; | 497 | goto out; |
498 | 498 | ||
499 | val = x25_sk(sk)->qbitincl; | 499 | val = test_bit(X25_Q_BIT_FLAG, &x25_sk(sk)->flags); |
500 | rc = copy_to_user(optval, &val, len) ? -EFAULT : 0; | 500 | rc = copy_to_user(optval, &val, len) ? -EFAULT : 0; |
501 | out: | 501 | out: |
502 | unlock_kernel(); | ||
503 | return rc; | 502 | return rc; |
504 | } | 503 | } |
505 | 504 | ||
@@ -583,7 +582,7 @@ static int x25_create(struct net *net, struct socket *sock, int protocol, | |||
583 | x25->t2 = sysctl_x25_ack_holdback_timeout; | 582 | x25->t2 = sysctl_x25_ack_holdback_timeout; |
584 | x25->state = X25_STATE_0; | 583 | x25->state = X25_STATE_0; |
585 | x25->cudmatchlength = 0; | 584 | x25->cudmatchlength = 0; |
586 | x25->accptapprv = X25_DENY_ACCPT_APPRV; /* normally no cud */ | 585 | set_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); /* normally no cud */ |
587 | /* on call accept */ | 586 | /* on call accept */ |
588 | 587 | ||
589 | x25->facilities.winsize_in = X25_DEFAULT_WINDOW_SIZE; | 588 | x25->facilities.winsize_in = X25_DEFAULT_WINDOW_SIZE; |
@@ -632,12 +631,12 @@ static struct sock *x25_make_new(struct sock *osk) | |||
632 | x25->t22 = ox25->t22; | 631 | x25->t22 = ox25->t22; |
633 | x25->t23 = ox25->t23; | 632 | x25->t23 = ox25->t23; |
634 | x25->t2 = ox25->t2; | 633 | x25->t2 = ox25->t2; |
634 | x25->flags = ox25->flags; | ||
635 | x25->facilities = ox25->facilities; | 635 | x25->facilities = ox25->facilities; |
636 | x25->qbitincl = ox25->qbitincl; | ||
637 | x25->dte_facilities = ox25->dte_facilities; | 636 | x25->dte_facilities = ox25->dte_facilities; |
638 | x25->cudmatchlength = ox25->cudmatchlength; | 637 | x25->cudmatchlength = ox25->cudmatchlength; |
639 | x25->accptapprv = ox25->accptapprv; | ||
640 | 638 | ||
639 | clear_bit(X25_INTERRUPT_FLAG, &x25->flags); | ||
641 | x25_init_timers(sk); | 640 | x25_init_timers(sk); |
642 | out: | 641 | out: |
643 | return sk; | 642 | return sk; |
@@ -719,7 +718,7 @@ static int x25_wait_for_connection_establishment(struct sock *sk) | |||
719 | DECLARE_WAITQUEUE(wait, current); | 718 | DECLARE_WAITQUEUE(wait, current); |
720 | int rc; | 719 | int rc; |
721 | 720 | ||
722 | add_wait_queue_exclusive(sk->sk_sleep, &wait); | 721 | add_wait_queue_exclusive(sk_sleep(sk), &wait); |
723 | for (;;) { | 722 | for (;;) { |
724 | __set_current_state(TASK_INTERRUPTIBLE); | 723 | __set_current_state(TASK_INTERRUPTIBLE); |
725 | rc = -ERESTARTSYS; | 724 | rc = -ERESTARTSYS; |
@@ -739,7 +738,7 @@ static int x25_wait_for_connection_establishment(struct sock *sk) | |||
739 | break; | 738 | break; |
740 | } | 739 | } |
741 | __set_current_state(TASK_RUNNING); | 740 | __set_current_state(TASK_RUNNING); |
742 | remove_wait_queue(sk->sk_sleep, &wait); | 741 | remove_wait_queue(sk_sleep(sk), &wait); |
743 | return rc; | 742 | return rc; |
744 | } | 743 | } |
745 | 744 | ||
@@ -839,7 +838,7 @@ static int x25_wait_for_data(struct sock *sk, long timeout) | |||
839 | DECLARE_WAITQUEUE(wait, current); | 838 | DECLARE_WAITQUEUE(wait, current); |
840 | int rc = 0; | 839 | int rc = 0; |
841 | 840 | ||
842 | add_wait_queue_exclusive(sk->sk_sleep, &wait); | 841 | add_wait_queue_exclusive(sk_sleep(sk), &wait); |
843 | for (;;) { | 842 | for (;;) { |
844 | __set_current_state(TASK_INTERRUPTIBLE); | 843 | __set_current_state(TASK_INTERRUPTIBLE); |
845 | if (sk->sk_shutdown & RCV_SHUTDOWN) | 844 | if (sk->sk_shutdown & RCV_SHUTDOWN) |
@@ -859,7 +858,7 @@ static int x25_wait_for_data(struct sock *sk, long timeout) | |||
859 | break; | 858 | break; |
860 | } | 859 | } |
861 | __set_current_state(TASK_RUNNING); | 860 | __set_current_state(TASK_RUNNING); |
862 | remove_wait_queue(sk->sk_sleep, &wait); | 861 | remove_wait_queue(sk_sleep(sk), &wait); |
863 | return rc; | 862 | return rc; |
864 | } | 863 | } |
865 | 864 | ||
@@ -1053,8 +1052,8 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb, | |||
1053 | makex25->vc_facil_mask &= ~X25_MASK_CALLING_AE; | 1052 | makex25->vc_facil_mask &= ~X25_MASK_CALLING_AE; |
1054 | makex25->cudmatchlength = x25_sk(sk)->cudmatchlength; | 1053 | makex25->cudmatchlength = x25_sk(sk)->cudmatchlength; |
1055 | 1054 | ||
1056 | /* Normally all calls are accepted immediatly */ | 1055 | /* Normally all calls are accepted immediately */ |
1057 | if(makex25->accptapprv & X25_DENY_ACCPT_APPRV) { | 1056 | if (test_bit(X25_ACCPT_APPRV_FLAG, &makex25->flags)) { |
1058 | x25_write_internal(make, X25_CALL_ACCEPTED); | 1057 | x25_write_internal(make, X25_CALL_ACCEPTED); |
1059 | makex25->state = X25_STATE_3; | 1058 | makex25->state = X25_STATE_3; |
1060 | } | 1059 | } |
@@ -1186,7 +1185,7 @@ static int x25_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
1186 | * If the Q BIT Include socket option is in force, the first | 1185 | * If the Q BIT Include socket option is in force, the first |
1187 | * byte of the user data is the logical value of the Q Bit. | 1186 | * byte of the user data is the logical value of the Q Bit. |
1188 | */ | 1187 | */ |
1189 | if (x25->qbitincl) { | 1188 | if (test_bit(X25_Q_BIT_FLAG, &x25->flags)) { |
1190 | qbit = skb->data[0]; | 1189 | qbit = skb->data[0]; |
1191 | skb_pull(skb, 1); | 1190 | skb_pull(skb, 1); |
1192 | } | 1191 | } |
@@ -1242,7 +1241,7 @@ static int x25_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
1242 | len = rc; | 1241 | len = rc; |
1243 | if (rc < 0) | 1242 | if (rc < 0) |
1244 | kfree_skb(skb); | 1243 | kfree_skb(skb); |
1245 | else if (x25->qbitincl) | 1244 | else if (test_bit(X25_Q_BIT_FLAG, &x25->flags)) |
1246 | len++; | 1245 | len++; |
1247 | } | 1246 | } |
1248 | 1247 | ||
@@ -1307,7 +1306,7 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
1307 | /* | 1306 | /* |
1308 | * No Q bit information on Interrupt data. | 1307 | * No Q bit information on Interrupt data. |
1309 | */ | 1308 | */ |
1310 | if (x25->qbitincl) { | 1309 | if (test_bit(X25_Q_BIT_FLAG, &x25->flags)) { |
1311 | asmptr = skb_push(skb, 1); | 1310 | asmptr = skb_push(skb, 1); |
1312 | *asmptr = 0x00; | 1311 | *asmptr = 0x00; |
1313 | } | 1312 | } |
@@ -1325,7 +1324,7 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
1325 | skb_pull(skb, x25->neighbour->extended ? | 1324 | skb_pull(skb, x25->neighbour->extended ? |
1326 | X25_EXT_MIN_LEN : X25_STD_MIN_LEN); | 1325 | X25_EXT_MIN_LEN : X25_STD_MIN_LEN); |
1327 | 1326 | ||
1328 | if (x25->qbitincl) { | 1327 | if (test_bit(X25_Q_BIT_FLAG, &x25->flags)) { |
1329 | asmptr = skb_push(skb, 1); | 1328 | asmptr = skb_push(skb, 1); |
1330 | *asmptr = qbit; | 1329 | *asmptr = qbit; |
1331 | } | 1330 | } |
@@ -1576,7 +1575,7 @@ static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
1576 | rc = -EINVAL; | 1575 | rc = -EINVAL; |
1577 | if (sk->sk_state != TCP_CLOSE) | 1576 | if (sk->sk_state != TCP_CLOSE) |
1578 | break; | 1577 | break; |
1579 | x25->accptapprv = X25_ALLOW_ACCPT_APPRV; | 1578 | clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); |
1580 | rc = 0; | 1579 | rc = 0; |
1581 | break; | 1580 | break; |
1582 | } | 1581 | } |
@@ -1585,7 +1584,8 @@ static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
1585 | rc = -EINVAL; | 1584 | rc = -EINVAL; |
1586 | if (sk->sk_state != TCP_ESTABLISHED) | 1585 | if (sk->sk_state != TCP_ESTABLISHED) |
1587 | break; | 1586 | break; |
1588 | if (x25->accptapprv) /* must call accptapprv above */ | 1587 | /* must call accptapprv above */ |
1588 | if (test_bit(X25_ACCPT_APPRV_FLAG, &x25->flags)) | ||
1589 | break; | 1589 | break; |
1590 | x25_write_internal(sk, X25_CALL_ACCEPTED); | 1590 | x25_write_internal(sk, X25_CALL_ACCEPTED); |
1591 | x25->state = X25_STATE_3; | 1591 | x25->state = X25_STATE_3; |