diff options
-rw-r--r-- | crypto/asymmetric_keys/x509_cert_parser.c | 12 |
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 | ||