[PATCH v3] dm: core: fix no null pointer detection in ofnode_get_addr_size_index()
From: Chen Guanqiao Fixed a defect of a null pointer being discovered by Coverity Scan: CID 331544: Null pointer dereferences (REVERSE_INULL) Null-checking "size" suggests that it may be null, but it has already been dereferenced on all paths leading to the check. Signed-off-by: Chen Guanqiao --- v3: Add this changelog. v2: 1. Remove redundant return. 2. apply patch to u-boot/next. drivers/core/ofnode.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index eeeccfb446..dda6c76e83 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -329,7 +329,8 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, int index, { int na, ns; - *size = FDT_SIZE_T_NONE; + if (size) + *size = FDT_SIZE_T_NONE; if (ofnode_is_np(node)) { const __be32 *prop_val; @@ -340,6 +341,7 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, int index, ); if (!prop_val) return FDT_ADDR_T_NONE; + if (size) *size = size64; @@ -359,8 +361,6 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, int index, index, na, ns, size, translate); } - - return FDT_ADDR_T_NONE; } fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size) -- 2.27.0
[PATCH v2] dm: core: fix no null pointer detection in ofnode_get_addr_size_index()
From: Chen Guanqiao Fixed a defect of a null pointer being discovered by Coverity Scan: CID 331544: Null pointer dereferences (REVERSE_INULL) Null-checking "size" suggests that it may be null, but it has already been dereferenced on all paths leading to the check. Signed-off-by: Chen Guanqiao --- drivers/core/ofnode.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index eeeccfb446..dda6c76e83 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -329,7 +329,8 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, int index, { int na, ns; - *size = FDT_SIZE_T_NONE; + if (size) + *size = FDT_SIZE_T_NONE; if (ofnode_is_np(node)) { const __be32 *prop_val; @@ -340,6 +341,7 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, int index, ); if (!prop_val) return FDT_ADDR_T_NONE; + if (size) *size = size64; @@ -359,8 +361,6 @@ static fdt_addr_t __ofnode_get_addr_size_index(ofnode node, int index, index, na, ns, size, translate); } - - return FDT_ADDR_T_NONE; } fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size) -- 2.27.0
[PATCH] dm: core: fix no null pointer detection in ofnode_get_addr_size_index()
From: Chen Guanqiao Fixed a defect of a null pointer being discovered by Coverity Scan: CID 331544: Null pointer dereferences (REVERSE_INULL) Null-checking "size" suggests that it may be null, but it has already been dereferenced on all paths leading to the check. Signed-off-by: Chen Guanqiao --- drivers/core/ofnode.c | 13 +++-- include/dm/ofnode.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 6c771e364f..554af95114 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -299,11 +299,10 @@ ofnode ofnode_get_by_phandle(uint phandle) return node; } -fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size) +fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *psize) { int na, ns; - - *size = FDT_SIZE_T_NONE; + fdt_size_t size = FDT_SIZE_T_NONE; if (ofnode_is_np(node)) { const __be32 *prop_val; @@ -314,8 +313,7 @@ fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size) ); if (!prop_val) return FDT_ADDR_T_NONE; - if (size) - *size = size64; + size = size64; ns = of_n_size_cells(ofnode_to_np(node)); @@ -330,9 +328,12 @@ fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size) ns = ofnode_read_simple_size_cells(ofnode_get_parent(node)); return fdtdec_get_addr_size_fixed(gd->fdt_blob, ofnode_to_offset(node), "reg", - index, na, ns, size, true); + index, na, ns, psize, true); } + if (size) + *psize = size; + return FDT_ADDR_T_NONE; } diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 8a69fd87da..e38d39dcf3 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -487,7 +487,7 @@ int ofnode_read_size(ofnode node, const char *propname); * @return address, or FDT_ADDR_T_NONE if not present or invalid */ phys_addr_t ofnode_get_addr_size_index(ofnode node, int index, - fdt_size_t *size); + fdt_size_t *psize); /** * ofnode_get_addr_index() - get an address from a node -- 2.27.0
[PATCH v3 0/2] dm: core: Add size operations on device tree references
From: Chen Guanqiao Currently, there is only an interface for obtaining address from node, and if you want to get the size, you need to traverse the node. So I added the function to get the size, and added related test case. Changes for v3: - Add return error for ofnode_get_size Changes for v2: - Add a test to test/dm/ofnode.c Chen Guanqiao (2): dm: core: Add size operations on device tree references test: dm: add test item for ofnode_get_addr() and ofnode_get_size() drivers/core/ofnode.c | 11 +++ include/dm/ofnode.h | 10 ++ include/fdtdec.h | 5 +++-- test/dm/ofnode.c | 31 +++ 4 files changed, 55 insertions(+), 2 deletions(-) -- 2.27.0
[PATCH v3 2/2] test: dm: add test item for ofnode_get_addr() and ofnode_get_size()
From: Chen Guanqiao Add test item for getting address and size functions Test the following function: - ofnode_get_addr() - ofnode_get_size() Signed-off-by: Chen Guanqiao --- test/dm/ofnode.c | 31 +++ 1 file changed, 31 insertions(+) diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c index c539134296..e0b525eeb1 100644 --- a/test/dm/ofnode.c +++ b/test/dm/ofnode.c @@ -261,3 +261,34 @@ static int dm_test_ofnode_is_enabled(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_ofnode_is_enabled, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); + +static int dm_test_ofnode_get_reg(struct unit_test_state *uts) +{ + ofnode node; + fdt_addr_t addr; + fdt_size_t size; + + node = ofnode_path("/translation-test@8000"); + ut_assert(ofnode_valid(node)); + addr = ofnode_get_addr(node); + size = ofnode_get_size(node); + ut_asserteq(0x8000, addr); + ut_asserteq(0x4000, size); + + node = ofnode_path("/translation-test@8000/dev@1,100"); + ut_assert(ofnode_valid(node)); + addr = ofnode_get_addr(node); + size = ofnode_get_size(node); + ut_asserteq(0x9000, addr); + ut_asserteq(0x1000, size); + + node = ofnode_path("/emul-mux-controller"); + ut_assert(ofnode_valid(node)); + addr = ofnode_get_addr(node); + size = ofnode_get_size(node); + ut_asserteq(FDT_ADDR_T_NONE, addr); + ut_asserteq(FDT_SIZE_T_NONE, size); + + return 0; +} +DM_TEST(dm_test_ofnode_get_reg, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); -- 2.27.0
[PATCH v3 1/2] dm: core: Add size operations on device tree references
From: Chen Guanqiao Add functions to add size of addresses in the device tree using ofnode references. If the size is not set, return FDT_SIZE_T_NONE. Signed-off-by: Chen Guanqiao --- drivers/core/ofnode.c | 11 +++ include/dm/ofnode.h | 10 ++ include/fdtdec.h | 5 +++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index fa0bd2a9c4..d5058e 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -303,6 +303,8 @@ fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size) { int na, ns; + *size = FDT_SIZE_T_NONE; + if (ofnode_is_np(node)) { const __be32 *prop_val; u64 size64; @@ -347,6 +349,15 @@ fdt_addr_t ofnode_get_addr(ofnode node) return ofnode_get_addr_index(node, 0); } +fdt_size_t ofnode_get_size(ofnode node) +{ + fdt_size_t size; + + ofnode_get_addr_size_index(node, 0, ); + + return size; +} + int ofnode_stringlist_search(ofnode node, const char *property, const char *string) { diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 2c0597c407..8a69fd87da 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -510,6 +510,16 @@ phys_addr_t ofnode_get_addr_index(ofnode node, int index); */ phys_addr_t ofnode_get_addr(ofnode node); +/** + * ofnode_get_size() - get size from a node + * + * This reads the register size from a node + * + * @node: node to read from + * @return size of the address, or FDT_SIZE_T_NONE if not present or invalid + */ +fdt_size_t ofnode_get_size(ofnode node); + /** * ofnode_stringlist_search() - find a string in a string list and return index * diff --git a/include/fdtdec.h b/include/fdtdec.h index 62d1660973..e0a49b1e57 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -24,15 +24,16 @@ typedef phys_addr_t fdt_addr_t; typedef phys_size_t fdt_size_t; -#ifdef CONFIG_PHYS_64BIT #define FDT_ADDR_T_NONE (-1U) +#define FDT_SIZE_T_NONE (-1U) + +#ifdef CONFIG_PHYS_64BIT #define fdt_addr_to_cpu(reg) be64_to_cpu(reg) #define fdt_size_to_cpu(reg) be64_to_cpu(reg) #define cpu_to_fdt_addr(reg) cpu_to_be64(reg) #define cpu_to_fdt_size(reg) cpu_to_be64(reg) typedef fdt64_t fdt_val_t; #else -#define FDT_ADDR_T_NONE (-1U) #define fdt_addr_to_cpu(reg) be32_to_cpu(reg) #define fdt_size_to_cpu(reg) be32_to_cpu(reg) #define cpu_to_fdt_addr(reg) cpu_to_be32(reg) -- 2.27.0
[PATCH v2 1/2] dm: core: Add size operations on device tree references
Add functions to add size of addresses in the device tree using ofnode references. Signed-off-by: Chen Guanqiao --- drivers/core/ofnode.c | 9 + include/dm/ofnode.h | 10 ++ 2 files changed, 19 insertions(+) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index fa0bd2a9c4..952c3cf9dd 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -347,6 +347,15 @@ fdt_addr_t ofnode_get_addr(ofnode node) return ofnode_get_addr_index(node, 0); } +fdt_size_t ofnode_get_size(ofnode node) +{ + fdt_size_t size; + + ofnode_get_addr_size_index(node, 0, ); + + return size; +} + int ofnode_stringlist_search(ofnode node, const char *property, const char *string) { diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 2c0597c407..e91f81282b 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -510,6 +510,16 @@ phys_addr_t ofnode_get_addr_index(ofnode node, int index); */ phys_addr_t ofnode_get_addr(ofnode node); +/** + * ofnode_get_size() - get size from a node + * + * This reads the register size from a node + * + * @node: node to read from + * @return size of the address + */ +fdt_size_t ofnode_get_size(ofnode node); + /** * ofnode_stringlist_search() - find a string in a string list and return index * -- 2.25.1
[PATCH v2 2/2] test: dm: add test item for ofnode_get_addr() and ofnode_get_size()
Add test item for getting address and size functions Test the following function: - ofnode_get_addr() - ofnode_get_size() Signed-off-by: Chen Guanqiao --- test/dm/ofnode.c | 24 1 file changed, 24 insertions(+) diff --git a/test/dm/ofnode.c b/test/dm/ofnode.c index c539134296..0d958b4900 100644 --- a/test/dm/ofnode.c +++ b/test/dm/ofnode.c @@ -261,3 +261,27 @@ static int dm_test_ofnode_is_enabled(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_ofnode_is_enabled, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); + +static int dm_test_ofnode_get_reg(struct unit_test_state *uts) +{ + ofnode node; + fdt_addr_t addr; + fdt_size_t size; + + node = ofnode_path("/translation-test@8000"); + ut_assert(ofnode_valid(node)); + addr = ofnode_get_addr(node); + size = ofnode_get_size(node); + ut_asserteq(0x8000, addr); + ut_asserteq(0x4000, size); + + node = ofnode_path("/translation-test@8000/dev@1,100"); + ut_assert(ofnode_valid(node)); + addr = ofnode_get_addr(node); + size = ofnode_get_size(node); + ut_asserteq(0x9000, addr); + ut_asserteq(0x1000, size); + + return 0; +} +DM_TEST(dm_test_ofnode_get_reg, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); -- 2.25.1
[PATCH v2 0/2] dm: core: Add size operations on device tree references
Currently, there is only an interface for obtaining address from node, and if you want to get the size, you need to traverse the node. So I added the function to get the size ,and added related test case. Changes for v2: - Add a test to test/dm/ofnode.c Chen Guanqiao (2): dm: core: Add size operations on device tree references test: dm: add test item for ofnode_get_addr() and ofnode_get_size() drivers/core/ofnode.c | 9 + include/dm/ofnode.h | 10 ++ test/dm/ofnode.c | 24 3 files changed, 43 insertions(+) -- 2.25.1
[PATCH] dm: core: Add size operations on device tree references
Add functions to add size of addresses in the device tree using ofnode references. Signed-off-by: Chen Guanqiao --- drivers/core/ofnode.c | 9 + include/dm/ofnode.h | 10 ++ 2 files changed, 19 insertions(+) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index fa0bd2a9c4..952c3cf9dd 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -347,6 +347,15 @@ fdt_addr_t ofnode_get_addr(ofnode node) return ofnode_get_addr_index(node, 0); } +fdt_size_t ofnode_get_size(ofnode node) +{ + fdt_size_t size; + + ofnode_get_addr_size_index(node, 0, ); + + return size; +} + int ofnode_stringlist_search(ofnode node, const char *property, const char *string) { diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 2c0597c407..e91f81282b 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -510,6 +510,16 @@ phys_addr_t ofnode_get_addr_index(ofnode node, int index); */ phys_addr_t ofnode_get_addr(ofnode node); +/** + * ofnode_get_size() - get size from a node + * + * This reads the register size from a node + * + * @node: node to read from + * @return size of the address + */ +fdt_size_t ofnode_get_size(ofnode node); + /** * ofnode_stringlist_search() - find a string in a string list and return index * -- 2.27.0