-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 16/04/10 11:35, Gert Doering wrote:
> Hi,
> 
> On Fri, Apr 16, 2010 at 11:16:32AM +0200, David Sommerseth wrote:
>> I'll look more into this, as the only advantage is that if open() with
>> O_EXCL|O_CREAT fails if the file exists, it should be used instead.
> 
> Unfortunately, this won't help against symlink attacks directed to
> non-existant files (like "-> /etc/nologin").  

That's right, this could create a local DoS.  I'm going to have a more
careful look at test_file() afterwards.  Considering to make it use
stat() instead of just trying to open the file for reading.

> It *will* protect against symlink attacks to existing files (overwriting
> /etc/passwd or something similarily nasty).
> 

Agreed!  And that's why I've decided to rewrite the patch to use open()
with O_EXCL.  With an improved test_file() function, this potential bug
should be closed.

I've dived into the kernel code to see what it *really* does (when the
man page are so unclear), and it should behave as those other Unices
does as well.  So, O_EXCL do make sense to avoid overwriting existing
files if it is a symlink to an existing file.


Btw ... When diving into the kernel code, I stumbled upon this comment
in fs/namei.c:1872:

        /* Does someone understand code flow here? Or it is only
         * me so stupid? Anathema to whoever designed this non-sense
         * with "intent.open".
         */

Thought that one was worth sharing ;-)  Having that said, this part of
the kernel code is not too easy to follow.


Kind regards,

David Sommerseth
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iEYEARECAAYFAkvIOFoACgkQDC186MBRfrr2UgCgrunMn9SRRTnlMB6606oTQgAd
07UAoJZmr8xAX7KKb8ERKW30X1Nuo8ZW
=KmQ+
-----END PGP SIGNATURE-----

Reply via email to