Re: The open() system call in f8 really broken... | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
On Thu, Aug 16, 2007 at 04:21:38PM -0400, Dave Jones wrote:
> On Thu, Aug 16, 2007 at 05:08:15PM +0200, Oliver Falk wrote:
>
> > If you compile the whole Fedora tree, how many warnings will you see?
>
> So I grepped across a make prep'd tree of devel (all 63 gig of it).
> Here's the fallout..
>
> openmpi/openmpi-1.2.3/orte/runtime/orte_abort.c fd = open(abort_file, O_CREAT);
> jython/jython-svn-Release_2_2beta1/CPythonLib/test/test_unicode_file.py:f = os.open(TESTFN_ENCODED, os.O_CREAT)
> perl/perl-5.8.8/t/op/taint.t: eval { sysopen(my $cr, $evil, &O_CREAT) };
> proftpd/proftpd-1.3.0a/contrib/mod_rewrite.c: if ((fifo_lockfd = open(fifo_lockname, O_CREAT)) < 0)
> pwlib/pwlib-1.10.7/configure:sem_t *s = sem_open("test", O_CREAT)
> pwlib/pwlib-1.10.7/configure.ac: [sem_t *s = sem_open("test", O_CREAT)],
> python/Python-2.5.1/Lib/test/test_unicode_file.py: f = os.open(filename, os.O_CREAT)
> python-docs/Python-2.5.1/Lib/test/test_unicode_file.py: f = os.open(filename, os.O_CREAT)
> xca/xca-0.6.3/_tmp_root/usr/lib/python2.5/test/test_unicode_file.py: f = os.open(filename, os.O_CREAT)
>
> Not too bad considering.
You grepped only for O_CREAT and no other bits in flags? Otherwise
the list is way too short IMHO.
fd = open(abort_file, O_CREAT);
is broken not just for one reason, but for 2...
1) POSIX says:
Applications shall specify exactly one of the first three values (file
access modes) below in the value of oflag:
O_RDONLY, O_WRONLY, O_RDWR
Any combination of the following may be used:
... many ...
Eventhough Linux defines O_RDONLY to 0, so O_CREAT alone is actually
O_CREAT | O_RDONLY, e.g. on the Hurd O_RDONLY is 1, O_WRONLY 2
and O_RDWR 3, so not giving any of those is a serious error there
and just a portability issue on Linux.
2) missing mode for O_CREAT
Anyway, cases where open has compile time constant oflag argument
will be handled by the compile time error if mode is missing and O_CREAT
is present, so no need to worry about it - the mass rebuild will find
them all. The case steved was moaning about is when oflag is not
__builtin_constant_p. We can check even those cases after the mass rebuild,
simply check what programs or shared libraries use
__open{,at}{,64}_2@@GLIBC_2.7 symbols and check all those manually.
Jakub
--
Fedora-maintainers mailing list
Fedora-maintainers@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/fedora-maintainers
--
Fedora-maintainers-readonly mailing list
Fedora-maintainers-readonly@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/fedora-maintainers-readonly
[Home] [Fedora Users] [Fedora Devel Java] [Fedora Legacy] [Fedora Desktop] [Fedora SELinux] [Big List of Linux Books] [Yosemite News] [Yosemite Photos] [KDE Users] [Fedora Tools]