aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/asymmetric_keys/x509_cert_parser.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/crypto/asymmetric_keys/x509_cert_parser.c b/crypto/asymmetric_keys/x509_cert_parser.c
index 3000ea3b6687..021d39c0ba75 100644
--- a/crypto/asymmetric_keys/x509_cert_parser.c
+++ b/crypto/asymmetric_keys/x509_cert_parser.c
@@ -531,7 +531,11 @@ int x509_decode_time(time64_t *_t, size_t hdrlen,
531 if (*p != 'Z') 531 if (*p != 'Z')
532 goto unsupported_time; 532 goto unsupported_time;
533 533
534 mon_len = month_lengths[mon]; 534 if (year < 1970 ||
535 mon < 1 || mon > 12)
536 goto invalid_time;
537
538 mon_len = month_lengths[mon - 1];
535 if (mon == 2) { 539 if (mon == 2) {
536 if (year % 4 == 0) { 540 if (year % 4 == 0) {
537 mon_len = 29; 541 mon_len = 29;
@@ -543,14 +547,12 @@ int x509_decode_time(time64_t *_t, size_t hdrlen,
543 } 547 }
544 } 548 }
545 549
546 if (year < 1970 || 550 if (day < 1 || day > mon_len ||
547 mon < 1 || mon > 12 ||
548 day < 1 || day > mon_len ||
549 hour > 23 || 551 hour > 23 ||
550 min > 59 || 552 min > 59 ||
551 sec > 59) 553 sec > 59)
552 goto invalid_time; 554 goto invalid_time;
553 555
554 *_t = mktime64(year, mon, day, hour, min, sec); 556 *_t = mktime64(year, mon, day, hour, min, sec);
555 return 0; 557 return 0;
556 558