aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/ccids
diff options
context:
space:
mode:
Diffstat (limited to 'net/dccp/ccids')
-rw-r--r--net/dccp/ccids/ccid3.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index ce8059130070..be1b8baaf298 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -481,9 +481,8 @@ done_computing_x:
481 jiffies + usecs_to_jiffies(t_nfb)); 481 jiffies + usecs_to_jiffies(t_nfb));
482} 482}
483 483
484static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option, 484static int ccid3_hc_tx_parse_options(struct sock *sk, u8 packet_type,
485 unsigned char len, u16 idx, 485 u8 option, u8 *optval, u8 optlen)
486 unsigned char *value)
487{ 486{
488 struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk); 487 struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk);
489 struct ccid3_options_received *opt_recv = &hc->tx_options_received; 488 struct ccid3_options_received *opt_recv = &hc->tx_options_received;
@@ -492,12 +491,15 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
492 switch (option) { 491 switch (option) {
493 case TFRC_OPT_RECEIVE_RATE: 492 case TFRC_OPT_RECEIVE_RATE:
494 case TFRC_OPT_LOSS_EVENT_RATE: 493 case TFRC_OPT_LOSS_EVENT_RATE:
495 if (unlikely(len != 4)) { 494 /* Must be ignored on Data packets, cf. RFC 4342 8.3 and 8.5 */
495 if (packet_type == DCCP_PKT_DATA)
496 break;
497 if (unlikely(optlen != 4)) {
496 DCCP_WARN("%s(%p), invalid len %d for %u\n", 498 DCCP_WARN("%s(%p), invalid len %d for %u\n",
497 dccp_role(sk), sk, len, option); 499 dccp_role(sk), sk, optlen, option);
498 return -EINVAL; 500 return -EINVAL;
499 } 501 }
500 opt_val = ntohl(get_unaligned((__be32 *)value)); 502 opt_val = ntohl(get_unaligned((__be32 *)optval));
501 503
502 if (option == TFRC_OPT_RECEIVE_RATE) { 504 if (option == TFRC_OPT_RECEIVE_RATE) {
503 opt_recv->ccid3or_receive_rate = opt_val; 505 opt_recv->ccid3or_receive_rate = opt_val;