Merge remote-tracking branch 'restricted/pr/522' into mbedtls-2.1-restricted-proposed
diff --git a/ChangeLog b/ChangeLog
index 5709e17..f1078af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -10,6 +10,11 @@
      one using PrintableString and the other UTF8String) or
      in the choice of upper and lower case. Reported by
      HenrikRosenquistAndersson in #1784.
+   * Fix a flawed bounds check in server PSK hint parsing. In case the
+     incoming message buffer was placed within the first 64KB of address
+     space and a PSK-(EC)DHE ciphersuite was used, this allowed an attacker
+     to trigger a memory access up to 64KB beyond the incoming message buffer,
+     potentially leading to application crash or information disclosure.
 
 Bugfix
    * Fix failure in hmac_drbg in the benchmark sample application, when
diff --git a/library/ssl_cli.c b/library/ssl_cli.c
index 8e5c02b..0c3f1a8 100644
--- a/library/ssl_cli.c
+++ b/library/ssl_cli.c
@@ -1884,7 +1884,7 @@
      *
      * opaque psk_identity_hint<0..2^16-1>;
      */
-    if( (*p) > end - 2 )
+    if( end - (*p) < 2 )
     {
         MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message "
                                     "(psk_identity_hint length)" ) );
@@ -1893,7 +1893,7 @@
     len = (*p)[0] << 8 | (*p)[1];
     *p += 2;
 
-    if( (*p) > end -len )
+    if( end - (*p) < (int) len )
     {
         MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message "
                                     "(psk_identity_hint length)" ) );