Documentation index

Value initialization

In languages which don’t initialize values, this needs to be explicitly done in order to avoid capturing what random bytes are in memory when run.

An example taken from coreboot:

diffoscope output of the two different builds of the same coreboot
image

The code used to write a data structure directly without initializing all its fields. The fix was pretty simple once identified:

--- a/util/bimgtool/bimgtool.c
+++ b/util/bimgtool/bimgtool.c
@@ -160,7 +160,7 @@ static const struct crc_t crc_type = {
 static int write_binary(FILE *out, FILE *in, struct bimg_header *hdr)
 {
        static uint8_t file_buf[MAX_RECORD_BYTES];
-       struct bimg_data_header data_hdr;
+       struct bimg_data_header data_hdr = { 0 };
        size_t n_written;
 
        data_hdr.dest_addr = hdr->entry_addr;

Usage of instrumentation tools able to detect such cases like Valgrind should help identifying such problems.


Documentation index

Follow us on Twitter @ReproBuilds, Mastodon @reproducible_builds@fosstodon.org & Reddit and please consider making a donation. • Content licensed under CC BY-SA 4.0, style licensed under MIT. Templates and styles based on the Tor Styleguide. Logos and trademarks belong to their respective owners. • Patches for this website welcome via our Git repository (instructions) or via our mailing list. • Full contact info