X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=ssl%2Fd1_both.c;h=48c75b2227a71f002a2492bad2b1d12b390b2304;hb=258f8721a5d2c3ec5fd433e89112885139be1db3;hp=8d15f70a4f1a651285dd6eca4e489b303d42bc5a;hpb=ab97b2cd4301074fd88fd2f13b8c79342593dae4;p=openssl.git diff --git a/ssl/d1_both.c b/ssl/d1_both.c index 8d15f70a4f..48c75b2227 100644 --- a/ssl/d1_both.c +++ b/ssl/d1_both.c @@ -1349,25 +1349,28 @@ int dtls1_shutdown(SSL *s) #ifndef OPENSSL_NO_HEARTBEATS int dtls1_process_heartbeat(SSL *s) { - unsigned char *p = &s->s3->rrec.data[0], *pl; + unsigned char *p, *pl; unsigned short hbtype; unsigned int payload; unsigned int padding = 16; /* Use minimum padding */ + unsigned int length; + + p = SSL3_RECORD_get_data(RECORD_LAYER_get_rrec(&s->rlayer)); + length = SSL3_RECORD_get_length(RECORD_LAYER_get_rrec(&s->rlayer)); if (s->msg_callback) s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT, - &s->s3->rrec.data[0], s->s3->rrec.length, - s, s->msg_callback_arg); + p, length, s, s->msg_callback_arg); /* Read type and payload length first */ - if (1 + 2 + 16 > s->s3->rrec.length) + if (1 + 2 + 16 > length) return 0; /* silently discard */ - if (s->s3->rrec.length > SSL3_RT_MAX_PLAIN_LENGTH) + if (length > SSL3_RT_MAX_PLAIN_LENGTH) return 0; /* silently discard per RFC 6520 sec. 4 */ hbtype = *p++; n2s(p, payload); - if (1 + 2 + payload + 16 > s->s3->rrec.length) + if (1 + 2 + payload + 16 > length) return 0; /* silently discard per RFC 6520 sec. 4 */ pl = p;