diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2007-12-13 09:48:19 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:57:54 -0500 |
commit | cf86314cb7460423b0b7e611edad80a52dc90d10 (patch) | |
tree | 19c9389017f08828f2bcbbf1652904fa64aa8e84 /net/dccp/options.c | |
parent | 5cdae198de33184c01226395b840f44f9834233a (diff) |
[DCCP]: Ignore feature negotiation on Data packets
This implements [RFC 4340, p. 32]: "any feature negotiation options received
on DCCP-Data packets MUST be ignored".
Also added a FIXME for further processing, since the code currently (wrongly)
classifies empty Confirm options as invalid - this needs to be resolved in
a separate patch.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp/options.c')
-rw-r--r-- | net/dccp/options.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/dccp/options.c b/net/dccp/options.c index bedb5daaa3c5..d2a84a2fecee 100644 --- a/net/dccp/options.c +++ b/net/dccp/options.c | |||
@@ -132,6 +132,8 @@ int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq, | |||
132 | case DCCPO_CHANGE_L: | 132 | case DCCPO_CHANGE_L: |
133 | /* fall through */ | 133 | /* fall through */ |
134 | case DCCPO_CHANGE_R: | 134 | case DCCPO_CHANGE_R: |
135 | if (pkt_type == DCCP_PKT_DATA) | ||
136 | break; | ||
135 | if (len < 2) | 137 | if (len < 2) |
136 | goto out_invalid_option; | 138 | goto out_invalid_option; |
137 | rc = dccp_feat_change_recv(sk, opt, *value, value + 1, | 139 | rc = dccp_feat_change_recv(sk, opt, *value, value + 1, |
@@ -148,7 +150,9 @@ int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq, | |||
148 | case DCCPO_CONFIRM_L: | 150 | case DCCPO_CONFIRM_L: |
149 | /* fall through */ | 151 | /* fall through */ |
150 | case DCCPO_CONFIRM_R: | 152 | case DCCPO_CONFIRM_R: |
151 | if (len < 2) | 153 | if (pkt_type == DCCP_PKT_DATA) |
154 | break; | ||
155 | if (len < 2) /* FIXME this disallows empty confirm */ | ||
152 | goto out_invalid_option; | 156 | goto out_invalid_option; |
153 | if (dccp_feat_confirm_recv(sk, opt, *value, | 157 | if (dccp_feat_confirm_recv(sk, opt, *value, |
154 | value + 1, len - 1)) | 158 | value + 1, len - 1)) |