Solving the Year 2038 problem in the Linux kernel πŸ•

κΉ€μˆ˜λΉˆΒ·2021λ…„ 11μ›” 19일
0

Linux

λͺ©λ‘ 보기
3/3
post-thumbnail

Year 2038 Problem ?

Linuxμ—μ„œ μ‹œκ°„μ΄ ν‘œν˜„λ˜λŠ” λ°©μ‹μœΌλ‘œ 인해, λΆ€ν˜Έν˜• 32 λΉ„νŠΈ μˆ«μžλŠ” 2038λ…„ 1μ›” 19일 03:14:07 μ΄ν›„μ˜ μ‹œκ°„μ„ 지원할 수 μ—†λ‹€λŠ” λ¬Έμ œλ‹€.

Y2038, Y2K38, Y2.038K, Unix Millennium Bug 라고도 λΆˆλ¦°λ‹€.


Y2K38의 원인

이 λ¬Έμ œλŠ” λŒ€λΆ€λΆ„μ˜ C ν”„λ‘œκ·Έλž¨μ΄ time.h 라이브러리λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•œλ‹€.

  #include <time.h>
  time_t time(time_t *tloc);

이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ‹œκ°„ 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ ν‘œμ€€ 4 λ°”μ΄νŠΈ ν˜•μ‹μ„ μ„€μ •ν•˜κ³ 
μ‹œκ°„ 값을 λ³€ν™˜, ν‘œμ‹œ 및 κ³„μ‚°ν•˜κΈ°μœ„ν•œ μ—¬λŸ¬ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

λΆ€ν˜Έν˜• 4 λ°”μ΄νŠΈ μ •μˆ˜μ˜ μ΅œλŒ€ 값은 2,147,483,647둜, μ΄λ•Œ Y2K38 κ°€ λ°œμƒν•œλ‹€.
λΆ€ν˜Έν˜• 4 λ°”μ΄νŠΈ μ •μˆ˜κ°€ 음수둜 λ‘€μ˜€λ²„λ˜κΈ° μ „μ˜ μ΅œλŒ€ μ‹œκ°„ 값은 2,147,483,647이며,
μ΄λŠ” GMT 2038λ…„ 1μ›” 19일 03:14:07 이닀.

이 날에 time.hλ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  C ν”„λ‘œκ·Έλž¨μ€ λ‚ μ§œ 계산에 λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

C ν”„λ‘œκ·Έλž¨μ˜ 높은 μ΄μ‹μ„±μœΌλ‘œ 인해 μž„λ² λ””λ“œ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œλ„ 많이 μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— Y2K38 λ¬Έμ œλŠ” μ»΄ν“¨ν„°λΏλ§Œ μ•„λ‹ˆλΌ λ§Žμ€ μž„λ² λ””λ“œ μ‹œμŠ€ν…œμ—λ„ 영ν–₯을 λ―ΈμΉœλ‹€.


Y2K38의 영ν–₯

Y2K38 문제둜 인해 ν•΄λ‹Ή λ‚ μ§œ λ˜λŠ” κ·Έ 이전에 일뢀 컴퓨터 μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ‹€νŒ¨ ν•  수 μžˆλ‹€. μ‹œμŠ€ν…œ μ‹œκ°„μ„ λΆ€ν˜Έν˜• 32λΉ„νŠΈ μ •μˆ˜λ‘œ μ €μž₯ν•˜λ©°, POSIX μ‹œκ°„ ν‘œκΈ°λ²•μ„ λ”°λ₯΄λŠ” λͺ¨λ“  μ†Œν”„νŠΈμ›¨μ–΄ 및 μ‹œμŠ€ν…œμ— 영ν–₯을 λ―ΈμΉœλ‹€. ( POSIX μ‹œκ°„ ν‘œκΈ°λ²•μ€ μ‹œκ°„μ„ 1970λ…„ 1μ›” 1일 μžμ • UTC 이후 경과된 초 μ‹œκ°„μ„ μ΄μš©ν•˜μ—¬ ν‘œν˜„ν•œλ‹€.)

μœ„μ™€ 같은 μƒν™©μ—μ„œ ν‘œν˜„ν•  수 μžˆλŠ” μ΅œλŒ€ μ‹œκ°„μ€ 2038λ…„ 1μ›” 19일 03:14:07 이닀.

