]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dccp: handle invalid feature options length
authorDan Rosenberg <drosenberg@vsecurity.com>
Fri, 6 May 2011 03:27:18 +0000 (03:27 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 23 May 2011 18:22:57 +0000 (11:22 -0700)
commit a294865978b701e4d0d90135672749531b9a900d upstream.

A length of zero (after subtracting two for the type and len fields) for
the DCCPO_{CHANGE,CONFIRM}_{L,R} options will cause an underflow due to
the subtraction.  The subsequent code may read past the end of the
options value buffer when parsing.  I'm unsure of what the consequences
of this might be, but it's probably not good.

Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com>
Acked-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
net/dccp/options.c

index 1b08cae9c65ba21fb1a28c255b810e868acc044a..b4a853ea0ed9fa81e32b41c123a683e9a3afb32b 100644 (file)
@@ -131,6 +131,8 @@ int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq,
                case DCCPO_CHANGE_L ... DCCPO_CONFIRM_R:
                        if (pkt_type == DCCP_PKT_DATA)      /* RFC 4340, 6 */
                                break;
+                       if (len == 0)
+                               goto out_invalid_option;
                        rc = dccp_feat_parse_options(sk, dreq, mandatory, opt,
                                                    *value, value + 1, len - 1);
                        if (rc)