Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 297252

Summary: cpio archives with option -H newc are bad and breaks genkernel
Product: Gentoo Linux Reporter: John Klug <ski.brimson>
Component: [OLD] baselayoutAssignee: Gentoo Linux bug wranglers <bug-wranglers>
Status: RESOLVED INVALID    
Severity: major    
Priority: High    
Version: unspecified   
Hardware: AMD64   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Attachments: bad cpio file with option -H newc

Description John Klug 2009-12-17 05:32:18 UTC
genkernel uses -H newc, which is broken in cpio.

I have cpio app-arch/cpio-2.9-r2,
sys-libs/glibc-2.9_p20081201-r2, and 
sys-kernel/genkernel-3.4.10.904 (0)


What is happening is that some files in the archive seem to be zero bytes in length, and the boot fails loading the initramfs stuff.

Here is an example:
(chroot) livecd initramfs-busybox-temp # cpio -ivt </tmp/busy.cpio
drwxr-xr-x   4 root     root            0 Dec 16 22:43 .
drwxr-xr-x   2 root     root            0 Dec 16 22:43 bin
drwxr-xr-x   3 root     root            0 Dec 16 22:43 usr
drwxr-xr-x   3 root     root            0 Dec 16 22:43 usr/share
drwxr-xr-x   2 root     root            0 Dec 16 22:43 usr/share/udhcpc
-rwxr-xr-x   1 root     root          790 Dec 16 22:43 usr/share/udhcpc/default.script
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/cat
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/cut
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/echo
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/uname
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/mount
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/sh
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/ash
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/[
-rwxr-xr-x   9 root     root            0 Nov  5 08:38 bin/busybox
6 blocks
(chroot) livecd initramfs-busybox-temp # find . | cpio  -o -F /tmp/busy.cpio
20786 blocks
(chroot) livecd initramfs-busybox-temp # cpio -ivt </tmp/busy.cpio
drwxr-xr-x   4 root     root            0 Dec 16 22:43 .
drwxr-xr-x   2 root     root            0 Dec 16 22:43 bin
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/busybox
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/[
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/ash
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/sh
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/mount
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/uname
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/echo
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/cut
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/cat
drwxr-xr-x   3 root     root            0 Dec 16 22:43 usr
drwxr-xr-x   3 root     root            0 Dec 16 22:43 usr/share
drwxr-xr-x   2 root     root            0 Dec 16 22:43 usr/share/udhcpc
-rwxr-xr-x   1 root     root          790 Dec 16 22:43 usr/share/udhcpc/default.script
20786 blocks
(chroot) livecd initramfs-busybox-temp # 



Reproducible: Always

Steps to Reproduce:
1.Have a bunch of files hard linked together
2.Use cpio -Hnewc
3.

Actual Results:  
Files are empty

Expected Results:  
(chroot) livecd newctest # cpio -ivt <../busy.cpio
drwxr-xr-x   4 root     root            0 Dec 16 22:43 .
drwxr-xr-x   2 root     root            0 Dec 16 22:43 bin
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/busybox
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/[
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/ash
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/sh
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/mount
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/uname
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/echo
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/cut
-rwxr-xr-x   9 root     root      1182336 Nov  5 08:38 bin/cat
drwxr-xr-x   3 root     root            0 Dec 16 22:43 usr
drwxr-xr-x   3 root     root            0 Dec 16 22:43 usr/share
drwxr-xr-x   2 root     root            0 Dec 16 22:43 usr/share/udhcpc
-rwxr-xr-x   1 root     root          790 Dec 16 22:43 usr/share/udhcpc/default.script


I will upload a cpio archive created correctly without -Hnewc, and incorrectly with -Hnewc.
Comment 1 John Klug 2009-12-17 05:42:17 UTC
Created attachment 213263 [details]
bad cpio file with option -H newc

created via:
$ find . | cpio -Hnewc -oF busynewc.cpio

Has zero length files.
Comment 2 John Klug 2009-12-17 06:13:29 UTC
$ find . | cpio -oF busyvanilla.zip

Sorry about the file name, but this is actually a vanilla cpio archive with the default header type.  This can be used to test cpio -H newc for errors.

<http://www.snapdrive.net/files/472996/busyvanilla.zip>
Comment 3 John Klug 2009-12-17 07:18:09 UTC
After looking at this, I am not exactly sure what was wrong.  I re-emerged genkernel.  I did not re-emerge cpio.

The initramfs did indeed create a zero length busybox, with all linked together to zero length.

However, it is not happening anymore on my system, and the cpio archives I created list out as having zero length, but the files themselves are OK.