Skip to content

Commit

Permalink
Give ownership of created object to swig (related to #2)
Browse files Browse the repository at this point in the history
Fix a memory leak by transferring ownership of the created payload to
swig, using the SWIG_POINTER_OWN flag.
Start removing the default verdict (moved to libnetfilter_queue.i)
  • Loading branch information
chifflier committed Jul 23, 2016
1 parent ca0fe77 commit 6e477db
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 7 deletions.
2 changes: 1 addition & 1 deletion examples/example.pl
Expand Up @@ -47,7 +47,7 @@ ()
print "TCP dst_port: $tcp_obj->{dest_port}\n";
}

$payload->set_verdict($nfqueue::NF_DROP);
$payload->set_verdict($nfqueue::NF_ACCEPT);
}
}

Expand Down
6 changes: 6 additions & 0 deletions libnetfilter_queue.i
Expand Up @@ -51,6 +51,12 @@
};

%extend payload {

~payload() {
nfq_set_verdict($self->qh, $self->id, NF_ACCEPT, 0, NULL);
free($self);
}

int get_nfmark();
int get_indev();
int get_outdev();
Expand Down
5 changes: 2 additions & 3 deletions perl/libnetfilter_queue_perl.i
Expand Up @@ -64,19 +64,18 @@ int swig_nfq_callback(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
p->qh = qh;
p->nfad = nfad;
payload_obj = sv_newmortal();
SWIG_MakePtr(payload_obj, (void*) p, SWIGTYPE_p_payload, 0);
SWIG_MakePtr(payload_obj, (void*) p, SWIGTYPE_p_payload, SWIG_POINTER_OWN);
XPUSHs(payload_obj);

PUTBACK;

call_sv(func, G_DISCARD);
free(p);

FREETMPS ;
LEAVE ;
}

return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
return 0;
}

%}
Expand Down
5 changes: 2 additions & 3 deletions python/libnetfilter_queue_python.i
Expand Up @@ -58,10 +58,9 @@ int swig_nfq_callback(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
p->id = id;
p->qh = qh;
p->nfad = nfad;
payload_obj = SWIG_NewPointerObj((void*) p, SWIGTYPE_p_payload, 0 /* | SWIG_POINTER_OWN */);
payload_obj = SWIG_NewPointerObj((void*) p, SWIGTYPE_p_payload, SWIG_POINTER_OWN);
arglist = Py_BuildValue("(N)",payload_obj);
result = PyEval_CallObject(func,arglist);
free(p);
Py_DECREF(arglist);
if (result) {
Py_DECREF(result);
Expand All @@ -74,7 +73,7 @@ int swig_nfq_callback(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
/*SWIG_PYTHON_THREAD_END_ALLOW;*/
}

return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
return 0;
}

%}
Expand Down

0 comments on commit 6e477db

Please sign in to comment.