1. 04 7月, 2014 1 次提交
    • Kathleen King's avatar
      Fixed dead code. · 2d85726e
      Kathleen King 提交于
      While reviewing code I noticed some dead code. It was not possible to
      default to the channel variable because the parameter could not be
      both full and empty.
      
      If the parameter is not a non zero length string then the code looked
      like it was intending to default to the channel variable
      'presence_data_cols'. If neither of these are the case it is a noop.
      
      By enabling the dead code, you now have access to set the
      'presence_data_cols' in the dialplan or scripts like lua.
      2d85726e
  2. 03 7月, 2014 4 次提交
    • Kathleen King's avatar
      Fixed trucation of value warning. · 85699480
      Kathleen King 提交于
      There was a parameter mismatch between abs(), which expects an int,
      and atol() which returns a long. Since max_drift is defined as an int,
      there is no need to pars q as a long rather than an int.
      85699480
    • Kathleen King's avatar
      Removed a useless called to abs. · aef56917
      Kathleen King 提交于
      Clang 3.5 reported the following error: error: taking the absolute
      value of unsigned type 'unsigned int' has no effect
      [-Werror,-Wabsolute-value]
      
      Subtracting unsigned variables will never be negative and will either
      be the small expected value or will wrap to a very big value. This
      code is trying to determine if the difference between these timestamps
      is greater than 16000.
      
      The variables last_write_ts and this_ts deal with timestamps. In the
      normal case this_ts will be a larger timestamp than
      last_write_ts. This change will maintain the intended behavior of
      reseting the video if the difference is larger than
      16000 and in the abnormal case this value would wrap and still exceed
      the 16000.
      aef56917
    • Kathleen King's avatar
      Removed an autological-pointer-compare from src/switch_utils.c. · 24e5c132
      Kathleen King 提交于
      Building with Clang 3.5 gave the following warning: error: comparison
      of array 'iface_out.sin6_addr.__in6_u.__u6_addr8' equal to a null
      pointer is always false [-Werror,-Wtautological-pointer-compare]
      
      This is a problem because as it is written the check will never be
      true. A pointer to a structure within a structure will never be null. The
      intention was either to null check the pointer or to check if the IP
      address itself was not zero.
      
      From context in the code this appeared to be a pointer null check so I
      removed it.
      24e5c132
    • Kathleen King's avatar
      Fixed trucation of value warning. · 89f7196a
      Kathleen King 提交于
      There was a parameter mismatch between abs(), which expects an int,
      and atol() which returns a long. Since max_drift is defined as an int,
      there is no need to pars q as a long rather than an int.
      89f7196a
  3. 02 7月, 2014 6 次提交
  4. 01 7月, 2014 4 次提交
  5. 30 6月, 2014 10 次提交
    • Chris Rienzo's avatar
    • jfigus's avatar
      Add support for 16-byte auth tag for AES GCM mode. · 024162cf
      jfigus 提交于
      024162cf
    • jfigus's avatar
      Set the algorithm member on cipher_t when allocating AES crypto instance. Apply… · b9da5149
      jfigus 提交于
      Set the algorithm member on cipher_t when allocating AES crypto instance.  Apply same fix to NULL cipher.
      b9da5149
    • Travis Cross's avatar
      Avoid buffer-overflow on short RTCP/SRTCP packets · aa4261d1
      Travis Cross 提交于
      In `srtp_unprotect_rtcp()` we are not validating that the packet
      length is as long as the minimum required.  This would cause
      `enc_octet_len` to underflow, which would cause us to try to decrypt
      data past the end of the packet in memory -- a buffer over-read and
      buffer overflow.
      
      In `srtp_protect_rtcp()`, we were similarly not validating the packet
      length.  Here we were also polluting the address of the SRTCP
      encrypted flag and index (the `trailer`), causing us to write one word
      to a bogus memory address before getting to the encryption where we
      would also overflow.
      
      In this commit we add checks to appropriately validate the RTCP/SRTCP
      packet lengths.
      
      `srtp_unprotect_rtcp_aead()` (but not protect) did correctly validate
      the packet length; this check would now be redundant as the check in
      `srtcp_unprotect_rtcp()` will also run first, so it has been removed.
      aa4261d1
    • Travis Cross's avatar
      Avoid buffer over-read on null cipher AEAD · 9ea93c4c
      Travis Cross 提交于
      In the defined AEAD modes, SRTP packets must always be encrypted and
      authenticated, but SRTCP packets may be only authenticated.  It's
      possible, therefore, for us to end up in `srtp_protect_aead()` without
      the `sec_serv_conf` bit being set.  We should just ignore this and
      encrypt the RTP packet anyway.
      
      What we are doing instead is encrypting the packet anyway, but setting
      `enc_start` to NULL first.  This causes `aad_len` to underflow which
      will cause us to over-read in `cipher_set_aad()`.
      
      If we could get past that, we would try to read and write memory
      starting at 0x0 down in `cipher_encrypt()`.
      
      This commit causes us to not check the `sec_serv_conf` bit and never
      set `enc_start` to NULL in `srtp_protect_aead()`.
      
      `srtp_unprotect_aead()` does not contain a similar error.
      9ea93c4c
    • Travis Cross's avatar
      Prevent buffer overflow from untrusted RTP/SRTP lengths · 3bf2b9af
      Travis Cross 提交于
      When computing the start address of the RTP data to encrypt or SRTP
      data to decrypt (`enc_start`), we are using `hdr->cc` (the CSRC
      count), which is untrusted data from the packet, and the length field
      of an RTP header extension, which is also untrusted and unchecked data
      from the packet.
      
      This value then pollutes our calculation of how much data we'll be
      encrypting or decrypting (`enc_octet_len`), possibly causing us to
      underflow.
      
      We'll then call `cipher_encrypt()` or `cipher_decrypt()` with these
      two values, causing us to read from and write to arbitrary addresses
      in memory.
      
      (In the AEAD functions, we'd also pollute `aad_len`, which would cause
      us to read undefined memory in `cipher_set_aad`.)
      
      This commit adds checks to verify that the `enc_start` we calculate is
      sane based on the actual packet length.
      3bf2b9af
    • Travis Cross's avatar
      Fix misspelling in comment · d2aaf159
      Travis Cross 提交于
      d2aaf159
    • Anthony Minessale's avatar
    • Anthony Minessale's avatar
      fix volume adjustments in stereo conference · 7f9348db
      Anthony Minessale 提交于
      7f9348db
    • Anthony Minessale's avatar
      41a7d1cf
  6. 29 6月, 2014 7 次提交
  7. 28 6月, 2014 6 次提交
    • Steve Underwood's avatar
      FAX tweaks · c3798dbb
      Steve Underwood 提交于
      c3798dbb
    • Steve Underwood's avatar
      ad1e7e96
    • Travis Cross's avatar
      Handle SRTP_READ_ERROR in mod_rayo · 7741f403
      Travis Cross 提交于
      7741f403
    • Travis Cross's avatar
      Allow more SRTP errors before killing call · f31641f4
      Travis Cross 提交于
      In a carrier interop we saw the call get killed for SRTP failures
      during a reinvite.  We're wondering if the SRTP errors may have been
      transitory and if it may have recovered after a few more packets.
      
      It's debatable whether we should kill calls at all for SRTP auth
      failures; semantically the right thing to do when a MAC fails is to
      ignore the packet completely.  So raising this limit to 100 packets
      shouldn't do any harm.  With this change we still warn at 10 errors
      and every 10 errors thereafter.
      f31641f4
    • Travis Cross's avatar
      Relay cause of hangup on SRTP failure · 7406be69
      Travis Cross 提交于
      We hangup the channel after receiving 10 SRTP packets in a row with a
      bad auth tag or that are replayed.  Prior to this commit we were
      indicating a normal clearing.  When doing interop and looking first at
      packet traces, this made freeswitch's behavior look surprising.  With
      this commit we'll indicate more loudly what's happening.
      7406be69
    • Travis Cross's avatar
      Fix misspelled function · 52892b31
      Travis Cross 提交于
      switch_rtp_set_invalid_handler has been misspelled as
      switch_rtp_set_invald_handler going all the way back to the
      beginning.  So while it's possible that someone somewhere could be
      relying on this misspelling, I think it's more likely that no one has
      used it much and that's why it wasn't spotted.  We don't even use it
      ourselves anywhere anymore.
      
      Introduced in commit: 828e0371
      52892b31
  8. 27 6月, 2014 2 次提交