이 μ΄ν›„μ˜ μ‹œκ°„μ€ 음수둜 μ €μž₯λ˜μ–΄ 2038년이 μ•„λ‹Œ 1901λ…„μ˜ λ‚ μ§œλ‘œ ν•΄μ„λœλ‹€.

λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž¨μ΄ 2038년에, λ˜λŠ” 그에 κ·Όμ ‘ν•œ μ‹œκΈ°μ— 영ν–₯을 λ°›κ² μ§€λ§Œ, 미래 λ‚ μ§œλ₯Ό λ‹€λ£¨λŠ” ν”„λ‘œκ·Έλž¨μ€ 훨씬 빨리 λ¬Έμ œμ— λΆ€λ”ͺμΉ  것이닀.

예λ₯Ό λ“€μ–΄, 20λ…„ λ’€μ˜ μš”μΌμ„ κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ€ 2038λ…„ 보닀 20λ…„ 전인 2018λ…„ 이전에 μˆ˜μ •ν•΄μ•Ό ν•œλ‹€.


AOLserver μ†Œν”„νŠΈμ›¨μ–΄ 문제

2006λ…„ 5월에 λ°œμƒν•œ AOLserver μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ¬Έμ œλŠ” 졜초둜 λ‚˜νƒ€λ‚œ 2038λ…„ 문제의 μ˜ˆλ‹€.

AOL μ„œλ²„ μ‹œμŠ€ν…œμ˜ 초기 μ„€κ³„μ—μ„œλŠ” λ‹¨μˆœνžˆ μž„μ˜μ˜ μ‹œκ°„ 초과 λ‚ μ§œλ₯Ό μ§€μ •ν•˜μ—¬ μ²˜λ¦¬ν–ˆμœΌλ©°, μ„œλ²„μ˜ κΈ°λ³Έ ꡬ성은 μš”μ²­μ΄ 10μ–΅ 초 후에 time out이 λ˜λ„λ‘ μ§€μ •ν–ˆλ‹€.

μ΄λ•Œ 2006λ…„ 5μ›” 12일 21:27:28 λΆ€ν„° 10μ–΅ 초 (μ•½ 32 λ…„) μ΄ν›„μ—λŠ” λ¬Έμ œκ°€ λ˜λŠ” λ‚ μ§œλ₯Ό μ΄ˆκ³Όν•œλ‹€.
λ”°λΌμ„œ time out 계산이 μ˜€λ²„ν”Œλ‘œμš°λ˜κ³  과거의 λ‚ μ§œκ°€ λ°˜ν™˜λ˜μ–΄ μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ€‘λ‹¨λ˜μ—ˆλ‹€.


