From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web10.106042.1670080770644898635 for ; Sat, 03 Dec 2022 07:19:31 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=ncUMMti9; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: jiewen.yao@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670080770; x=1701616770; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=SfMqTOYhpDCnS6pyfS6xSY13mmx6wmWUHOWPU+FFg4g=; b=ncUMMti9aiX3zU2bhDQLMdAa6xOuD+AoQsgSDZ/Zh5mCW2ZA5gB2Rpko J6hy3V5tencJCGDwLwJFhqhaZtVrtiMTRTGQXOKhR51A959mMdNPBO8Hw IHt8VwdQDjAjykVki4xz+VPfoSQTIlBt061oPrjXtF2DgJlzq048UXRXv apBeevHwvwnJDkR4zfim7H3IxOaHbUH54+RDUpWUw685HAV7Beqr2Tm60 0r7TctOWx6lB1vYvIHPdxIkDN/9fGzcmjt1w1JvyttinjsfdYUw5mdqQK R1+7mStNnEr4zPT3eIHffeU1pl9qbVxMK5ExpeM5zWtOVLjTr8QCYu86K w==; X-IronPort-AV: E=McAfee;i="6500,9779,10549"; a="378278515" X-IronPort-AV: E=Sophos;i="5.96,214,1665471600"; d="scan'208";a="378278515" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Dec 2022 07:19:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10549"; a="677898973" X-IronPort-AV: E=Sophos;i="5.96,214,1665471600"; d="scan'208";a="677898973" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga001.jf.intel.com with ESMTP; 03 Dec 2022 07:19:29 -0800 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Sat, 3 Dec 2022 07:19:29 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Sat, 3 Dec 2022 07:19:29 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.169) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Sat, 3 Dec 2022 07:19:28 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=acYXkSw5Z4gTZEPj7hhmnU2RFxFoHrVG1c2ERi6WeyOBjUDcv2wvqarirkYjRYqmxHeJt0SSfpEBUNGBJ1kXtWPCr/jpM8qRahroZVL300jQ23L9vWrf+hi+d1vov1A2FaXD4DOyIlD2AhZagdaCKeQxfSyfuWl+KP7T8jPszTVVZGKwVINNcBwPeHKHERqBp68/g708s4fpamfPvmSC1UCAs6K7lWM9M6/zSELbre9nK3cK+7qocrCqRYEOcYye1baHjshynnawMQrfFAyvPA2882wHkXx5enKBho+fpeT3+q8zmE6L38CgnCcvI10K01AnRcmxAdfXnejnyIlYmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=X3nU9Ik9AN4uNjx5V7OD4xhb8JqjCdLs7yHXWYrI5TY=; b=ZunBE0sr8NGqxSTPTQw0me1TCfTyunMGNIbsUTJo+epYDVErjENdTiOH7NOJ1Q6CBXaKp2dfqMHUSIYa9Ho+4dYZBtyYsdzN481Z/+xnYpgjqbwpLsox/x8A6asue/zS8N/cyNcOW842bbyv+KuWkiWXW7Sdg1Rm4ud4Y6kvb0DcGAWSbuSevqqmL95Qu1dkarZa5Ufqdf2uQCWzZXCzDcjL9HJjbm5LYODS0UnIVy2n7nkAlYR5vKs0SsFv8Kyaaa1db4cwo2ADiDtF6ASsW5EutFhy2zEZ9Tfv6fTZJK1v+CLChvr73D2+AepLwK57kmf/owM8Z2yhb3BfrTM/Aw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by MW4PR11MB7149.namprd11.prod.outlook.com (2603:10b6:303:221::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.10; Sat, 3 Dec 2022 15:19:27 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::e9dd:f205:1970:4edb]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::e9dd:f205:1970:4edb%9]) with mapi id 15.20.5880.011; Sat, 3 Dec 2022 15:19:26 +0000 From: "Yao, Jiewen" To: Wenyi Xie , "devel@edk2.groups.io" , "Wang, Jian J" , "Lu, Xiaoyu1" , "Jiang, Guomin" CC: "songdongkuang@huawei.com" , "yizihong@huawei.com" Subject: Re: [PATCH EDK2 v2 1/1] CryptoPkg/BaseCryptLib:time overflow Thread-Topic: [PATCH EDK2 v2 1/1] CryptoPkg/BaseCryptLib:time overflow Thread-Index: AQHZBhI6Mfqwr5JHNUOcVO925WogM65cSRLg Date: Sat, 3 Dec 2022 15:19:26 +0000 Message-ID: References: <20221202055150.1476640-1-xiewenyi2@huawei.com> <20221202055150.1476640-2-xiewenyi2@huawei.com> In-Reply-To: <20221202055150.1476640-2-xiewenyi2@huawei.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR11MB5872:EE_|MW4PR11MB7149:EE_ x-ms-office365-filtering-correlation-id: fa3069b0-5ef5-4645-81b8-08dad541c449 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rkZ9dwdEwZ9WB8QHPsKRLMzzVqeg+IKqxHaOyDxlo3SE2oC1PAX3eDzuaI078jrQAW6xkbENLe83VB/XRbnNfbBN+0qE5oSttyuDDI7ffJryC6T7cXUWPo1FQDzBN08CswLyAAsuFYTg70158WVShuxeYSkNx5oNKt0OJzC+3foFemFlS21Wx/asl/kzzlBMQQI2g/ktn3b64vGRxE0q8H14YmLhMX+3S8tvUCHJbTGJXxmSnPzuXYBOXwdSU4Q9Fo+q1RR7zTD3zm+lDOF9JiiGwGmvJgTwVQROAHx5HURkrczVq7Khz+oRZ9xmCNTLcBgUT/uMnFjOYGNK74Pq4TW3Xi5UCFfDcrepsmLD7IWn/Np1ReS5k0RfS7BPFFn3/F409OrYi5hhdOKOdhnzExd1g0C4y4c5dQVQHndH1QhV2E+yFOA2ANxgIcYJJYCnBQ5hEL+sFUybd07VKHnPOlImVRAP0jxfzkqHe3YSx8T9NAJq2NbNAT0XraHriuqOCLt3dy3a+wwtkioF+XKrIzYO/KV/ti9ENDGlss39rC9XkD3IjHcbmHBw2MfsX4rlJahVEqUR2cLPlJ4z5Q6UvyXh+vzAN1rtqtlhMeW1CWunRmIZXszzhVW2CDmUZZvM2pjTSpaijHhQL8JJ1xShc99n+Ueb4tJKnpx78yP+J4L+ZhLCDlZr9xcmNYM0LkGQRWWPf8U9WXPjqPM8bx5Ru4wBUSAKGb8Xlw1Qj+S5pU0Itz8MVlVwi4+Y0nmRckP2S4nkwhWOEU7LPDkwBdOuMQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5872.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(366004)(39860400002)(396003)(376002)(346002)(451199015)(53546011)(2906002)(9686003)(7696005)(6506007)(26005)(71200400001)(966005)(478600001)(86362001)(83380400001)(8936002)(186003)(38100700002)(19627235002)(52536014)(5660300002)(316002)(66946007)(66476007)(55016003)(8676002)(66556008)(4326008)(54906003)(66446008)(41300700001)(82960400001)(76116006)(64756008)(6636002)(122000001)(110136005)(38070700005)(33656002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?mxKe/Q4oyHvDNLOrLP9fb4j3ETkEsLpFcvkx+2zaqPvicrwkKbIhkL41zND+?= =?us-ascii?Q?D6JtpCWBPw4u2ECNZ7CeFHCW/FcHQHKlfH9QL8fPbUWepg8p0pnGZMdwpyMv?= =?us-ascii?Q?++zwK60lYch7V8Clh77n0JMLCHiRYsv3NDUOonpBL+rraStLCvwtkU6zI5WW?= =?us-ascii?Q?zhtnMrPl/TYNW7eO+xy/RErEBsU2IkKOuzlfDt7vq5K8CQ5I2ulVQO8Ts4CN?= =?us-ascii?Q?dr0RANnPDbLijYIMlh4WIvuKalOgKS9VFESDKR2xWLcyYVQbNbQcSSm4fd8Q?= =?us-ascii?Q?He6/2xmxcDykgXIvsI8l3fbjICal4jx2xxYZmDSXhk0+b1nfq7kwNjVhUO2r?= =?us-ascii?Q?V921mFvDhPjxwGPF8i3rDt2yctL81EZms7IHCfYfYpmrygAJuw9rffV/ys2u?= =?us-ascii?Q?CVRTj4Be5Z2eZiOQgdN/IR/UtMAPhTFjNQO7uTy7W+g3KpIfjq4Te1pRpl6N?= =?us-ascii?Q?owVMxz2DMkYjUk+hiG1uFWGua8o/k5VhRxg+OUMZHaznNrm1EH3vSOm4EdBZ?= =?us-ascii?Q?IC3Z52CVBKKRTBYX1hDm3ctId9O+EzIuSRwdjg3fVrLycnfJQCoZ/RvWEY0k?= =?us-ascii?Q?JCZQ1LDCJ2Dk/l1xoeUjxaOEuIx4jh9szr7hnYRPOzdeKTCvJWlIkJzxked6?= =?us-ascii?Q?c3G4OS2cQ6dWfQkmDBISbA6sIbxqNsbcSYxa6b2dmIfY08OUPlbh0dfysc19?= =?us-ascii?Q?TnDpBQJtIrWScRRi0GNeFWSmlW2yr5uSBrgTD/gTYaImpn7pYRlh/P19HLhF?= =?us-ascii?Q?XrkEerMbklOEYnGARWgoXL6GPK/Km8kRzfCRidrO12HO2rVaAYAeiR6LSUCI?= =?us-ascii?Q?7B48+eBrn4QBxceQFHfKdJeYYg8O47Lm9ELfyPylD/zwGZbPwI/hOZRHUH4V?= =?us-ascii?Q?P+z12BG1xC/QaRzilyAAp8z/jCYOj4tUCYSH05u8a0e3ULoh/6cMZtXut54s?= =?us-ascii?Q?lS5JjLekzRuqxwbXP0inI6h333zTr4a9omOUZ3LBhZ5ccAUJZYQXm9SMr5/I?= =?us-ascii?Q?x8kto06boIItZY4L7nm2dVFTsDV5yLaEr/xuJCwji60Qj2i4YnINLj1fLq7+?= =?us-ascii?Q?W/l78MXLXoguAieHJ4PG8ZP5xAeDa8+tQSxtPyzWcXhKumQ5qEOuknzcfALV?= =?us-ascii?Q?WHf9dNKLdU+d5u3v072pVfL18N+h/eKEph8ySjzg+A45B+GViX9Wsuk1mk+0?= =?us-ascii?Q?bYiV1BY1ZilEFa2DUFXnH7BfVSkZVbqCi4PtFbpfHFGpflHvxkGDON1QhOtB?= =?us-ascii?Q?vpe5sE97a8BMnrb1YX++w+gyOw+wKqH3tWEexv75MfUv/lgiL26rXibZEWdq?= =?us-ascii?Q?Ak2ccu5cJBk0gViUAWS7p5XmO1G2xIAkbmemteE3TZbJDDEyEStx1za6D+T9?= =?us-ascii?Q?E+AU/M8D0Rw4IyyNN6c//86/M7rOdnb6DE4CeQjObQ9jEVg2tAeETB0vHAyp?= =?us-ascii?Q?mOXNMoelkRCdyRvJkXmcOabtB52VkRj9eJ1amIqzb+u509Fw0P6+BKGQ5iJ2?= =?us-ascii?Q?ykXNeL3yRF9ymcAUX/xVvfdrpFKrJR61yLq0F4wjqPoj7076//+ZbEZD9sAK?= =?us-ascii?Q?Yckk9PVSxgZk09gBpflJ6b6unmj44gO9YLH+D8h4?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa3069b0-5ef5-4645-81b8-08dad541c449 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Dec 2022 15:19:26.8620 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: RuhSATKXHKlTtX53/iKVSGhI96vHjJm74ZF5Ld8vRoMbHAR6zTufT0LTOjMroKyHwq5Cmpa+b4D48b0f3h7ofg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB7149 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Merged https://github.com/tianocore/edk2/pull/3710 > -----Original Message----- > From: Wenyi Xie > Sent: Friday, December 2, 2022 1:52 PM > To: devel@edk2.groups.io; Yao, Jiewen ; Wang, Jian > J ; Lu, Xiaoyu1 ; Jiang, > Guomin > Cc: songdongkuang@huawei.com; xiewenyi2@huawei.com; > yizihong@huawei.com > Subject: [PATCH EDK2 v2 1/1] CryptoPkg/BaseCryptLib:time overflow >=20 > From: Zihong Yi >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4167 >=20 > In CrtLibSupport.h, time_t is defined as INT32, and its maximum value > is 2147483647. That is, the corresponding maximum timestamp is > 2038-01-19 11:14:07. Therefore, overflow occurs when the test time > exceeds 2038-01-19 11:14:07. So change the type of time_t to INT64 and > also change the type of variables in function gmtime which calculated > with time_t. >=20 > Cc: Jiewen Yao > Cc: Jian J Wang > Cc: Xiaoyu Lu > Cc: Guomin Jiang > Signed-off-by: Zihong Yi > --- > CryptoPkg/Library/Include/CrtLibSupport.h | 2 +- > CryptoPkg/Library/BaseCryptLib/SysCall/TimerWrapper.c | 51 > ++++++++++++++------ > 2 files changed, 38 insertions(+), 15 deletions(-) >=20 > diff --git a/CryptoPkg/Library/Include/CrtLibSupport.h > b/CryptoPkg/Library/Include/CrtLibSupport.h > index 5072c343da57..94b0e6b6014f 100644 > --- a/CryptoPkg/Library/Include/CrtLibSupport.h > +++ b/CryptoPkg/Library/Include/CrtLibSupport.h > @@ -109,7 +109,7 @@ typedef UINTN off_t; > typedef UINTN u_int; > typedef INTN ptrdiff_t; > typedef INTN ssize_t; > -typedef INT32 time_t; > +typedef INT64 time_t; > typedef UINT8 __uint8_t; > typedef UINT8 sa_family_t; > typedef UINT8 u_char; > diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/TimerWrapper.c > b/CryptoPkg/Library/BaseCryptLib/SysCall/TimerWrapper.c > index bf8a5325817f..2dfc6fe6c593 100644 > --- a/CryptoPkg/Library/BaseCryptLib/SysCall/TimerWrapper.c > +++ b/CryptoPkg/Library/BaseCryptLib/SysCall/TimerWrapper.c > @@ -15,7 +15,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > // -- Time Management Routines -- > // >=20 > -#define IsLeap(y) (((y) % 4) =3D=3D 0 && (((y) % 100) !=3D 0 || ((y) % = 400) =3D=3D 0)) > #define SECSPERMIN (60) > #define SECSPERHOUR (60 * 60) > #define SECSPERDAY (24 * SECSPERHOUR) > @@ -60,6 +59,26 @@ UINTN CumulativeDays[2][14] =3D { > } > }; >=20 > +/* Check the year is leap or not. */ > +// BOOLEAN IsLeap( > +// INTN timer > +// ) > +BOOLEAN > +IsLeap ( > + time_t timer > + ) > +{ > + INT64 Remainder1; > + INT64 Remainder2; > + INT64 Remainder3; > + > + DivS64x64Remainder (timer, 4, &Remainder1); > + DivS64x64Remainder (timer, 100, &Remainder2); > + DivS64x64Remainder (timer, 400, &Remainder3); > + > + return (Remainder1 =3D=3D 0 && (Remainder2 !=3D 0 || Remainder3 =3D=3D= 0)); > +} > + > /* Get the system time as seconds elapsed since midnight, January 1, 197= 0. > */ > // INTN time( > // INTN *timer > @@ -117,12 +136,13 @@ gmtime ( > ) > { > struct tm *GmTime; > - UINT16 DayNo; > - UINT32 DayRemainder; > + UINT64 DayNo; > + UINT64 DayRemainder; > time_t Year; > time_t YearNo; > - UINT16 TotalDays; > - UINT16 MonthNo; > + UINT32 TotalDays; > + UINT32 MonthNo; > + INT64 Remainder; >=20 > if (timer =3D=3D NULL) { > return NULL; > @@ -135,18 +155,21 @@ gmtime ( >=20 > ZeroMem ((VOID *)GmTime, (UINTN)sizeof (struct tm)); >=20 > - DayNo =3D (UINT16)(*timer / SECSPERDAY); > - DayRemainder =3D (UINT32)(*timer % SECSPERDAY); > + DayNo =3D (UINT64)DivS64x64Remainder (*timer, SECSPERDAY, > &Remainder); > + DayRemainder =3D (UINT64)Remainder; >=20 > - GmTime->tm_sec =3D (int)(DayRemainder % SECSPERMIN); > - GmTime->tm_min =3D (int)((DayRemainder % SECSPERHOUR) / > SECSPERMIN); > - GmTime->tm_hour =3D (int)(DayRemainder / SECSPERHOUR); > - GmTime->tm_wday =3D (int)((DayNo + 4) % 7); > + DivS64x64Remainder (DayRemainder, SECSPERMIN, &Remainder); > + GmTime->tm_sec =3D (int)Remainder; > + DivS64x64Remainder (DayRemainder, SECSPERHOUR, &Remainder); > + GmTime->tm_min =3D (int)DivS64x64Remainder (Remainder, SECSPERMIN, > NULL); > + GmTime->tm_hour =3D (int)DivS64x64Remainder (DayRemainder, > SECSPERHOUR, NULL); > + DivS64x64Remainder ((DayNo + 4), 7, &Remainder); > + GmTime->tm_wday =3D (int)Remainder; >=20 > for (Year =3D 1970, YearNo =3D 0; DayNo > 0; Year++) { > - TotalDays =3D (UINT16)(IsLeap (Year) ? 366 : 365); > + TotalDays =3D (UINT32)(IsLeap (Year) ? 366 : 365); > if (DayNo >=3D TotalDays) { > - DayNo =3D (UINT16)(DayNo - TotalDays); > + DayNo =3D (UINT64)(DayNo - TotalDays); > YearNo++; > } else { > break; > @@ -158,7 +181,7 @@ gmtime ( >=20 > for (MonthNo =3D 12; MonthNo > 1; MonthNo--) { > if (DayNo >=3D CumulativeDays[IsLeap (Year)][MonthNo]) { > - DayNo =3D (UINT16)(DayNo - (UINT16)(CumulativeDays[IsLeap > (Year)][MonthNo])); > + DayNo =3D (UINT64)(DayNo - (UINT32)(CumulativeDays[IsLeap > (Year)][MonthNo])); > break; > } > } > -- > 2.20.1.windows.1