<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>