<p>Richard Spiegel has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/29440">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">util/cbfstool/cbfs_image.c: Get rid of void pointer math<br><br>Pointer math with void pointers is illegal in many compilers, though it<br>works with GCC because it assumes size of void to be 1. Change the pointers<br>or add parenthesis to force a proper order that will not cause compile<br>errors if compiled with a different compiler, and more importantly, don't<br>have unsuspected side effects.<br><br>BUG=b:118484178<br>TEST=Build CBFS with original code, run objdump and saved output. Added<br>modifications, build cbfs again, run objdump again, compared objdump outputs.<br><br>Change-Id: I30187de8ea24adba41083f3bfbd24c0e363ee4b8<br>Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com><br>---<br>M util/cbfstool/cbfs_image.c<br>1 file changed, 12 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/40/29440/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c</span><br><span>index 74572a9..2160742 100644</span><br><span>--- a/util/cbfstool/cbfs_image.c</span><br><span>+++ b/util/cbfstool/cbfs_image.c</span><br><span>@@ -430,8 +430,9 @@</span><br><span>          * which may be used by the master header pointer. This messes with</span><br><span>   * the ability to stash something "top-aligned" into the region, but</span><br><span>        * keeps things simpler. */</span><br><span style="color: hsl(0, 100%, 40%);">-     last_entry_size = copy_end - ((void *)dst_entry - buffer_get(dst))</span><br><span style="color: hsl(0, 100%, 40%);">-              - cbfs_calculate_file_header_size("") - sizeof(int32_t);</span><br><span style="color: hsl(120, 100%, 40%);">+    last_entry_size = copy_end -</span><br><span style="color: hsl(120, 100%, 40%);">+          ((uint8_t *)dst_entry - (uint8_t *)buffer_get(dst)) -</span><br><span style="color: hsl(120, 100%, 40%);">+         cbfs_calculate_file_header_size("") - sizeof(int32_t);</span><br><span> </span><br><span>         if (last_entry_size < 0)</span><br><span>          WARN("No room to create the last entry!\n")</span><br><span>@@ -467,8 +468,9 @@</span><br><span>   * file header. That's either outside the image or exactly the place</span><br><span>      * where we need to create a new file.</span><br><span>        */</span><br><span style="color: hsl(0, 100%, 40%);">-     int last_entry_size = region_sz - ((void *)entry - buffer_get(region))</span><br><span style="color: hsl(0, 100%, 40%);">-          - cbfs_calculate_file_header_size("") - sizeof(int32_t);</span><br><span style="color: hsl(120, 100%, 40%);">+    int last_entry_size = region_sz -</span><br><span style="color: hsl(120, 100%, 40%);">+             ((uint8_t *)entry - (uint8_t *)buffer_get(region)) -</span><br><span style="color: hsl(120, 100%, 40%);">+          cbfs_calculate_file_header_size("") - sizeof(int32_t);</span><br><span> </span><br><span>         if (last_entry_size > 0) {</span><br><span>                cbfs_create_empty_entry(entry, CBFS_COMPONENT_NULL,</span><br><span>@@ -509,10 +511,11 @@</span><br><span>      (trailer->type != htonl(CBFS_COMPONENT_DELETED))) {</span><br><span>           /* nothing to truncate. Return de-facto CBFS size in case it</span><br><span>                  * was already truncated. */</span><br><span style="color: hsl(0, 100%, 40%);">-            *size = (void *)entry - buffer_get(region);</span><br><span style="color: hsl(120, 100%, 40%);">+           *size = (uint32_t)((uint8_t *)entry -</span><br><span style="color: hsl(120, 100%, 40%);">+                            (uint8_t *)buffer_get(region));</span><br><span>           return 0;</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       *size = (void *)trailer - buffer_get(region);</span><br><span style="color: hsl(120, 100%, 40%);">+ *size = (uint32_t)((uint8_t *)trailer - (uint8_t *)buffer_get(region));</span><br><span>      memset(trailer, 0xff, buffer_size(region) - *size);</span><br><span> </span><br><span>      return 0;</span><br><span>@@ -723,8 +726,9 @@</span><br><span> </span><br><span>  len = addr_next - addr - min_entry_size;</span><br><span>     /* keep space for master header pointer */</span><br><span style="color: hsl(0, 100%, 40%);">-      if ((void *)entry + min_entry_size + len > buffer_get(&image->buffer) +</span><br><span style="color: hsl(0, 100%, 40%);">-               buffer_size(&image->buffer) - sizeof(int32_t)) {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (((uint8_t *)entry + min_entry_size + len) ></span><br><span style="color: hsl(120, 100%, 40%);">+                    ((uint8_t *)buffer_get(&image->buffer) +</span><br><span style="color: hsl(120, 100%, 40%);">+                        buffer_size(&image->buffer) - sizeof(int32_t))) {</span><br><span>            len -= sizeof(int32_t);</span><br><span>      }</span><br><span>    cbfs_create_empty_entry(entry, CBFS_COMPONENT_NULL, len, "");</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/29440">change 29440</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/29440"/><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: I30187de8ea24adba41083f3bfbd24c0e363ee4b8 </div>
<div style="display:none"> Gerrit-Change-Number: 29440 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Spiegel <richard.spiegel@silverbackltd.com> </div>