mvumi: 64bit value for seconds_since1970
PATCH 1/1 mvumi: 64bit value for seconds_since1970
struct mvumi_hs_page2 stores a "seconds_since1970" field which is of type u64. It is however, written to, using 'struct timeval' which has a 32-bit seconds field and whose value will overflow in year 2038. This patch uses ktime_get_real_seconds() instead since it provides a 64-bit seconds value, which is 2038 safe.
--- drivers/scsi/mvumi.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/scsi/mvumi.c +5 -5
@@ -31,6 +31,7 @@#include <linux/spinlock.h> #include <linux/interrupt.h> #include <linux/delay.h> +#include <linux/ktime.h> #include <linux/blkdev.h> #include <linux/io.h> #include <scsi/scsi.h>
@@ -858,8 +859,8 @@ static void mvumi_hs_build_page(struct mvumi_hba *mhba,struct mvumi_hs_page2 *hs_page2;struct mvumi_hs_page4 *hs_page4;struct mvumi_hs_page3 *hs_page3; -struct timeval time; -unsigned int local_time; +u64 time; +u64 local_time;switch (hs_header->page_code) {case HS_PAGE_HOST_INFO :
@@ -877,9 +878,8 @@ static void mvumi_hs_build_page(struct mvumi_hba *mhba, hs_page2->slot_number =0 ; hs_page2->intr_level =0 ; hs_page2->intr_vector =0 ; -do_gettimeofday (&time); - local_time = (unsigned int ) (time.tv_sec - - (sys_tz.tz_minuteswest *60 )); + time =ktime_get_real_seconds (); + local_time = (time - (sys_tz.tz_minuteswest *60 )); hs_page2->seconds_since1970 = local_time; hs_header->checksum =mvumi_calculate_checksum (hs_header, hs_header->frame_length);
Signature · 1 line
2.2.0.rc0.207.ga3a616c
Quoted 7 lines · On Wednesday 25 February 2015 07:43:54 Tina Ruchandani wrote:
struct
mvumi_hs_page2stores a "seconds_since1970" field which is of type u64. It is however, written to, using 'struct timeval' which has a 32-bit seconds field and whose value will overflow in year 2038. This patch usesktime_get_real_seconds()instead since it provides a 64-bit seconds value, which is 2038 safe.Signed-off-by Tina Ruchandani <[email protected]>
I note that in this case, the bug exists and is fixed by your patch on both 32-bit and 64-bit kernels.
I am unsure whether it is correct that this driver along with 3w-9xxx.c and 3w-sas.c, but unlike all others, uses local time instead of UTC, but your patch does not change that.