Loading arch/arc/kernel/unwind.c +14 −13 Original line number Diff line number Diff line Loading @@ -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; /* 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 || (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; Loading Loading
arch/arc/kernel/unwind.c +14 −13 Original line number Diff line number Diff line Loading @@ -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; /* 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 || (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; Loading