CDR: Protect from data overflow in ast_cdr_setuserfield.
authorCorey Farrell <git@cfware.com>
Mon, 27 Mar 2017 14:03:49 +0000 (10:03 -0400)
committerJoshua Colp <jcolp@digium.com>
Tue, 4 Apr 2017 10:14:26 +0000 (10:14 +0000)
ast_cdr_setuserfield wrote to a fixed length field using strcpy. This could
result in a buffer overrun when called from chan_sip or func_cdr. This patch
adds a maximum bytes written to the field by using ast_copy_string instead.

ASTERISK-26897 #close
patches:
  0001-CDR-Protect-from-data-overflow-in-ast_cdr_setuserfie.patch submitted
    by Corey Farrell (license #5909)

Change-Id: Ib23ca77e9b9e2803a450e1206af45df2d2fdf65c

main/cdr.c

index 363a2c6..214af2c 100644 (file)
@@ -3278,7 +3278,7 @@ void ast_cdr_setuserfield(const char *channel_name, const char *userfield)
                        if (it_cdr->fn_table == &finalized_state_fn_table && it_cdr->next != NULL) {
                                continue;
                        }
-                       strcpy(it_cdr->party_a.userfield, userfield);
+                       ast_copy_string(it_cdr->party_a.userfield, userfield, AST_MAX_USER_FIELD);
                }
                ao2_unlock(cdr);
        }