diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/ustat.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/ustat.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/ustat.c b/sysdeps/unix/sysv/linux/ustat.c index 5ffd76511f..e1acbed5b5 100644 --- a/sysdeps/unix/sysv/linux/ustat.c +++ b/sysdeps/unix/sysv/linux/ustat.c @@ -28,10 +28,12 @@ int ustat (dev_t dev, struct ustat *ubuf) { - unsigned short int k_dev; + unsigned long long int k_dev; /* We must convert the value to dev_t type used by the kernel. */ - k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff); + k_dev = dev & ((1ULL << 32) - 1); + if (k_dev != dev) + return EOVERFLOW; - return INLINE_SYSCALL (ustat, 2, k_dev, CHECK_1 (ubuf)); + return INLINE_SYSCALL (ustat, 2, (unsigned int) k_dev, CHECK_1 (ubuf)); } |