Procházet zdrojové kódy

intel/tools: Initialize offset correctly for i965_asm

If we leave offset uninitialized, access to store
will be random depending on stack value and can
segfault.

Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
tags/19.2-branchpoint
Mika Kuoppala před 7 roky
rodič
revize
1fb5ce0a11
Žádný účet není propojen s e-mailovou adresou tvůrce revize
1 změnil soubory, kde provedl 7 přidání a 10 odebrání
  1. 7
    10
      src/intel/tools/i965_asm.c

+ 7
- 10
src/intel/tools/i965_asm.c Zobrazit soubor

@@ -29,7 +29,7 @@
extern FILE *yyin;
struct brw_codegen *p;
static int c_literal_output = 0;
char *input_filename;
char *input_filename = NULL;
int errors;

static void
@@ -98,7 +98,7 @@ int main(int argc, char **argv)
bool help = false, compact = false;
void *store;
uint64_t pci_id = 0;
int offset, err;
int offset = 0, err;
int start_offset = 0;
struct disasm_info *disasm_info;
struct gen_device_info *devinfo;
@@ -205,13 +205,11 @@ int main(int argc, char **argv)
brw_validate_instructions(p->devinfo, p->store, 0,
p->next_insn_offset, disasm_info);

int nr_insn = (p->next_insn_offset - start_offset) / 16;
const int nr_insn = (p->next_insn_offset - start_offset) / 16;

if (compact)
brw_compact_instructions(p, start_offset, disasm_info);

ralloc_free(disasm_info);

for (int i = 0; i < nr_insn; i++) {
const brw_inst *insn = store + offset;
bool compacted = false;
@@ -226,6 +224,8 @@ int main(int argc, char **argv)
print_instruction(output, compacted, insn);
}

ralloc_free(disasm_info);

if (c_literal_output)
fprintf(output, "}");

@@ -233,11 +233,8 @@ int main(int argc, char **argv)
goto end;

end:
if (input_filename)
free(input_filename);

if (output_file)
free(output_file);
free(input_filename);
free(output_file);

if (yyin)
fclose(yyin);

Načítá se…
Zrušit
Uložit