aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet_traceroute.c
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-07-08 19:32:56 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-07-08 19:32:56 +0200
commita3b2d502b95700cdff38d3a3eafd28d32e39f402 (patch)
tree20c356a6ec6f42337ec3e2620d417cfe38d827ef /libglouglou/libggnet_traceroute.c
parentcompile gg_map gg_sniff and libglouglou with -O0 -g (diff)
downloadglouglou-a3b2d502b95700cdff38d3a3eafd28d32e39f402.tar.xz
glouglou-a3b2d502b95700cdff38d3a3eafd28d32e39f402.zip
fix segfault because of bad libdnet intf_get_dst() usage
shame on libdnet for this shitty interface !
Diffstat (limited to 'libglouglou/libggnet_traceroute.c')
-rw-r--r--libglouglou/libggnet_traceroute.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libglouglou/libggnet_traceroute.c b/libglouglou/libggnet_traceroute.c
index 8c189f0..6003175 100644
--- a/libglouglou/libggnet_traceroute.c
+++ b/libglouglou/libggnet_traceroute.c
@@ -198,7 +198,8 @@ ggnet_traceroute_trace(struct ggnet_traceroute *ggtr, struct addr *ip,
void *data)
{
struct ggnet_traceroute_req *req;
- struct intf_entry intf_entry;
+ struct intf_entry *intfentry;
+ char buf[1024];
req = calloc(1, sizeof(struct ggnet_traceroute_req));
if (!req) {
@@ -211,13 +212,17 @@ ggnet_traceroute_trace(struct ggnet_traceroute *ggtr, struct addr *ip,
exit(1);
}
+ intfentry = (struct intf_entry *)buf;
+ memset(intfentry, 0, sizeof(struct intf_entry));
+ intfentry->intf_len = sizeof(buf);
memcpy(&req->target->ip, ip, sizeof(struct addr));
- if (intf_get_dst(ggtr->intf, &intf_entry, &req->target->ip) < 0) {
+ if (intf_get_dst(ggtr->intf, intfentry, &req->target->ip) < 0) {
printf("error getting source IP for dest IP %s (%p)\n",
addr_ntoa(&req->target->ip), ggtr->intf);
goto err;
}
- memcpy(&req->srcip, &intf_entry.intf_addr, sizeof(struct addr));
+ printf("XXX intfentry->intf_addr %s\n", addr_ntoa(&intfentry->intf_addr));
+ memcpy(&req->srcip, &intfentry->intf_addr, sizeof(struct addr));
req->params = params;
TAILQ_INIT(&req->hops_list);