From: Daniel Borkmann <dborkman@redhat.com>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org
Subject: [PATCH net-next 2/2] bpf_exp: free duplicated labels at exit time
Date: Mon, 16 Dec 2013 11:45:01 +0100 [thread overview]
Message-ID: <1387190701-1893-3-git-send-email-dborkman@redhat.com> (raw)
In-Reply-To: <1387190701-1893-1-git-send-email-dborkman@redhat.com>
Valgrind found that extracted labels that are passed from the lexer
weren't freed upon exit. Therefore, add a small helper function that
walks label tables and frees them. Since also NULL can be passed to
free(3), we do not need to take care of that here. While at it, fix
up a spacing error in bpf_set_curr_label().
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
---
tools/net/bpf_exp.y | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/tools/net/bpf_exp.y b/tools/net/bpf_exp.y
index f524110..d15efc9 100644
--- a/tools/net/bpf_exp.y
+++ b/tools/net/bpf_exp.y
@@ -40,8 +40,8 @@ extern void yyerror(const char *str);
extern void bpf_asm_compile(FILE *fp, bool cstyle);
static void bpf_set_curr_instr(uint16_t op, uint8_t jt, uint8_t jf, uint32_t k);
-static void bpf_set_curr_label(const char *label);
-static void bpf_set_jmp_label(const char *label, enum jmp_type type);
+static void bpf_set_curr_label(char *label);
+static void bpf_set_jmp_label(char *label, enum jmp_type type);
%}
@@ -573,7 +573,7 @@ txa
static int curr_instr = 0;
static struct sock_filter out[BPF_MAXINSNS];
-static const char **labels, **labels_jt, **labels_jf, **labels_k;
+static char **labels, **labels_jt, **labels_jf, **labels_k;
static void bpf_assert_max(void)
{
@@ -594,13 +594,13 @@ static void bpf_set_curr_instr(uint16_t code, uint8_t jt, uint8_t jf,
curr_instr++;
}
-static void bpf_set_curr_label(const char *label)
+static void bpf_set_curr_label(char *label)
{
bpf_assert_max();
- labels[curr_instr] = label;
+ labels[curr_instr] = label;
}
-static void bpf_set_jmp_label(const char *label, enum jmp_type type)
+static void bpf_set_jmp_label(char *label, enum jmp_type type)
{
bpf_assert_max();
switch (type) {
@@ -717,12 +717,25 @@ static void bpf_init(void)
assert(labels_k);
}
+static void bpf_destroy_labels(void)
+{
+ int i;
+
+ for (i = 0; i < curr_instr; i++) {
+ free(labels_jf[i]);
+ free(labels_jt[i]);
+ free(labels_k[i]);
+ free(labels[i]);
+ }
+}
+
static void bpf_destroy(void)
{
- free(labels);
+ bpf_destroy_labels();
free(labels_jt);
free(labels_jf);
free(labels_k);
+ free(labels);
}
void bpf_asm_compile(FILE *fp, bool cstyle)
--
1.8.3.1
next prev parent reply other threads:[~2013-12-16 10:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-16 10:44 [PATCH net-next 0/2] two bpf tools fixes Daniel Borkmann
2013-12-16 10:45 ` [PATCH net-next 1/2] bpf_dbg: always close socket in bpf_runnable Daniel Borkmann
2013-12-16 10:45 ` Daniel Borkmann [this message]
2013-12-17 22:11 ` [PATCH net-next 0/2] two bpf tools fixes David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1387190701-1893-3-git-send-email-dborkman@redhat.com \
--to=dborkman@redhat.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).