From 9b732fe51b814468a08c84d13238b4c83a42451a Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sat, 29 Jun 2013 13:57:13 -0400 Subject: [PATCH] fix shifts possibly larger than type in major() macro in theory this should not be an issue, since major() should only be applied to type dev_t, which is 64-bit. however, it appears some applications are not using dev_t but a smaller integer type (which works on Linux because the kernel's dev_t is really only 32-bit). to avoid the undefined behavior, do it as two shifts. --- include/sys/sysmacros.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/sys/sysmacros.h b/include/sys/sysmacros.h index d6c6aef6..07a3ef18 100644 --- a/include/sys/sysmacros.h +++ b/include/sys/sysmacros.h @@ -2,7 +2,7 @@ #define _SYS_SYSMACROS_H #define major(x) \ - ((unsigned)( (((x)>>32) & 0xfffff000) | (((x)>>8) & 0x00000fff) )) + ((unsigned)( (((x)>>31>>1) & 0xfffff000) | (((x)>>8) & 0x00000fff) )) #define minor(x) \ ((unsigned)( (((x)>>12) & 0xffffff00) | ((x) & 0x000000ff) )) -- 2.25.1