Out of openat flag space
David Legault
legault.david at gmail.com
Wed Apr 8 05:49:21 EDT 2015
On Wed, Apr 8, 2015 at 4:00 AM, Kernel Apprentice
<kernelapprentice at gmail.com> wrote:
> Hello,
>
>> Hello,
>>
>> Now that we have O_TMPFILE and O_BENEATH added to the openat flags, there
>> is no space left to add more flags since the flags variable is a 32 bit
>> int. How does one resolve this issue and extend this? A new syscall with a
>> 64bit wide flags support?
>
> Maybe I'm missing something, but a signed 32 bit integer variable holds
> a maximum value of
>
> 2,147,483,647
>
> The highest value for the O_BENEATH flag that i could spot in the patch
> you linked is
>
> 0x4000000
>
> which equals
>
> 67,108,864
>
> so there should be plenty of room for more flags?
>
> If the limit would be reached though I guess one could adjust the flag
> arguments to unsigned int types. I haven't reasearched the implications
> of this though. But OR'ing them for checks shouldn't yield any side effects.
>
> By the way there's - as far as I can tell - an invalid flag value
> defined in octal notation:
>
> diff --git a/arch/parisc/include/uapi/asm/fcntl.h
> b/arch/parisc/include/uapi/asm/fcntl.h
> index 34a46cbc76ed..3adadf72f929 100644
> --- a/arch/parisc/include/uapi/asm/fcntl.h
> +++ b/arch/parisc/include/uapi/asm/fcntl.h
> @@ -21,6 +21,7 @@
>
> #define O_PATH 020000000
> #define __O_TMPFILE 040000000
> +#define O_BENEATH 080000000 /* no / or .. in openat path */
>
> #define F_GETLK64 8
> #define F_SETLK64 9
>
> I guess this should be 0100000000?
That value overflows an int of size 4 bytes.
The important one to look at is the asm-generic one which covers most
platforms where the last available value was used.
diff --git a/include/uapi/asm-generic/fcntl.h b/include/uapi/asm-generic/fcntl.h
index e063effe0cc1..4542bc6a2950 100644
--- a/include/uapi/asm-generic/fcntl.h
+++ b/include/uapi/asm-generic/fcntl.h
@@ -92,6 +92,10 @@
#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT)
+#ifndef O_BENEATH
+#define O_BENEATH 040000000 /* no / or .. in openat path */
+#endif
+
#ifndef O_NDELAY
#define O_NDELAY O_NONBLOCK
#endif
>
>>
>> http://www.spinics.net/lists/fstests/msg01064.html
>>
>> Thanks
>>
>> David
>>
>>
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>
More information about the Kernelnewbies
mailing list