diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/objtool/check.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/tools/objtool/check.c b/tools/objtool/check.c index a0c518ecf085..c0e26ad1fa7e 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c | |||
| @@ -267,12 +267,13 @@ static int decode_instructions(struct objtool_file *file) | |||
| 267 | &insn->immediate, | 267 | &insn->immediate, |
| 268 | &insn->stack_op); | 268 | &insn->stack_op); |
| 269 | if (ret) | 269 | if (ret) |
| 270 | return ret; | 270 | goto err; |
| 271 | 271 | ||
| 272 | if (!insn->type || insn->type > INSN_LAST) { | 272 | if (!insn->type || insn->type > INSN_LAST) { |
| 273 | WARN_FUNC("invalid instruction type %d", | 273 | WARN_FUNC("invalid instruction type %d", |
| 274 | insn->sec, insn->offset, insn->type); | 274 | insn->sec, insn->offset, insn->type); |
| 275 | return -1; | 275 | ret = -1; |
| 276 | goto err; | ||
| 276 | } | 277 | } |
| 277 | 278 | ||
| 278 | hash_add(file->insn_hash, &insn->hash, insn->offset); | 279 | hash_add(file->insn_hash, &insn->hash, insn->offset); |
| @@ -296,6 +297,10 @@ static int decode_instructions(struct objtool_file *file) | |||
| 296 | } | 297 | } |
| 297 | 298 | ||
| 298 | return 0; | 299 | return 0; |
| 300 | |||
| 301 | err: | ||
| 302 | free(insn); | ||
| 303 | return ret; | ||
| 299 | } | 304 | } |
| 300 | 305 | ||
| 301 | /* | 306 | /* |
