Module Name: src
Committed By: christos
Date: Mon Mar 12 15:32:02 UTC 2012
Modified Files:
src/usr.sbin/npf/npfctl: npf_disassemble.c
Log Message:
don't leak the branch target array.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/npf/npfctl/npf_disassemble.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/npf/npfctl/npf_disassemble.c
diff -u src/usr.sbin/npf/npfctl/npf_disassemble.c:1.2 src/usr.sbin/npf/npfctl/npf_disassemble.c:1.3
--- src/usr.sbin/npf/npfctl/npf_disassemble.c:1.2 Sat Mar 10 17:55:28 2012
+++ src/usr.sbin/npf/npfctl/npf_disassemble.c Mon Mar 12 11:32:02 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: npf_disassemble.c,v 1.2 2012/03/10 22:55:28 christos Exp $ */
+/* $NetBSD: npf_disassemble.c,v 1.3 2012/03/12 15:32:02 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: npf_disassemble.c,v 1.2 2012/03/10 22:55:28 christos Exp $");
+__RCSID("$NetBSD: npf_disassemble.c,v 1.3 2012/03/12 15:32:02 christos Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -221,6 +221,7 @@ npfctl_ncode_disassemble(FILE *fp, const
char buf[256];
const uint32_t **targ;
size_t tlen, mlen, target;
+ int error = -1;
targ = NULL;
mlen = tlen = 0;
@@ -229,13 +230,13 @@ npfctl_ncode_disassemble(FILE *fp, const
if (*pc & ~0xff) {
warnx("bad opcode 0x%x at offset (%td)", *pc,
pc - st);
- return -1;
+ goto out;
}
ni = &npf_instructions[*pc];
if (ni->name == NULL) {
warnx("invalid opcode 0x%x at offset (%td)", *pc,
pc - st);
- return -1;
+ goto out;
}
ipc = pc;
target = npfctl_ncode_get_target(pc, targ, tlen);
@@ -250,10 +251,13 @@ npfctl_ncode_disassemble(FILE *fp, const
op = npfctl_ncode_operand(buf, sizeof(buf), ni->op[i],
st, ipc, &pc, &len, &targ, &tlen, &mlen);
if (op == NULL)
- return -1;
+ goto out;
fprintf(fp, "%s%s", i == 0 ? " " : ", ", op);
}
fprintf(fp, "\n");
}
- return 0;
+ error = 0;
+out:
+ free(targ);
+ return error;
}