<p>Patrick Rudolph has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/23868">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">util/cbfstool: Add bzImage header detection<br><br>Only handle payload as bzImage if it looks like one.<br><br>Change-Id: I9fc96caedb872b14f3238e4a7a96f0d32d17f7ee<br>Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com><br>---<br>M util/cbfstool/cbfs-payload-linux.c<br>M util/cbfstool/cbfstool.c<br>M util/cbfstool/common.h<br>3 files changed, 46 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/68/23868/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/util/cbfstool/cbfs-payload-linux.c b/util/cbfstool/cbfs-payload-linux.c</span><br><span>index 9646384..17e18ca 100644</span><br><span>--- a/util/cbfstool/cbfs-payload-linux.c</span><br><span>+++ b/util/cbfstool/cbfs-payload-linux.c</span><br><span>@@ -50,6 +50,49 @@</span><br><span>       struct cbfs_payload_segment *out_seg;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/** bzImage boot flag value */</span><br><span style="color: hsl(120, 100%, 40%);">+#define BZI_BOOT_FLAG 0xaa55</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/** bzImage magic signature value */</span><br><span style="color: hsl(120, 100%, 40%);">+#define BZI_SIGNATURE 0x53726448</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct bzimage_header {</span><br><span style="color: hsl(120, 100%, 40%);">+    /** The size of the setup in sectors</span><br><span style="color: hsl(120, 100%, 40%);">+   *</span><br><span style="color: hsl(120, 100%, 40%);">+     * If this field contains 0, assume it contains 4.</span><br><span style="color: hsl(120, 100%, 40%);">+     */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t setup_sects;</span><br><span style="color: hsl(120, 100%, 40%);">+  /** If set, the root is mounted readonly */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t root_flags;</span><br><span style="color: hsl(120, 100%, 40%);">+  /** DO NOT USE - for bootsect.S use only */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t syssize;</span><br><span style="color: hsl(120, 100%, 40%);">+     /** DO NOT USE - obsolete */</span><br><span style="color: hsl(120, 100%, 40%);">+  uint16_t swap_dev;</span><br><span style="color: hsl(120, 100%, 40%);">+    /** DO NOT USE - for bootsect.S use only */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t ram_size;</span><br><span style="color: hsl(120, 100%, 40%);">+    /** Video mode control */</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t vid_mode;</span><br><span style="color: hsl(120, 100%, 40%);">+    /** Default root device number */</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t root_dev;</span><br><span style="color: hsl(120, 100%, 40%);">+    /** 0xAA55 magic number */</span><br><span style="color: hsl(120, 100%, 40%);">+    uint16_t boot_flag;</span><br><span style="color: hsl(120, 100%, 40%);">+   /** Jump instruction */</span><br><span style="color: hsl(120, 100%, 40%);">+       uint16_t jump;</span><br><span style="color: hsl(120, 100%, 40%);">+        /** Magic signature "HdrS" */</span><br><span style="color: hsl(120, 100%, 40%);">+       uint32_t header;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Return true if buffer looks like a bzImage */</span><br><span style="color: hsl(120, 100%, 40%);">+int probe_for_bzImage_header(const struct buffer *input)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ const struct bzimage_header *header =</span><br><span style="color: hsl(120, 100%, 40%);">+     (const struct bzimage_header *)input->data;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (input->size < sizeof(*header))</span><br><span style="color: hsl(120, 100%, 40%);">+              return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     return (header->boot_flag == BZI_BOOT_FLAG) &&</span><br><span style="color: hsl(120, 100%, 40%);">+            (header->header == BZI_SIGNATURE);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int bzp_init(struct bzpayload *bzp, enum comp_algo algo)</span><br><span> {</span><br><span>    memset(bzp, 0, sizeof(*bzp));</span><br><span>diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c</span><br><span>index 1f71906..91b0290 100644</span><br><span>--- a/util/cbfstool/cbfstool.c</span><br><span>+++ b/util/cbfstool/cbfstool.c</span><br><span>@@ -636,7 +636,7 @@</span><br><span>             ret = parse_fv_to_payload(buffer, &output, param.compression);</span><br><span> </span><br><span>       /* If it's neither ELF nor UEFI Fv, try bzImage */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ret != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ret != 0 && probe_for_bzImage_header(buffer))</span><br><span>            ret = parse_bzImage_to_payload(buffer, &output,</span><br><span>                          param.initrd, param.cmdline, param.compression);</span><br><span> </span><br><span>diff --git a/util/cbfstool/common.h b/util/cbfstool/common.h</span><br><span>index 85dfdeb..6e366a1 100644</span><br><span>--- a/util/cbfstool/common.h</span><br><span>+++ b/util/cbfstool/common.h</span><br><span>@@ -188,6 +188,8 @@</span><br><span>                       enum comp_algo algo);</span><br><span> int parse_fv_to_payload(const struct buffer *input, struct buffer *output,</span><br><span>                         enum comp_algo algo);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int probe_for_bzImage_header(const struct buffer *input);</span><br><span> int parse_bzImage_to_payload(const struct buffer *input,</span><br><span>                            struct buffer *output, const char *initrd,</span><br><span>                           char *cmdline, enum comp_algo algo);</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/23868">change 23868</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/23868"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I9fc96caedb872b14f3238e4a7a96f0d32d17f7ee </div>
<div style="display:none"> Gerrit-Change-Number: 23868 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com> </div>