ν•΄κ²° λ°©μ•ˆ

  1. λΉ„λΆ€ν˜Έν˜• 32 λΉ„νŠΈ time_t

    λΆ€ν˜Έν˜• 32λΉ„νŠΈ μ •μˆ˜ ν‘œν˜„μ„ λΉ„λΆ€ν˜Έν˜•μœΌλ‘œ λ³€ν™˜ν•  경우, μ΅œμƒμœ„ λΉ„νŠΈλ₯Ό λΆ€ν˜Έλ‘œ ν‘œν˜„ν•  ν•„μš”κ°€ μ—†λ‹€. λ”°λΌμ„œ λΆ€ν˜Έν˜•μΌ λ•ŒλŠ” μ΅œλŒ€ 2,147,483,647κΉŒμ§€ ν‘œν˜„ κ°€λŠ₯ν•œ λ°˜λ©΄μ—, λΉ„λΆ€ν˜Έν˜•μΌ λ•Œ μ΅œλŒ€ 4,294,967,295κΉŒμ§€ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

    ν•˜μ§€λ§Œ time_tλŠ” λ‚ μ§œμ™€ μ‹œκ°„μ„ μ €μž₯ν•˜λŠ” 데만 μ‚¬μš©λ˜λŠ” 것이 μ•„λ‹ˆλΌ λ§Žμ€ μ‘μš©μ—μ„œ μ‹œκ°„/λ‚ μ§œ 차이λ₯Ό μ €μž₯ν•˜λŠ” 데에도 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, λ¬Έμ œκ°€ λ°œμƒν•  수 있으며, 1970λ…„ 이전 λ‚ μ§œλ₯Ό λ‹€λ£¨λŠ” μ‘μš©μ€ μˆ˜ν–‰ν•  수 μ—†λ‹€.

    λ§Œμ•½ λΉ„λΆ€ν˜Έν˜•μœΌλ‘œ λ°”κΎΌλ‹€ 해도, 이 λ¬Έμ œλŠ” 2106λ…„ 2μ›” 7일 06:23:15 둜 지연될 것이닀.

  2. λΆ€ν˜Έν˜• 64 λΉ„νŠΈ time_t

    64 λΉ„νŠΈ ν”„λ‘œκ·Έλž¨μ—μ„œ time_tλŠ” λ‚ μ§œμ™€ μ‹œκ°„μ„ 기원 ν›„ 2,920μ–΅κΉŒμ§€ λ‚˜νƒ€λ‚Ό 수 있으며, μ΄λŠ” ν˜„μž¬ μ˜ˆμƒ 우주 λ‚˜μ΄μ˜ μ•½ 20 λ°°λ‹€.

    2038λ…„μ˜ λͺ¨λ“  PC에 64 λΉ„νŠΈ CPUκ°€ μžˆλ”λΌλ„ ν•˜μœ„ ν˜Έν™˜μ„±μœΌλ‘œ 인해 μ΄μ „μ˜ 32 λΉ„νŠΈ ν”„λ‘œκ·Έλž¨μ΄ 많이 μ‹€ν–‰λ˜λ©° 이둜 인해 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

    β€˜μž˜ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨β€™μ€ μƒˆλ‘œμš΄ λ²„μ „μ˜ 라이브러리둜 κ°„λ‹¨νžˆ 재 컴파일 ν•  수 μžˆλ‹€. μ΄λŠ” 전체 μ‹œκ°„μ„ 자체적인 μ‹œκ°„ type 및 function으둜 μΊ‘μŠν™”ν•˜κΈ° λ•Œλ¬Έμ— κ°€λŠ₯ν•œ 것이닀.

    ν•˜μ§€λ§Œ μž„λ² λ””λ“œμ˜ 경우 μ΄λŸ¬ν•œ 칩을 μ •ν™•νžˆ μ°Ύμ•„λ‚΄κΈ° 맀우 μ–΄λ ΅κ³ , λ°œκ²¬ν•˜λ”λΌλ„ μœ„μ„± 및 기타 λ§Žμ€ 우주 μž₯λΉ„μ—μ„œ μ΄λŸ¬ν•œ 칩을 μ œκ±°ν•˜λŠ” 것은 λΉ„ν˜„μ‹€μ μ΄λ‹€.

    time_t 데이터 ν˜•μ‹μ˜ μ •μ˜λ₯Ό 64 λΉ„νŠΈλ‘œ λ³€κ²½ν•˜λ©΄ μ†Œν”„νŠΈμ›¨μ–΄ 및 데이터 μ €μž₯μ†Œμ˜ 이진 ν˜Έν™˜μ„±μ΄ 손상될 수 있고. 이진 μ‹œκ°„ ν‘œν˜„μ„ μ²˜λ¦¬ν•˜λŠ” λͺ¨λ“  μ½”λ“œμ— 영ν–₯을 쀄 수 μžˆλ‹€.

  3. NetBSD의 ν•΄κ²° λ°©μ•ˆ

    NetBSD 6.0 Release (October, 2012)λΆ€ν„° NetBSDλŠ” 32 λΉ„νŠΈ 및 64 λΉ„νŠΈ μ•„ν‚€ν…μ²˜μ— λͺ¨λ‘ 64 λΉ„νŠΈ time_tλ₯Ό μ‚¬μš©ν•œλ‹€. λ˜ν•œ 이진 ν˜Έν™˜μ„± 계측을 톡해 이전 NetBSD Release 둜 컴파일 된 μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ 32 λΉ„νŠΈ time_tλ₯Ό 지원할 수 μžˆλ‹€.

  1. λ¦¬λˆ…μŠ€ 컀널 기반 ν•΄κ²° λ°©μ•ˆ
    1) Replace unsafe value / structure

    32 λΉ„νŠΈ ABI time_t ( struct timespec, struct timeval κ³Ό 같은 κ΄€λ ¨ 데이터 ꡬ쑰)λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹ , 64 λΉ„νŠΈμΈ timespec64, ktime_tλ₯Ό μ‚¬μš©ν•˜λ„λ‘ λ³€κ²½ν•œλ‹€.

