diff mbox series

treewide: avoid the ponter addition with NULL pointer

Message ID 20210223020031.519-1-sz18665958617@163.com
State New
Headers show
Series treewide: avoid the ponter addition with NULL pointer | expand

Commit Message

sz18665958617@163.com Feb. 23, 2021, 2 a.m. UTC
From: "dean.yang_cp" <yangdianqing@yulong.com>

Signed-off-by: dean.yang_cp <yangdianqing@yulong.com>
---
 arch/arc/kernel/unwind.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

Comments

Vineet Gupta Feb. 23, 2021, 2:42 a.m. UTC | #1
On 2/22/21 6:00 PM, sz18665958617@163.com wrote:
> From: "dean.yang_cp" <yangdianqing@yulong.com>
>
> Signed-off-by: dean.yang_cp <yangdianqing@yulong.com>

LGTM.

Acked-by: Vineet Gupta <vgupta@synopsys.com>

Thx,
-Vineet

> ---
>   arch/arc/kernel/unwind.c | 27 ++++++++++++++-------------
>   1 file changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/arch/arc/kernel/unwind.c b/arch/arc/kernel/unwind.c
> index 74ad425..47bab67 100644
> --- a/arch/arc/kernel/unwind.c
> +++ b/arch/arc/kernel/unwind.c
> @@ -187,25 +187,26 @@ static void init_unwind_table(struct unwind_table *table, const char *name,
>   			      const void *table_start, unsigned long table_size,
>   			      const u8 *header_start, unsigned long header_size)
>   {
> -	const u8 *ptr = header_start + 4;
> -	const u8 *end = header_start + header_size;
> -
>   	table->core.pc = (unsigned long)core_start;
>   	table->core.range = core_size;
>   	table->init.pc = (unsigned long)init_start;
>   	table->init.range = init_size;
>   	table->address = table_start;
>   	table->size = table_size;
> -
> -	/* See if the linker provided table looks valid. */
> -	if (header_size <= 4
> -	    || header_start[0] != 1
> -	    || (void *)read_pointer(&ptr, end, header_start[1]) != table_start
> -	    || header_start[2] == DW_EH_PE_omit
> -	    || read_pointer(&ptr, end, header_start[2]) <= 0
> -	    || header_start[3] == DW_EH_PE_omit)
> -		header_start = NULL;
> -
> +	/* To avoid the pointer addition with NULL pointer.*/
> +	if (header_start != NULL) {
> +		const u8 *ptr = header_start + 4;
> +		const u8 *end = header_start + header_size;
> +		/* See if the linker provided table looks valid. */
> +		if (header_size <= 4
> +		|| header_start[0] != 1
> +		|| (void *)read_pointer(&ptr, end, header_start[1])
> +				!= table_start
> +		|| header_start[2] == DW_EH_PE_omit
> +		|| read_pointer(&ptr, end, header_start[2]) <= 0
> +		|| header_start[3] == DW_EH_PE_omit)
> +			header_start = NULL;
> +	}
>   	table->hdrsz = header_size;
>   	smp_wmb();
>   	table->header = header_start;
diff mbox series

Patch

diff --git a/arch/arc/kernel/unwind.c b/arch/arc/kernel/unwind.c
index 74ad425..47bab67 100644
--- a/arch/arc/kernel/unwind.c
+++ b/arch/arc/kernel/unwind.c
@@ -187,25 +187,26 @@  static void init_unwind_table(struct unwind_table *table, const char *name,
 			      const void *table_start, unsigned long table_size,
 			      const u8 *header_start, unsigned long header_size)
 {
-	const u8 *ptr = header_start + 4;
-	const u8 *end = header_start + header_size;
-
 	table->core.pc = (unsigned long)core_start;
 	table->core.range = core_size;
 	table->init.pc = (unsigned long)init_start;
 	table->init.range = init_size;
 	table->address = table_start;
 	table->size = table_size;
-
-	/* See if the linker provided table looks valid. */
-	if (header_size <= 4
-	    || header_start[0] != 1
-	    || (void *)read_pointer(&ptr, end, header_start[1]) != table_start
-	    || header_start[2] == DW_EH_PE_omit
-	    || read_pointer(&ptr, end, header_start[2]) <= 0
-	    || header_start[3] == DW_EH_PE_omit)
-		header_start = NULL;
-
+	/* To avoid the pointer addition with NULL pointer.*/
+	if (header_start != NULL) {
+		const u8 *ptr = header_start + 4;
+		const u8 *end = header_start + header_size;
+		/* See if the linker provided table looks valid. */
+		if (header_size <= 4
+		|| header_start[0] != 1
+		|| (void *)read_pointer(&ptr, end, header_start[1])
+				!= table_start
+		|| header_start[2] == DW_EH_PE_omit
+		|| read_pointer(&ptr, end, header_start[2]) <= 0
+		|| header_start[3] == DW_EH_PE_omit)
+			header_start = NULL;
+	}
 	table->hdrsz = header_size;
 	smp_wmb();
 	table->header = header_start;