aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2007-12-13 09:48:19 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:57:54 -0500
commitcf86314cb7460423b0b7e611edad80a52dc90d10 (patch)
tree19c9389017f08828f2bcbbf1652904fa64aa8e84 /net/dccp
parent5cdae198de33184c01226395b840f44f9834233a (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')
-rw-r--r--net/dccp/options.c6
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))