diff mbox series

[v4,2/4] initramfs: print helpful cpio error on "crc" magic

Message ID 20211110123850.24956-3-ddiss@suse.de (mailing list archive)
State New, archived
Headers show
Series initramfs: "crc" cpio format and INITRAMFS_PRESERVE_MTIME | expand

Commit Message

David Disseldorp Nov. 10, 2021, 12:38 p.m. UTC
Contrary to the buffer-format.rst documentation, initramfs cpio
extraction does not support "crc" archives, which carry "070702"
header magic. Make it a little clearer that "newc" (magic="070701") is
the only supported cpio format, by extending the POSIX.1 ASCII
(magic="070707") specific error message to also cover "crc" magic.

Signed-off-by: David Disseldorp <ddiss@suse.de>
---
 init/initramfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Matthew Wilcox Nov. 10, 2021, 5:30 p.m. UTC | #1
On Wed, Nov 10, 2021 at 01:38:48PM +0100, David Disseldorp wrote:
> Contrary to the buffer-format.rst documentation, initramfs cpio
> extraction does not support "crc" archives, which carry "070702"
> header magic. Make it a little clearer that "newc" (magic="070701") is
> the only supported cpio format, by extending the POSIX.1 ASCII
> (magic="070707") specific error message to also cover "crc" magic.

Wouldn't it be easier to just add support?  As far as I can tell from
looking at documentation, the "crc" format is the same as newc, except
that it uses some reserved bits to store the crc.  Since we ignore those
bits, we could just check for either 070701 or 070702.

> Signed-off-by: David Disseldorp <ddiss@suse.de>
> ---
>  init/initramfs.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/init/initramfs.c b/init/initramfs.c
> index 2f79b3ec0b40..44e692ae4646 100644
> --- a/init/initramfs.c
> +++ b/init/initramfs.c
> @@ -258,7 +258,7 @@ static int __init do_collect(void)
>  static int __init do_header(void)
>  {
>  	if (memcmp(collected, "070701", 6)) {
> -		if (memcmp(collected, "070707", 6) == 0)
> +		if (memcmp(collected, "0707", 4) == 0)
>  			error("incorrect cpio method used: use -H newc option");
>  		else
>  			error("no cpio magic");
> -- 
> 2.31.1
>
David Disseldorp Nov. 10, 2021, 8:54 p.m. UTC | #2
On Wed, 10 Nov 2021 17:30:54 +0000, Matthew Wilcox wrote:

> On Wed, Nov 10, 2021 at 01:38:48PM +0100, David Disseldorp wrote:
> > Contrary to the buffer-format.rst documentation, initramfs cpio
> > extraction does not support "crc" archives, which carry "070702"
> > header magic. Make it a little clearer that "newc" (magic="070701") is
> > the only supported cpio format, by extending the POSIX.1 ASCII
> > (magic="070707") specific error message to also cover "crc" magic.  
> 
> Wouldn't it be easier to just add support?

Well, no, this patch already exists. :-)

> As far as I can tell from
> looking at documentation, the "crc" format is the same as newc, except
> that it uses some reserved bits to store the crc.  Since we ignore those
> bits, we could just check for either 070701 or 070702.

Sure, it'd be pretty straightforward to implement "crc" format support,
but I'm not sure how useful a 32-bit checksum would be... If we're going
down this route, wouldn't proper IMA/EVM support make sense via some new
cpio variant with space for the attributes (or as header/trailer like
bootconfig)?
cc'ing Jeff, as I seem to recall him mentioning some work in this area.

Cheers, David
diff mbox series

Patch

diff --git a/init/initramfs.c b/init/initramfs.c
index 2f79b3ec0b40..44e692ae4646 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -258,7 +258,7 @@  static int __init do_collect(void)
 static int __init do_header(void)
 {
 	if (memcmp(collected, "070701", 6)) {
-		if (memcmp(collected, "070707", 6) == 0)
+		if (memcmp(collected, "0707", 4) == 0)
 			error("incorrect cpio method used: use -H newc option");
 		else
 			error("no cpio magic");