intel/tools: Initialize offset correctly for i965_asm
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Thu, 21 Feb 2019 00:47:01 +0000 (16:47 -0800)
committerMatt Turner <mattst88@gmail.com>
Tue, 7 May 2019 21:33:48 +0000 (14:33 -0700)
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>
src/intel/tools/i965_asm.c

index 667f43da0d725fffd499d8304d931f58eb98dbd7..1a53568abb5797957da4f69ba1bede89ddb7a553 100644 (file)
@@ -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);