Patch "X.509: Fix leap year handling again" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
X.509: Fix leap year handling again
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
x.509-fix-leap-year-handling-again.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
ac4cbedfdf55455b4c447f17f0fa027dbf02b2a6Mon Sep 17 00:00:00 2001
From: David Howells <[email protected]>
Date: Wed, 24 Feb 2016 14:37:15 +0000
Subject: X.509: Fix leap year handling again
From: David Howells <[email protected]>
commit ac4cbedfdf55455b4c447f17f0fa027dbf02b2a6 upstream.
There are still a couple of minor issues in the X.509 leap year handling:
(1) To avoid doing a modulus-by-400 in addition to a modulus-by-100 when determining whether the year is a leap year or not, I divided the year by 100 after doing the modulus-by-100, thereby letting the compiler do one instruction for both, and then did a modulus-by-4.
Unfortunately, I then passed the now-modified year value to mktime64() to construct a time value.
Since this isn't a fast path and since mktime64() does a bunch of divisions, just condense down to "% 400". It's also easier to read.
(2) The default month length for any February where the year doesn't divide by four exactly is obtained from the month_length[] array where the value is 29, not 28.
This is fixed by altering the table.
--- crypto/asymmetric_keys/x509_cert_parser.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
crypto/asymmetric_keys/x509_cert_parser.c +4 -4
@@ -494,7 +494,7 @@ int x509_decode_time(time64_t *_t, sizeunsigned char tag, const unsigned char *value, size_t vlen) { - static const unsigned char month_lengths[] = { 31, 29, 31, 30, 31, 30, + static const unsigned char month_lengths[] = { 31, 28, 31, 30, 31, 30,31 ,31 ,30 ,31 ,30 ,31 };const unsigned char *p = value;unsigned year, mon, day, hour, min, sec, mon_len;
@@ -540,9 +540,9 @@ int x509_decode_time(time64_t *_t, sizeif (year %4 ==0 ) { mon_len =29 ;if (year %100 ==0 ) { - year /=100 ; -if (year %4 !=0 ) - mon_len =28 ; + mon_len =28 ; +if (year %400 ==0 ) + mon_len =29 ; } } }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/x.509-fix-leap-year-handling-again.patch