diff options
author | Rich Felker <dalias@aerifal.cx> | 2013-06-29 13:57:13 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2013-06-29 13:57:13 -0400 |
commit | 9b732fe51b814468a08c84d13238b4c83a42451a (patch) | |
tree | ba7d4fed8688a352ffb8904b2493839dd7ca0578 | |
parent | 780cbbe63ad9e60ef30dbcb2d74271e899dae245 (diff) | |
download | musl-9b732fe51b814468a08c84d13238b4c83a42451a.tar.gz musl-9b732fe51b814468a08c84d13238b4c83a42451a.tar.bz2 musl-9b732fe51b814468a08c84d13238b4c83a42451a.tar.xz musl-9b732fe51b814468a08c84d13238b4c83a42451a.zip |
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.
-rw-r--r-- | include/sys/sysmacros.h | 2 |
1 files changed, 1 insertions, 1 deletions
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) )) |