diff options
Diffstat (limited to 'net/x25/af_x25.c')
-rw-r--r-- | net/x25/af_x25.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c index fe26c01ef3e6..8ed51c926c50 100644 --- a/net/x25/af_x25.c +++ b/net/x25/af_x25.c | |||
@@ -588,7 +588,8 @@ static int x25_create(struct net *net, struct socket *sock, int protocol, | |||
588 | x25->facilities.winsize_out = X25_DEFAULT_WINDOW_SIZE; | 588 | x25->facilities.winsize_out = X25_DEFAULT_WINDOW_SIZE; |
589 | x25->facilities.pacsize_in = X25_DEFAULT_PACKET_SIZE; | 589 | x25->facilities.pacsize_in = X25_DEFAULT_PACKET_SIZE; |
590 | x25->facilities.pacsize_out = X25_DEFAULT_PACKET_SIZE; | 590 | x25->facilities.pacsize_out = X25_DEFAULT_PACKET_SIZE; |
591 | x25->facilities.throughput = X25_DEFAULT_THROUGHPUT; | 591 | x25->facilities.throughput = 0; /* by default don't negotiate |
592 | throughput */ | ||
592 | x25->facilities.reverse = X25_DEFAULT_REVERSE; | 593 | x25->facilities.reverse = X25_DEFAULT_REVERSE; |
593 | x25->dte_facilities.calling_len = 0; | 594 | x25->dte_facilities.calling_len = 0; |
594 | x25->dte_facilities.called_len = 0; | 595 | x25->dte_facilities.called_len = 0; |
@@ -1459,9 +1460,20 @@ static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
1459 | if (facilities.winsize_in < 1 || | 1460 | if (facilities.winsize_in < 1 || |
1460 | facilities.winsize_in > 127) | 1461 | facilities.winsize_in > 127) |
1461 | break; | 1462 | break; |
1462 | if (facilities.throughput < 0x03 || | 1463 | if (facilities.throughput) { |
1463 | facilities.throughput > 0xDD) | 1464 | int out = facilities.throughput & 0xf0; |
1464 | break; | 1465 | int in = facilities.throughput & 0x0f; |
1466 | if (!out) | ||
1467 | facilities.throughput |= | ||
1468 | X25_DEFAULT_THROUGHPUT << 4; | ||
1469 | else if (out < 0x30 || out > 0xD0) | ||
1470 | break; | ||
1471 | if (!in) | ||
1472 | facilities.throughput |= | ||
1473 | X25_DEFAULT_THROUGHPUT; | ||
1474 | else if (in < 0x03 || in > 0x0D) | ||
1475 | break; | ||
1476 | } | ||
1465 | if (facilities.reverse && | 1477 | if (facilities.reverse && |
1466 | (facilities.reverse & 0x81) != 0x81) | 1478 | (facilities.reverse & 0x81) != 0x81) |
1467 | break; | 1479 | break; |