Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 16 Sep 2011 18:39:58 +0200
From: Daniel Cegiełka <daniel.cegielka@...il.com>
To: owl-dev@...ts.openwall.com
Subject: Re: cpio write(2) return value checks

from: cpio-2.10.90-owl-fixes.diff


diff -uNp -r cpio-2.10.90.old/src/copyin.c.orig cpio-2.10.90/src/copyin.c.orig
--- cpio-2.10.90.old/src/copyin.c.orig	2011-09-15 06:03:13.645164165 +0000
+++ cpio-2.10.90/src/copyin.c.orig	2011-09-15 06:03:21.775176098 +0000
@@ -375,12 +375,12 @@ create_final_defers ()
 	  continue;
 	}
       out_file_des = open (d->header.c_name,
-			   O_CREAT | O_WRONLY | O_BINARY, 0600);
+			   O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0600);
       if (out_file_des < 0 && create_dir_flag)
 	{
 	  create_all_directories (d->header.c_name);
 	  out_file_des = open (d->header.c_name,
-			       O_CREAT | O_WRONLY | O_BINARY,
+			       O_CREAT | O_EXCL | O_WRONLY | O_BINARY,
 			       0600);
 	}
       if (out_file_des < 0)
@@ -483,13 +483,13 @@ copyin_regular_file (struct cpio_file_st

       /* If not linked, copy the contents of the file.  */
       out_file_des = open (file_hdr->c_name,
-			   O_CREAT | O_WRONLY | O_BINARY, 0600);
+			   O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0600);

       if (out_file_des < 0 && create_dir_flag)
 	{
 	  create_all_directories (file_hdr->c_name);
 	  out_file_des = open (file_hdr->c_name,
-			       O_CREAT | O_WRONLY | O_BINARY,
+			       O_CREAT | O_EXCL | O_WRONLY | O_BINARY,
 			       0600);
 	}



========================================

and code from cpio-2.9-alt-open-O_EXCL.diff:


Fix race conditions when creating regular files in copy-in and copy-pass modes

* src/copyin.c (create_final_defers, copyin_regular_file): Change
open(2) calls to use O_EXCL.
* src/copypass.c (process_copy_pass): Likewise.

--- cpio/src/copyin.c
+++ cpio/src/copyin.c
@@ -373,12 +373,12 @@ create_final_defers ()
 	  continue;
 	}
       out_file_des = open (d->header.c_name,
-			   O_CREAT | O_WRONLY | O_BINARY, 0600);
+			   O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0600);
       if (out_file_des < 0 && create_dir_flag)
 	{
 	  create_all_directories (d->header.c_name);
 	  out_file_des = open (d->header.c_name,
-			       O_CREAT | O_WRONLY | O_BINARY,
+			       O_CREAT | O_EXCL | O_WRONLY | O_BINARY,
 			       0600);
 	}
       if (out_file_des < 0)
@@ -481,13 +481,13 @@ copyin_regular_file (struct cpio_file_stat*
file_hdr, int in_file_des)

       /* If not linked, copy the contents of the file.  */
       out_file_des = open (file_hdr->c_name,
-			   O_CREAT | O_WRONLY | O_BINARY, 0600);
+			   O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0600);

       if (out_file_des < 0 && create_dir_flag)
 	{
 	  create_all_directories (file_hdr->c_name);
 	  out_file_des = open (file_hdr->c_name,
-			       O_CREAT | O_WRONLY | O_BINARY,
+			       O_CREAT | O_EXCL | O_WRONLY | O_BINARY,
 			       0600);
 	}


--- end



2011/9/16 Vasiliy Kulikov <segoon@...nwall.com>:
> Hi Daniel,
>
> On Fri, Sep 16, 2011 at 18:24 +0200, Daniel Cegiełka wrote:
>> Can you check cpio-2.10.90-owl-fixes.diff?
>> I think there is a conflict with cpio-2.9-alt-open-O_EXCL.diff.
>
> What do you mean?  It applies without fuzz and with zero offset:
>
> (From a directory with all previous patches applied.)
> $ patch -p1 < /home/vasya/owl-r/current/Owl/packages/cpio/cpio-2.10.90-owl-fixes.diff
> patching file lib/rtapelib.c
> patching file src/copyin.c
> patching file src/copyin.c.orig
> patching file src/copypass.c
> patching file src/mt.c
> patching file src/util.c
> patching file tests/genfile.c
> $
>
> The same with the following patches.
>
> --
> Vasiliy
>

Powered by blists - more mailing lists

Your e-mail address:

Powered by Openwall GNU/*/Linux - Powered by OpenVZ