On 2/22/21 6:00 PM, sz18665958...@163.com wrote:
> From: "dean.yang_cp" <yangdianq...@yulong.com>
>
> Signed-off-by: dean.yang_cp <yangdianq...@yulong.com>

LGTM.

Acked-by: Vineet Gupta <vgu...@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;

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

Reply via email to