mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 03:15:00 +00:00
libfdt: Fix signedness comparison warnings
This is a combination of upstream libfdt commits to fix warnings about comparing signed and unsigned integers: ========== scripts/dtc/libfdt/fdt.c: In function ‘fdt_offset_ptr’: scripts/dtc/libfdt/fdt.c:137:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if ((absoffset < offset) ... ========== For a detailed description of the fixes, see the dtc repo: https://git.kernel.org/pub/scm/utils/dtc/dtc.git/log/?id=73e0f143b73d808 For this patch the commits between 73e0f143b73d8088 and ca19c3db2bf62000 have been combined and adjusted for the slight differences in U-Boot's libfdt code base. Signed-off-by: Andre Przywara <andre.przywara@arm.com>
This commit is contained in:
parent
f36603c7a8
commit
832bfad745
6 changed files with 42 additions and 29 deletions
|
@ -131,16 +131,20 @@ int fdt_check_header(const void *fdt)
|
||||||
|
|
||||||
const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len)
|
const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len)
|
||||||
{
|
{
|
||||||
unsigned absoffset = offset + fdt_off_dt_struct(fdt);
|
unsigned int uoffset = offset;
|
||||||
|
unsigned int absoffset = offset + fdt_off_dt_struct(fdt);
|
||||||
|
|
||||||
|
if (offset < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (fdt_chk_basic())
|
if (fdt_chk_basic())
|
||||||
if ((absoffset < offset)
|
if ((absoffset < uoffset)
|
||||||
|| ((absoffset + len) < absoffset)
|
|| ((absoffset + len) < absoffset)
|
||||||
|| (absoffset + len) > fdt_totalsize(fdt))
|
|| (absoffset + len) > fdt_totalsize(fdt))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!fdt_chk_version() || fdt_version(fdt) >= 0x11)
|
if (!fdt_chk_version() || fdt_version(fdt) >= 0x11)
|
||||||
if (((offset + len) < offset)
|
if (((uoffset + len) < uoffset)
|
||||||
|| ((offset + len) > fdt_size_dt_struct(fdt)))
|
|| ((offset + len) > fdt_size_dt_struct(fdt)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -302,9 +306,12 @@ const char *fdt_find_string_(const char *strtab, int tabsize, const char *s)
|
||||||
|
|
||||||
int fdt_move(const void *fdt, void *buf, int bufsize)
|
int fdt_move(const void *fdt, void *buf, int bufsize)
|
||||||
{
|
{
|
||||||
|
if (fdt_chk_basic() && bufsize < 0)
|
||||||
|
return -FDT_ERR_NOSPACE;
|
||||||
|
|
||||||
FDT_RO_PROBE(fdt);
|
FDT_RO_PROBE(fdt);
|
||||||
|
|
||||||
if (fdt_totalsize(fdt) > bufsize)
|
if (fdt_totalsize(fdt) > (unsigned int)bufsize)
|
||||||
return -FDT_ERR_NOSPACE;
|
return -FDT_ERR_NOSPACE;
|
||||||
|
|
||||||
memmove(buf, fdt, fdt_totalsize(fdt));
|
memmove(buf, fdt, fdt_totalsize(fdt));
|
||||||
|
|
|
@ -241,6 +241,7 @@ static int overlay_update_local_node_references(void *fdto,
|
||||||
|
|
||||||
if (fixup_len % sizeof(uint32_t))
|
if (fixup_len % sizeof(uint32_t))
|
||||||
return -FDT_ERR_BADOVERLAY;
|
return -FDT_ERR_BADOVERLAY;
|
||||||
|
fixup_len /= sizeof(uint32_t);
|
||||||
|
|
||||||
tree_val = fdt_getprop(fdto, tree_node, name, &tree_len);
|
tree_val = fdt_getprop(fdto, tree_node, name, &tree_len);
|
||||||
if (!tree_val) {
|
if (!tree_val) {
|
||||||
|
@ -250,7 +251,7 @@ static int overlay_update_local_node_references(void *fdto,
|
||||||
return tree_len;
|
return tree_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < (fixup_len / sizeof(uint32_t)); i++) {
|
for (i = 0; i < fixup_len; i++) {
|
||||||
fdt32_t adj_val;
|
fdt32_t adj_val;
|
||||||
uint32_t poffset;
|
uint32_t poffset;
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)
|
||||||
|
|
||||||
err = -FDT_ERR_BADOFFSET;
|
err = -FDT_ERR_BADOFFSET;
|
||||||
absoffset = stroffset + fdt_off_dt_strings(fdt);
|
absoffset = stroffset + fdt_off_dt_strings(fdt);
|
||||||
if (absoffset >= totalsize)
|
if (absoffset >= (unsigned)totalsize)
|
||||||
goto fail;
|
goto fail;
|
||||||
len = totalsize - absoffset;
|
len = totalsize - absoffset;
|
||||||
|
|
||||||
|
@ -61,17 +61,19 @@ const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)
|
||||||
if (stroffset < 0)
|
if (stroffset < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (!fdt_chk_version() || fdt_version(fdt) >= 17) {
|
if (!fdt_chk_version() || fdt_version(fdt) >= 17) {
|
||||||
if (stroffset >= fdt_size_dt_strings(fdt))
|
if ((unsigned)stroffset >= fdt_size_dt_strings(fdt))
|
||||||
goto fail;
|
goto fail;
|
||||||
if ((fdt_size_dt_strings(fdt) - stroffset) < len)
|
if ((fdt_size_dt_strings(fdt) - stroffset) < len)
|
||||||
len = fdt_size_dt_strings(fdt) - stroffset;
|
len = fdt_size_dt_strings(fdt) - stroffset;
|
||||||
}
|
}
|
||||||
} else if (fdt_magic(fdt) == FDT_SW_MAGIC) {
|
} else if (fdt_magic(fdt) == FDT_SW_MAGIC) {
|
||||||
if ((stroffset >= 0)
|
unsigned int sw_stroffset = -stroffset;
|
||||||
|| (stroffset < -fdt_size_dt_strings(fdt)))
|
|
||||||
|
if ((stroffset >= 0) ||
|
||||||
|
(sw_stroffset > fdt_size_dt_strings(fdt)))
|
||||||
goto fail;
|
goto fail;
|
||||||
if ((-stroffset) < len)
|
if ((sw_stroffset) < len)
|
||||||
len = -stroffset;
|
len = sw_stroffset;
|
||||||
} else {
|
} else {
|
||||||
err = -FDT_ERR_INTERNAL;
|
err = -FDT_ERR_INTERNAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -157,8 +159,8 @@ int fdt_generate_phandle(const void *fdt, uint32_t *phandle)
|
||||||
|
|
||||||
static const struct fdt_reserve_entry *fdt_mem_rsv(const void *fdt, int n)
|
static const struct fdt_reserve_entry *fdt_mem_rsv(const void *fdt, int n)
|
||||||
{
|
{
|
||||||
int offset = n * sizeof(struct fdt_reserve_entry);
|
unsigned int offset = n * sizeof(struct fdt_reserve_entry);
|
||||||
int absoffset = fdt_off_mem_rsvmap(fdt) + offset;
|
unsigned int absoffset = fdt_off_mem_rsvmap(fdt) + offset;
|
||||||
|
|
||||||
if (fdt_chk_extra()) {
|
if (fdt_chk_extra()) {
|
||||||
if (absoffset < fdt_off_mem_rsvmap(fdt))
|
if (absoffset < fdt_off_mem_rsvmap(fdt))
|
||||||
|
@ -679,7 +681,7 @@ int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
|
|
||||||
if ((phandle == 0) || (phandle == -1))
|
if ((phandle == 0) || (phandle == ~0U))
|
||||||
return -FDT_ERR_BADPHANDLE;
|
return -FDT_ERR_BADPHANDLE;
|
||||||
|
|
||||||
FDT_RO_PROBE(fdt);
|
FDT_RO_PROBE(fdt);
|
||||||
|
|
|
@ -40,7 +40,7 @@ static struct fdt_errtabent fdt_errtable[] = {
|
||||||
FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
|
FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
|
||||||
FDT_ERRTABENT(FDT_ERR_BADFLAGS),
|
FDT_ERRTABENT(FDT_ERR_BADFLAGS),
|
||||||
};
|
};
|
||||||
#define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
|
#define FDT_ERRTABSIZE ((int)(sizeof(fdt_errtable) / sizeof(fdt_errtable[0])))
|
||||||
|
|
||||||
const char *fdt_strerror(int errval)
|
const char *fdt_strerror(int errval)
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ const char *fdt_strerror(int errval)
|
||||||
return "<valid offset/length>";
|
return "<valid offset/length>";
|
||||||
else if (errval == 0)
|
else if (errval == 0)
|
||||||
return "<no error>";
|
return "<no error>";
|
||||||
else if (errval > -FDT_ERRTABSIZE) {
|
else if (-errval < FDT_ERRTABSIZE) {
|
||||||
const char *s = fdt_errtable[-errval].str;
|
const char *s = fdt_errtable[-errval].str;
|
||||||
|
|
||||||
if (s)
|
if (s)
|
||||||
|
|
|
@ -96,8 +96,8 @@ static inline uint32_t sw_flags(void *fdt)
|
||||||
|
|
||||||
static void *fdt_grab_space_(void *fdt, size_t len)
|
static void *fdt_grab_space_(void *fdt, size_t len)
|
||||||
{
|
{
|
||||||
int offset = fdt_size_dt_struct(fdt);
|
unsigned int offset = fdt_size_dt_struct(fdt);
|
||||||
int spaceleft;
|
unsigned int spaceleft;
|
||||||
|
|
||||||
spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt)
|
spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt)
|
||||||
- fdt_size_dt_strings(fdt);
|
- fdt_size_dt_strings(fdt);
|
||||||
|
@ -111,8 +111,8 @@ static void *fdt_grab_space_(void *fdt, size_t len)
|
||||||
|
|
||||||
int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags)
|
int fdt_create_with_flags(void *buf, int bufsize, uint32_t flags)
|
||||||
{
|
{
|
||||||
const size_t hdrsize = FDT_ALIGN(sizeof(struct fdt_header),
|
const int hdrsize = FDT_ALIGN(sizeof(struct fdt_header),
|
||||||
sizeof(struct fdt_reserve_entry));
|
sizeof(struct fdt_reserve_entry));
|
||||||
void *fdt = buf;
|
void *fdt = buf;
|
||||||
|
|
||||||
if (bufsize < hdrsize)
|
if (bufsize < hdrsize)
|
||||||
|
@ -155,13 +155,16 @@ int fdt_resize(void *fdt, void *buf, int bufsize)
|
||||||
|
|
||||||
FDT_SW_PROBE(fdt);
|
FDT_SW_PROBE(fdt);
|
||||||
|
|
||||||
|
if (bufsize < 0)
|
||||||
|
return -FDT_ERR_NOSPACE;
|
||||||
|
|
||||||
headsize = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
|
headsize = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
|
||||||
tailsize = fdt_size_dt_strings(fdt);
|
tailsize = fdt_size_dt_strings(fdt);
|
||||||
|
|
||||||
if (fdt_chk_extra() && (headsize + tailsize) > fdt_totalsize(fdt))
|
if (fdt_chk_extra() && (headsize + tailsize) > fdt_totalsize(fdt))
|
||||||
return -FDT_ERR_INTERNAL;
|
return -FDT_ERR_INTERNAL;
|
||||||
|
|
||||||
if ((headsize + tailsize) > bufsize)
|
if ((headsize + tailsize) > (unsigned)bufsize)
|
||||||
return -FDT_ERR_NOSPACE;
|
return -FDT_ERR_NOSPACE;
|
||||||
|
|
||||||
oldtail = (char *)fdt + fdt_totalsize(fdt) - tailsize;
|
oldtail = (char *)fdt + fdt_totalsize(fdt) - tailsize;
|
||||||
|
@ -249,18 +252,18 @@ int fdt_end_node(void *fdt)
|
||||||
static int fdt_add_string_(void *fdt, const char *s)
|
static int fdt_add_string_(void *fdt, const char *s)
|
||||||
{
|
{
|
||||||
char *strtab = (char *)fdt + fdt_totalsize(fdt);
|
char *strtab = (char *)fdt + fdt_totalsize(fdt);
|
||||||
int strtabsize = fdt_size_dt_strings(fdt);
|
unsigned int strtabsize = fdt_size_dt_strings(fdt);
|
||||||
int len = strlen(s) + 1;
|
unsigned int len = strlen(s) + 1;
|
||||||
int struct_top, offset;
|
unsigned int struct_top, offset;
|
||||||
|
|
||||||
offset = -strtabsize - len;
|
offset = strtabsize + len;
|
||||||
struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
|
struct_top = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
|
||||||
if (fdt_totalsize(fdt) + offset < struct_top)
|
if (fdt_totalsize(fdt) - offset < struct_top)
|
||||||
return 0; /* no more room :( */
|
return 0; /* no more room :( */
|
||||||
|
|
||||||
memcpy(strtab + offset, s, len);
|
memcpy(strtab - offset, s, len);
|
||||||
fdt_set_size_dt_strings(fdt, strtabsize + len);
|
fdt_set_size_dt_strings(fdt, strtabsize + len);
|
||||||
return offset;
|
return -offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Must only be used to roll back in case of error */
|
/* Must only be used to roll back in case of error */
|
||||||
|
|
|
@ -23,7 +23,7 @@ int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
|
||||||
if (!propval)
|
if (!propval)
|
||||||
return proplen;
|
return proplen;
|
||||||
|
|
||||||
if (proplen < (len + idx))
|
if ((unsigned)proplen < (len + idx))
|
||||||
return -FDT_ERR_NOSPACE;
|
return -FDT_ERR_NOSPACE;
|
||||||
|
|
||||||
memcpy((char *)propval + idx, val, len);
|
memcpy((char *)propval + idx, val, len);
|
||||||
|
|
Loading…
Add table
Reference in a new issue