1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-07-01 14:11:15 +02:00

programmer: Use correct type for flashbase

The flashbase is a machine-sized integer representation of
address space and so use the appropriate type that is correctly
sized to encode such data.

The flashbase is assigned to 'base' in 'map_flash()' and the
type correctly changed to uintptr_t in commit 4e32ec19b1
therefore makes for a consistent type usage whenever stored.

While `sizeof(unsigned long)` and `sizeof(uintptr_t)` are both `8` under
most circumstances on a 64bit platform and thus have enough bits to
represent all addresses on the platform, the C standard does not
guarantee this. Only `uintptr_t` and `void *` has a guaranteed
isomorphism as `uintptr_t` is defined by the platforms toolchain support
whereas the conversion from `void *` to an integer is implementation
defined and that the memory address value may contain additional bits
describing the validation data or provenance of the address. Therefore a
integer is insufficient to contain all the necessary information for
that specific platform so this may not always work out for all platforms
and toolchain combinations.

Spotted-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
Change-Id: Ib9057e438731b9cccde0e24d5c8f758c3af1d47f
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/75328
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
This commit is contained in:
Edward O'Callaghan
2023-05-19 17:32:40 +10:00
committed by Anastasia Klimchuk
parent 2e81c05ad3
commit f15e6a105b
2 changed files with 3 additions and 2 deletions

View File

@ -21,6 +21,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <stdint.h>
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
@ -48,7 +49,7 @@ static const struct programmer_entry *programmer = NULL;
struct decode_sizes max_rom_decode; struct decode_sizes max_rom_decode;
/* If nonzero, used as the start address of bottom-aligned flash. */ /* If nonzero, used as the start address of bottom-aligned flash. */
unsigned long flashbase; uintptr_t flashbase;
/* Is writing allowed with this programmer? */ /* Is writing allowed with this programmer? */
bool programmer_may_write; bool programmer_may_write;

View File

@ -292,7 +292,7 @@ struct decode_sizes {
// FIXME: These need to be local, not global // FIXME: These need to be local, not global
extern struct decode_sizes max_rom_decode; extern struct decode_sizes max_rom_decode;
extern bool programmer_may_write; extern bool programmer_may_write;
extern unsigned long flashbase; extern uintptr_t flashbase; /* used in programmer_enable.c */
char *extract_programmer_param_str(const struct programmer_cfg *cfg, const char *param_name); char *extract_programmer_param_str(const struct programmer_cfg *cfg, const char *param_name);
/* spi.c */ /* spi.c */