Re: [glibc PATCH] fcntl: put F_OFD_* constants under #ifdef __USE_FILE_OFFSET64

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

 



On 08/17/2016 07:39 PM, Jeff Layton wrote:
On Wed, 2016-08-17 at 19:34 +0200, Florian Weimer wrote:
On 08/17/2016 04:47 PM, Jeff Layton wrote:

The Linux kernel expects a flock64 structure whenever you use OFD locks
with fcntl64. Unfortunately, you can currently build a 32-bit program
that passes in a struct flock when it calls fcntl64.

Only define the F_OFD_* constants when __USE_FILE_OFFSET64 is also
defined, so that the build fails in this situation rather than
producing a broken binary.

Doesn't this affect legacy POSIX-style locks as well, under very similar
circumstances?



No. The kernel will decide which type of struct it is based on whether
userland passes in F_SETLK or F_SETLK64.

Let me see if I can sort this out.  Is the situation like this?

        _FILE_OFFSET_…    …BITS == 32          …BITS == 64
        struct …       flock   flock64    flock   flock64
fcntl (F_SETLK)        ok      BAD        ok      BAD
fcntl (F_SETLK64)      BAD     ok         ok      ok
fcntl (F_OFD_SETLK)    BAD     ok¹        ok      ok

¹ is broken by your patch, right?

Looking at the definition of struct flock and struct flock64, the risk is that application silently succeed in locking the wrong thing when using struct flock64 with a 32-it interface.

Thanks,
Florian
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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