struct  timespec{
    	time_t  tv_sec; /* seconds */
	long  tv_nsec; /* nanosecond */
};
	
struct  timeval{
	time_t  tv_sec; /* seconds */
	suseconds_t  tv_usec; /* microseconds */
};
  • timespec, timeval ꡬ쑰, time_tλ₯Ό μ‚¬μš©ν•˜μ—¬ Y2K38 문제λ₯Ό κ²ͺλŠ”λ‹€.

typedef __s64 time64_t;  
	
struct  timespec64{
	time64_t  tv_sec; /* seconds */
	long  tv_nsec; /* nanoseconds */
};

union  ktime{
	s64 tv64;
};
typedef  union  ktime  ktime_t;
  • timespec64, ktime_t ꡬ쑰, 64-bit signed intν˜•μ„ μ‚¬μš©ν•˜μ—¬ Y2K38 문제λ₯Ό ν•΄μ†Œν•  수 μžˆλ‹€.

2) System call 64-bit `time_t` λ³€ν™˜

time_t λ˜λŠ” timespec, timeval λ“± νŒŒμƒ 데이터 ꡬ쑰λ₯Ό νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•˜λŠ” System call (ioctl μ œμ™Έ)이 μžˆλŠ”λ°, 이 time_tλ₯Ό 64 λΉ„νŠΈλ‘œ ν™•μž₯ν•˜κΈ° μœ„ν•΄μ„  μƒˆλ‘œμš΄ System call둜 κ΅μ²΄ν•˜κ³  이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ μœ μ§€ν•΄μ•Ό ν•œλ‹€.

λ”°λΌμ„œ λͺ¨λ“  System call을 64 λΉ„νŠΈλ‘œ λ³€κ²½ν•˜λ©΄μ„œ, ν˜Έν™˜μ„±μ„ μœ μ§€ν•˜κΈ° μœ„ν•΄ CONFIG_COMPAT_TIMEλ₯Ό λ„μž…ν•œλ‹€.

CONFIG_COMPAT_TIME은 32 λΉ„νŠΈ ν˜Έν™˜ λͺ¨λ“œλ₯Ό 가진 64 λΉ„νŠΈ μ•„ν‚€ν…μ²˜μ™€ μƒˆλ‘œμš΄ System call 을 μ œκ³΅ν•˜λ„λ‘ ν™•μž₯된 λͺ¨λ“  32 λΉ„νŠΈ μ•„ν‚€ν…μ²˜μ—μ„œ μ„ΈνŒ…λœλ‹€.

3) Filesystem Timestamps

λ¦¬λˆ…μŠ€ 파일 μ‹œμŠ€ν…œμΈ EXT4λŠ” β€œextra” λΉ„νŠΈλ₯Ό 톡해 timestampλ₯Ό ν™•μž₯ν•œλ‹€.
β€œextra” 32 λΉ„νŠΈ λ‚΄μ—μ„œ ν•˜μœ„ 2 λΉ„νŠΈλŠ” 32 λΉ„νŠΈ 초 ν•„λ“œλ₯Ό 34 λΉ„νŠΈλ‘œ ν™•μž₯ν•˜λŠ”λ° μ‚¬μš©ν•˜κ³ ,
μƒμœ„ 30 λΉ„νŠΈλŠ” λ‚˜λ…Έ 초 timestamp의 정확도λ₯Ό μ œκ³΅ν•˜λŠ” 데 μ‚¬μš©ν•œλ‹€.

λ•Œλ¬Έμ— timestampλŠ” 2446λ…„ 5μ›”κΉŒμ§€ μ˜€λ²„ν”Œλ‘œμš° λ˜μ§€ μ•ŠλŠ”λ‹€.

ν•˜μ§€λ§Œ, μ•„λž˜μ˜ ν•¨μˆ˜μ—μ„œ, Y2K38 λ¬Έμ œλ‘œλΆ€ν„° μ•ˆμ „ν•˜μ§€ μ•Šμ€ CURRENT_TIME_SEC 의 μ‚¬μš©μœΌλ‘œ 인해 Y2K38 문제λ₯Ό κ²ͺ게 λœλ‹€.

struct  timespec  ext4_current_time(struct  inode *inode){
	return (inode->i_sb->s_time_gran < NSEC_PER_SEC) ?
		current_fs_time(inode->i_sb) : CURRENT_TIME_SEC;
}
  • 2016λ…„ linux kernel gitμ—λŠ” ext4_current_time()이 μ‚­μ œλ˜κ³  current_time()이 λŒ€μ²΄λ˜μ—ˆλ‹€. [12]

4) Use Monotonic clock instead of Wall time

Monotonic clock은 μ‹œμŠ€ν…œμ΄ λΆ€νŒ…ν•  λ•Œ 0λΆ€ν„° μ‹œμž‘ν•˜λ©° μ¦κ°€ν•˜λŠ” 반면, Wall clock은 싀세계 μ‹œκ°„μ„ λ‚˜νƒ€λ‚Έλ‹€.

μž¬λΆ€νŒ… 없이 μ‹œμŠ€ν…œμ΄ 100λ…„ λ™μ•ˆ μœ μ§€λ˜μ§€λŠ” μ•Šμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒν•˜κΈ° λ•Œλ¬Έμ—, Monotonic clock λ₯Ό μ‚¬μš©ν•˜μ—¬ 얻은 μ‹œκ°„μ˜ μ‹€μ œ λ²”μœ„λŠ” 항상 32 λΉ„νŠΈ κ°’ λ²”μœ„ μ•ˆμ— μžˆλ‹€.


32-bit Computerμ—μ„œμ˜ Y2K38

Y2K38 λ¬Έμ œλŠ” 32λΉ„νŠΈ 컴퓨터λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 뿐만 μ•„λ‹ˆλΌ,
μ‹œμŠ€ν…œ λ‚΄μ—μ„œ time ν•„λ“œκ°€ μ–΄λ–»κ²Œ μ €μž₯λ˜λŠ”μ§€μ— 달렀 μžˆλ‹€.

32 λΉ„νŠΈ timestamp와 ν•¨κ»˜ 32 λΉ„νŠΈ μœ λ‹‰μŠ€ μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜λŠ” 경우, Y2K38의 영ν–₯을 λ°›λŠ”λ‹€.
μ•„λž˜λŠ” 32 λΉ„νŠΈ μ‹œμŠ€ν…œμ—μ„œ 64 λΉ„νŠΈ μœ λ‹‰μŠ€ timestampλ₯Ό μ‚¬μš©ν•˜λŠ” μ˜ˆμ œλ‹€.

typedef long long time64_t;
time64_t mktime64 (struct tm *t);

struct tm *localtime64_r (const  time64_t  *t,  struct tm *p);

OpenBSD 5.5μ—μ„œλŠ” 32λΉ„νŠΈ ν”Œλž«νΌμ—μ„œλ„ 64λΉ„νŠΈλ‘œ μ‹œκ°„ 값을 μ²˜λ¦¬ν•΄μ„œ Y2K38μ—μ„œ λ²—μ–΄λ‚˜λ„λ‘ ν–ˆλ‹€.
ν•˜μ§€λ§Œ 이둜 인해 ABIκ°€ λ°”λ€Œμ–΄, OpenBSD 5.4의 μ‹€ν–‰ 파일과 라이브러리λ₯Ό μ‹€ν–‰μ‹œν‚¬ 수 μ—†λ‹€. λ˜ν•œ 일뢀 λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œ, 파일 ν˜•μ‹μ€ λ‚΄λΆ€μ μœΌλ‘œ 32λΉ„νŠΈλ‘œ μ‹œκ°„μ„ μ €μž₯ν•˜λŠ”λ°,
이λ₯Ό λ‹¨μ‹œμΌ 내에 λͺ¨λ‘ 64λΉ„νŠΈλ‘œ μ „ν™˜ν•  수 μžˆλ‹€λŠ” 보μž₯이 μ—†λ‹€.

Linux Kernel 5.6μ—μ„œμ˜ Y2K38

Linux Kernel 5.6 Release μ—μ„œλŠ”, λͺ¨λ“  time_t의 μœ μ €λ“€μ„ λ‹€μ‹œ κ²€ν† ν•˜μ—¬ 컀널이 μž₯기적으둜 μœ μ§€ 관리 κ°€λŠ₯ν•œ μƒνƒœμΈμ§€ ν™•μΈν•˜κ³ , time_t에 λŒ€ν•œ λͺ¨λ“  μ°Έμ‘°λ₯Ό μ•ˆμ „ν•œ λŒ€μ•ˆμœΌλ‘œ λŒ€μ²΄ν•˜μ—¬ Y2K38 문제λ₯Ό ν•΄μ†Œν–ˆλ‹€.

