Date: Sat, 11 Jan 2020 17:28:22 -0800 From: Mark Millard <marklmi@yahoo.com> To: Justin Hibbits <chmeeedalf@gmail.com>, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org> Subject: head -r356640 and mixed signed/unsigned comparisons Message-ID: <18622739-BB2E-432B-B877-2FBE3A9D4ECB@yahoo.com> References: <18622739-BB2E-432B-B877-2FBE3A9D4ECB.ref@yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
The code: 394 for (j =3D 0; j < addr_cells - 1; j++) { looks wrong to me. Evidence follows. /usr/src/sys/dev/ofw/openfirm.h:typedef uint32_t pcell_t; /usr/include/sys/_stdint.h:typedef __uint32_t = uint32_t; /usr/include/machine/_types.h:typedef unsigned int = __uint32_t; So pcell_t and int are of the same rank but different unsigned vs. signed status. =46rom sys/powerpc/mpc85xx/lbc.c : 363 static int 364 fdt_lbc_reg_decode(phandle_t node, struct lbc_softc *sc, 365 struct lbc_devinfo *di) 366 { . . . 369 pcell_t addr_cells, size_cells; . . . 371 int i, j, rv, bank; . . . 394 for (j =3D 0; j < addr_cells - 1; j++) { 395 start <<=3D 32; 396 start |=3D reg[j]; 397 } So, for line 394, after the usual arithmetic conversions for the "-" and then for the "<" the line would look like (consolidating some relevant material to be more textually-local for ease of comparison): for (int j =3D 0; (unsigned int)j < addr_cells-1u; j++) For addr_cells=3D=3D0u: addr_cells-1u =3D=3D UINT_MAX . So, for addr_cells=3D=3D0u substituted (at run-time): for (int j =3D 0; (unsigned int)j < UINT_MAX; j++) So, unless it is guaranteed that 0u<addr_cells, there would appear to be a looping problem here. It appears to me that the condition: addr_cells=3D=3D0u && 0u<size_cells would fail the tuples <=3D 0 test and so continue on to try to use line 394. But I do not have context to know the condition would be a worrisome issue. =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?18622739-BB2E-432B-B877-2FBE3A9D4ECB>