Message ID | 20210223020031.519-1-sz18665958617@163.com |
---|---|
State | New |
Headers | show |
Series | treewide: avoid the ponter addition with NULL pointer | expand |
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 --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;