Argument type for FS_IOC_GETFLAGS/FS_IOC_SETFLAGS ioctls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

If I understand correctly how ioctl declarations works, FS_IOC_GETFLAGS
and FS_IOC_SETFLAGS ioctls take a pointer to a long argument, at least
according to include/uapi/linux/fs.h:

| #define FS_IOC_GETFLAGS                 _IOR('f', 1, long)
| #define FS_IOC_SETFLAGS                 _IOW('f', 2, long)

Not also the 32-bit compat versions of the ioctls takes an int:

| #define FS_IOC32_GETFLAGS               _IOR('f', 1, int)
| #define FS_IOC32_SETFLAGS               _IOW('f', 2, int)

However on the kernel side, all the filesystem interpret these values as
an int. For example in fs/ext4/ioctl.c:

|        unsigned int flags;
| ...
|                 return put_user(flags, (int __user *) arg);
| ...
|                 if (get_user(flags, (int __user *) arg))
| ...

Most of the userland code seems to pass an int to this ioctl, but a few
others (e.g.: bup, libexplain) passes a long. While it doesn't make a
difference on little endian machines, it does make a difference on
64-bit big endian machines.

Could you please tell me if I am wrong in my analysis or if there is a
actually real problem?

Thanks,
Aurelien

-- 
Aurelien Jarno	                        GPG: 1024D/F1BCDB73
aurelien@xxxxxxxxxxx                 http://www.aurel32.net

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux