Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5426BBB0.1090309@opensource.dyc.edu>
Date: Sat, 27 Sep 2014 09:29:20 -0400
From: "Anthony G. Basile" <basile@...nsource.dyc.edu>
To: musl@...ts.openwall.com
Subject: Re: fdopen/fflush problem

On 09/26/14 03:23, u-wsnj@...ey.se wrote:
> On Fri, Sep 26, 2014 at 03:05:48AM -0400, Rich Felker wrote:
>>      unspecified if the flag argument contains more than the following
>>      flags:"
>>
>> The list that follows includes just O_APPEND, O_CLOEXEC, and O_*SYNC,
>> so including O_WRONLY has unspecified behavior. However, since this is
>> just unspecified, not undefined, it seems bad for something "horribly
>> wrong" to happen, like a file with no access like we're getting now.
>> Indeed, POSIX will define an optional error:
>>
>>      "The mkostemp( ) function may fail if:
>>
>>      [EINVAL] The value of the flag argument is invalid."
>>
>> So I think we should either make this error be detected, or silently
>> mask off the bad access mode. My leaning would be towards reporting it
>> as an error. Opinions?
>
> +1 (reporting an error)
>
> Rune
>

Both uclibc [1] and glibc are okay with the flag combination 
O_WRONLY|O_CLOEXEC.  With unspecified behaviour you really can't say 
which way to go here for portability.  The correct thing to do would be 
to get this behaviour specified (in SUSv4 or something??) since mkostemp 
is currently a GNU-ism.


Ref.

[1] In uclibc libc/stdlib/mkostemp.c calls __gen_tempname in 
libc/misc/internals/tempname.c with kind = __GT_FILE and opens the file with

     fd = open (tmpl, O_RDWR | O_CREAT | O_EXCL, mode);

which is different from how musl does it in __mkostemps in 
src/temp/mkostemps.c

    fd = open(template, flags | O_RDWR | O_CREAT | O_EXCL, 0600);

Looks like uclibc completely ignores O_APPEND, O_CLOEXEC, and O_*SYNC.

See

http://git.uclibc.org/uClibc/tree/libc/stdlib/mkostemp.c
http://git.uclibc.org/uClibc/tree/libc/misc/internals/tempname.c

http://git.musl-libc.org/cgit/musl/tree/src/temp/mkostemp.c
http://git.musl-libc.org/cgit/musl/tree/src/temp/mkostemps.c


-- 
Anthony G. Basile, Ph. D.
Chair of Information Technology
D'Youville College
Buffalo, NY 14201
(716) 829-8197

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.