Sorry, didn't actually attach the patch :)

-- 
Vasiliy Kulikov
http://www.openwall.com - bringing security into open computing environments
diff -uNp -r cpio-2.10.90.old/src/util.c cpio-2.10.90/src/util.c
--- cpio-2.10.90.old/src/util.c	2009-02-14 12:39:37 +0000
+++ cpio-2.10.90/src/util.c	2011-09-15 06:11:12.365866297 +0000
@@ -1165,7 +1165,8 @@ sparse_write (int fildes, char *buf, uns
 	      }
 	    else
 	      {
-		lseek (fildes, seek_count, SEEK_CUR);
+		if (lseek (fildes, seek_count, SEEK_CUR) == (off_t)-1)
+                        return -1;
 		cur_write_start = buf;
 		write_count = DISKBLOCKSIZE;
 		state = not_in_zeros;
@@ -1176,7 +1177,8 @@ sparse_write (int fildes, char *buf, uns
 	  case not_in_zeros :
 	    if (buf_all_zeros (buf, DISKBLOCKSIZE))
 	      {
-		write_rc = write (fildes, cur_write_start, write_count);
+		if (write (fildes, cur_write_start, write_count) != write_count)
+                  return -1;
 		seek_count = DISKBLOCKSIZE;
 		state = in_zeros;
 	      }
@@ -1197,7 +1199,8 @@ sparse_write (int fildes, char *buf, uns
 	break;
 	
       case not_in_zeros :
-	write_rc = write (fildes, cur_write_start, write_count);
+	if (write (fildes, cur_write_start, write_count) != write_count)
+          return -1;
 	delayed_seek_count = 0;
 	break;
     }
@@ -1206,10 +1209,12 @@ sparse_write (int fildes, char *buf, uns
     {
       if (delayed_seek_count != 0)
 	{
-	  lseek_rc = lseek (fildes, delayed_seek_count, SEEK_CUR);
+	  if (lseek (fildes, delayed_seek_count, SEEK_CUR) == (off_t)-1)
+            return -1;
 	  delayed_seek_count = 0;
 	}
-      write_rc = write (fildes, buf, leftover_bytes_count);
+      if (write (fildes, buf, leftover_bytes_count) != leftover_bytes_count)
+        return -1;
     }
   return nbyte;
 }

Reply via email to