sctp: validate chunk size in __rcv_asconf_lookup
authorMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Mon, 28 Jun 2021 19:13:43 +0000 (16:13 -0300)
committerPDO SCM Team <hudsoncm@motorola.com>
Tue, 8 Mar 2022 06:30:32 +0000 (00:30 -0600)
commit b6ffe7671b24689c09faa5675dd58f93758a97ae upstream.

In one of the fallbacks that SCTP has for identifying an association for an
incoming packet, it looks for AddIp chunk (from ASCONF) and take a peek.
Thing is, at this stage nothing was validating that the chunk actually had
enough content for that, allowing the peek to happen over uninitialized
memory.

Similar check already exists in actual asconf handling in
sctp_verify_asconf().

Mot-CRs-fixed: (CR)
CVE-Fixed: CVE-2021-3655
Bug: 197154735

Change-Id: I193915c129efa43a607ff63e95e1e2ecaf7c7775
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Gajjala Chakradhar <gajjalac@motorola.com>
Reviewed-on: https://gerrit.mot.com/2197703
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Xiangpo Zhao <zhaoxp3@motorola.com>
Submit-Approved: Jira Key
(cherry picked from commit 6954f39c3bb1e1ef59ef416f638734b861fe48b8)

net/sctp/input.c

index 5ea8982ab7a986d7daaa7511245301ea443f74b2..691009c3123fa705d963ee733cd8095a4d724a39 100644 (file)
@@ -1118,6 +1118,9 @@ static struct sctp_association *__sctp_rcv_asconf_lookup(
        union sctp_addr_param *param;
        union sctp_addr paddr;
 
+       if (ntohs(ch->length) < sizeof(*asconf) + sizeof(struct sctp_paramhdr))
+               return NULL;
+
        /* Skip over the ADDIP header and find the Address parameter */
        param = (union sctp_addr_param *)(asconf + 1);