Bergmann은 User Space μ‘μš© ν”„λ‘œκ·Έλž¨μ€ μ΅œμ‹  Linux Kernel System call을 μ‚¬μš©ν•΄μ•Ό ν•˜λ©°,
GNU C Library 2.32 및 Musl libc 1.2λ₯Ό μ‚¬μš©ν•˜μ—¬ 64 λΉ„νŠΈ time_t에 λŒ€ν•΄ User Spaceλ₯Ό λΉŒλ“œν•΄μ•Ό ν•œλ‹€κ³  λ°œν‘œν–ˆλ‹€.

λ‹€μŒμ€ Y2K38 문제 ν•΄μ†Œλ₯Ό μœ„ν•œ λͺ‡ 가지 주의 사항이닀.

  • System call μΈν„°νŽ˜μ΄μŠ€λ₯Ό 직접 μ‚¬μš©ν•˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ€ κΈ°μ‘΄ System call λŒ€μ‹ , Linux 5.1에 μΆ”κ°€λœ time64 System call을 μ‚¬μš©ν•˜λ„λ‘ ν¬νŒ…ν•΄μ•Ό ν•œλ‹€.

  • Kernel uapi.h의 볡사본 λ˜λŠ” κ·Έ λ‚΄μš©μ„ μ‚¬μš©ν•˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨, 특히 sound/asound.h, xfs/xfs_fs.h, linux/input.h, linux/elfcore.h, linux/sockios.h, linux/timex.h 및 linux/can/bcm.h 의 κ²½μš°μ—λŠ” Linux 5.6 λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈν•΄μ•Ό ν•œλ‹€.

  • λ‚˜λ¨Έμ§€ μΈν„°νŽ˜μ΄μŠ€ 쀑 μΌλΆ€λŠ” ν˜Έν™˜λ˜μ§€ μ•Šμ•„, 64 λΉ„νŠΈ time_tλ₯Ό 전달할 수 μ—†μœΌλ―€λ‘œ CLOCK_MONOTONIC μ‹œκ°„ λ˜λŠ” λΉ„λΆ€ν˜Έν˜• 32 λΉ„νŠΈ timestampλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ꡬ성해야 ν•œλ‹€.

  • 64 λΉ„νŠΈ μ‹œμŠ€ν…œμ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  y2K38 λ¬Έμ œλŠ” 32 λΉ„νŠΈ μ‹œμŠ€ν…œμ—λ„ λ˜‘κ°™μ΄ 적용되며. 특히 λΆ€ν˜Έν˜• 32 λΉ„νŠΈ timestampκ°€ μžˆλŠ” 파일 μ‹œμŠ€ν…œ (ext4, ext2, xfs, ufs)에 영ν–₯을 λ―ΈμΉœλ‹€.

μ°Έκ³ λ¬Έν—Œ

  1. Amit Kumar, β€œY2K38”, January 2011
  2. time()-Linux manual page,
  3. Vishal Singh, Prerna Chaudhary, β€œY2K38: The Bug”, International Journal of Engineering and Advanced Technology (IJEAT), October 2012
  4. Announcing NetBSD 6.0
  5. Christopher B. Browne's Home Page - The 2038 Problem
  6. Jonathan Corbet, 2038 is closer than it seems, May 2014
  7. SZ Lin, y2038 issue, July 2016
  8. μ‹œκ°„ <time.h> - - NEOS POSIX ν•¨μˆ˜ μ„€λͺ…μ„œ
  9. The Open Group Publications Catalog <sys/time.h>
  10. time64.h - include/linux/time64.h - Linux source code (v4.7)
  11. [Y2038] [RFC 03/37] y2038: introduce CONFIG_COMPAT_TIME
  12. The Linux Kernel- ext4 Data Structure and Algorithms 4. Dynamic Structure
  13. ext4: use current_time() for inode timestamps
  14. If I set a 32-bit computer to the year 2038, will it be affected by the Year 2038 bug?
  15. 64 bit unix timestamp conversion
  16. Linux Kernel 5.6 Released! Here are the Main New Features
  17. Linux Kernel 5.6 Developers Ready for 2038
profile
μ—΄μ‹¬νžˆ λ°°μš°λŠ” λ‚΄κ°€ 되자

0개의 λŒ“κΈ€