[netfilter-cvslog] r3272 - in trunk/nfsim: core core/ipv4 kernelenv
kernelenv/include tools
rusty at netfilter.org
rusty at netfilter.org
Thu Nov 11 03:30:32 CET 2004
Author: rusty at netfilter.org
Date: 2004-11-11 03:30:31 +0100 (Thu, 11 Nov 2004)
New Revision: 3272
Modified:
trunk/nfsim/core/Makefile
trunk/nfsim/core/core.c
trunk/nfsim/core/expect.c
trunk/nfsim/core/fakesockopt.c
trunk/nfsim/core/ipv4/ipv4.c
trunk/nfsim/core/log.c
trunk/nfsim/core/message.c
trunk/nfsim/core/proc.c
trunk/nfsim/core/tui.c
trunk/nfsim/core/utils.c
trunk/nfsim/core/utils.h
trunk/nfsim/kernelenv/include/kernelenv.h
trunk/nfsim/kernelenv/kernelenv.c
trunk/nfsim/tools/hook.c
trunk/nfsim/tools/ifconfig.c
trunk/nfsim/tools/route.c
Log:
COnvert allocation to talloc. Talloc rocks!
Modified: trunk/nfsim/core/Makefile
===================================================================
--- trunk/nfsim/core/Makefile 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/Makefile 2004-11-11 02:30:31 UTC (rev 3272)
@@ -1,2 +1,2 @@
-OBJS += core/utils.o core/core.o core/message.o core/$(TYPE)/$(TYPE).o core/seq_file.o
+OBJS += core/utils.o core/core.o core/message.o core/$(TYPE)/$(TYPE).o core/seq_file.o core/talloc.o
HELP_OBJS += core/tui.o core/expect.o core/log.o core/proc.o
Modified: trunk/nfsim/core/core.c
===================================================================
--- trunk/nfsim/core/core.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/core.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -95,7 +95,7 @@
for (i = 1; i < DEFAULT_DEVICES; i++) {
struct net_device *dev;
- dev = new(struct net_device);
+ dev = talloc(NULL, struct net_device);
strncpy(dev->name, default_devnames[i], IFNAMSIZ);
dev->ifindex = i;
@@ -114,7 +114,7 @@
{
struct nfsim_queueitem *pq;
- pq = new(struct nfsim_queueitem);
+ pq = talloc(skb, struct nfsim_queueitem);
pq->skb = skb;
pq->info = info;
pq->id = queueid++;
@@ -170,6 +170,8 @@
}
}
+ kernelenv_init();
+
run_inits();
nf_register_queue_handler(PF_INET, enqueue_packet, NULL);
Modified: trunk/nfsim/core/expect.c
===================================================================
--- trunk/nfsim/core/expect.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/expect.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -140,7 +140,7 @@
static void expect_pre_command(const char *command)
{
- current_command = strdup(command);
+ current_command = talloc_strdup(NULL, command);
}
static void expect_post_command(const char *command)
@@ -163,11 +163,9 @@
*e = (*e)->next;
next = e;
- free(old->pattern);
- free(old->command);
- free(old);
+ talloc_free(old);
}
- free(current_command);
+ talloc_free(current_command);
}
static bool expect_cmd(int argc, char **argv)
@@ -200,16 +198,16 @@
return false;
}
- e = new(struct expect);
+ e = talloc(NULL, struct expect);
e->matched = 0;
e->invert = invert;
e->next = expect;
- e->command = strdup(argv[1]);
+ e->command = talloc_strdup(e, argv[1]);
for (len = 0, i = 2; i < argc; i++)
len += strlen(argv[i])+1;
- e->pattern = new_array(char, len + 1);
+ e->pattern = talloc_array(e, char, len + 1);
e->pattern[0] = '\0';
for (i = 2; i < argc; i++) {
Modified: trunk/nfsim/core/fakesockopt.c
===================================================================
--- trunk/nfsim/core/fakesockopt.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/fakesockopt.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -152,7 +152,7 @@
reply->len = 0;
break;
case KOP_COPY_FROM_USER:
- reply = malloc_nofail(m_offset + msg->args[2]);
+ reply = malloc(m_offset + msg->args[2]);
memcpy(reply, msg, m_offset);
memcpy((char *)reply + m_offset, (char *)msg->args[1], msg->args[2]);
reply->len = msg->args[2];
@@ -192,7 +192,7 @@
exit(EXIT_FAILURE);
}
- reply = new(struct nf_userspace_message);
+ reply = malloc(sizeof(*reply));
while(1) {
if (read(sd, reply, msize) < msize) {
@@ -201,7 +201,7 @@
}
if (reply->len != 0)
- reply = realloc_nofail(reply, msize + reply->len);
+ reply = realloc(reply, msize + reply->len);
if (read(sd, (char *)reply + msize, reply->len) < msg->len) {
perror("read");
Modified: trunk/nfsim/core/ipv4/ipv4.c
===================================================================
--- trunk/nfsim/core/ipv4/ipv4.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/ipv4/ipv4.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -34,6 +34,27 @@
static int __ip_route_output_key(struct rtable **rp, struct flowi *flp);
+static int destroy_route(void *r)
+{
+ struct ipv4_route *route = r;
+ list_del(&route->entry);
+ return 0;
+}
+
+static int destroy_rtable(void *r)
+{
+ struct rtable *rt = r, **p;
+
+ /* Remove from cache if it's there (it should be, currently) */
+ for (p = &rcache; *p; p = &(*p)->u.rt_next) {
+ if (*p == rt) {
+ *p = rt->u.rt_next;
+ break;
+ }
+ }
+ return 0;
+}
+
/* need the following:
- interfaces
- routes
@@ -60,10 +81,10 @@
struct in_device *ifdev;
struct in_ifaddr *ifaddr;
- ifdev = new(struct in_device);
+ ifdev = talloc(NULL, struct in_device);
dev->ip_ptr = ifdev;
- ifaddr = new(struct in_ifaddr);
+ ifaddr = talloc(ifdev, struct in_ifaddr);
ifdev->ifa_list = ifaddr;
@@ -85,7 +106,8 @@
(ifaddr->ifa_address & ifaddr->ifa_mask) +
(0xffffffff & ~ifaddr->ifa_mask);
- route = new(struct ipv4_route);
+ route = talloc(ifdev, struct ipv4_route);
+ talloc_set_destructor(route, destroy_route);
route->netmask = ifaddr->ifa_mask;
route->network = ifaddr->ifa_address & ifaddr->ifa_mask;
route->interface = dev;
@@ -197,16 +219,6 @@
}
-static struct rtable *alloc_rtable(void)
-{
- struct rtable *rth;
-
- rth = new(struct rtable);
- memset(rth, 0, sizeof(struct rtable));
-
- return rth;
-}
-
unsigned short ip_compute_csum(unsigned char * buff, int len)
{
return csum_fold (csum_partial(buff, len, 0));
@@ -243,7 +255,8 @@
ifaddr = ((struct in_device *)(dev->ip_ptr))->ifa_list;
while (ifaddr) {
if (flp->fl4_dst == ifaddr->ifa_local) {
- rth = alloc_rtable();
+ rth = talloc_zero(dev->ip_ptr, struct rtable);
+ talloc_set_destructor(rth, destroy_rtable);
rth->u.dst.output = ip_output;
rth->u.dst.input = ip_local_deliver;
@@ -275,7 +288,8 @@
list_for_each_entry(route, &routes, entry) {
if ((flp->fl4_dst & route->netmask) ==
route->network) {
- rth = alloc_rtable();
+ rth = talloc_zero(route, struct rtable);
+ talloc_set_destructor(rth, destroy_rtable);
rth->u.dst.dev = route->interface;
rth->u.dst.output = ip_output;
@@ -389,7 +403,8 @@
log_route(skb,
"route:local packet (%s)",
dev->name);
- rth = alloc_rtable();
+ rth = talloc_zero(dev->ip_ptr, struct rtable);
+ talloc_set_destructor(rth, destroy_rtable);
rth->u.dst.output = NULL;
rth->u.dst.input = ip_local_deliver;
@@ -416,7 +431,8 @@
list_for_each_entry(route, &routes, entry) {
if ((skb->nh.iph->daddr & route->netmask) ==
route->network) {
- rth = alloc_rtable();
+ rth = talloc_zero(route, struct rtable);
+ talloc_set_destructor(rth, destroy_rtable);
rth->u.dst.dev = skb->dev = route->interface;
Modified: trunk/nfsim/core/log.c
===================================================================
--- trunk/nfsim/core/log.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/log.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -61,14 +61,14 @@
bool ret;
va_start(ap, format);
- vasprintf(&line, format, ap);
+ line = talloc_vasprintf(NULL, format, ap);
va_end(ap);
if (!type || (type & typemask))
fprintf(logstream, "%s\n", line);
ret = expect_log_hook(line);
- free(line);
+ talloc_free(line);
return ret;
}
Modified: trunk/nfsim/core/message.c
===================================================================
--- trunk/nfsim/core/message.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/message.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -89,43 +89,42 @@
int handle_userspace_message(int fd)
{
int len;
- struct nf_userspace_message *msg;
+ struct nf_userspace_message msg;
- msg = new(struct nf_userspace_message);
- len = read(fd, msg, sizeof(*msg));
- if (len != sizeof(*msg)) {
- free(msg);
+ /* FIXME: msg.len? Presumable always 0? --RR */
+ len = read(fd, &msg, sizeof(msg));
+ if (len != sizeof(msg))
return -1;
- }
+
fprintf(stderr, "%s: received %u bytes\n", __FUNCTION__, len);
- if (msg->type == UM_SYSCALL) {
- switch (msg->opcode) {
+ if (msg.type == UM_SYSCALL) {
+ switch (msg.opcode) {
case SYS_GETSOCKOPT:
- msg->retval = nf_getsockopt(NULL, msg->args[0],
- msg->args[1], (char *)msg->args[2],
- &msg->args[3]);
- write(fd, msg, sizeof(struct nf_userspace_message) +
- msg->len);
+ msg.retval = nf_getsockopt(NULL, msg.args[0],
+ msg.args[1], (char *)msg.args[2],
+ &msg.args[3]);
+ write(fd, &msg, sizeof(struct nf_userspace_message) +
+ msg.len);
break;
case SYS_SETSOCKOPT:
- msg->retval = nf_setsockopt(NULL, msg->args[0],
- msg->args[1], (char *)msg->args[2],
- msg->args[3]);
- write(fd, msg, sizeof(struct nf_userspace_message) +
- msg->len);
+ msg.retval = nf_setsockopt(NULL, msg.args[0],
+ msg.args[1], (char *)msg.args[2],
+ msg.args[3]);
+ write(fd, &msg, sizeof(struct nf_userspace_message) +
+ msg.len);
break;
default:
fprintf(stderr, "Invalid syscall opcode %d\n",
- msg->opcode);
+ msg.opcode);
}
- } else if (msg->type == UM_KERNELOP) {
- switch (msg->opcode) {
+ } else if (msg.type == UM_KERNELOP) {
+ switch (msg.opcode) {
case KOP_COPY_FROM_USER:
- if (complete_read(fd, (char *)msg->args[0], msg->args[2]) !=
- msg->args[2])
+ if (complete_read(fd, (char *)msg.args[0], msg.args[2]) !=
+ msg.args[2])
barf_perror("read");
break;
case KOP_COPY_TO_USER:
@@ -133,13 +132,12 @@
break;
default:
fprintf(stderr, "Invalid kernelop opcode %d\n",
- msg->opcode);
+ msg.opcode);
}
} else {
- fprintf(stderr, "Unknown message type %d\n", msg->type);
+ fprintf(stderr, "Unknown message type %d\n", msg.type);
}
- free(msg);
return 0;
}
@@ -155,11 +153,8 @@
{
struct nf_userspace_message *msg;
- msg = malloc_nofail(sizeof(struct nf_userspace_message) + n);
+ msg = talloc_zero_named_const(NULL, sizeof(struct nf_userspace_message) + n, "copy_to_user");
- /* keep valgrind happy */
- memset(msg, 0, sizeof(struct nf_userspace_message) + n);
-
msg->type = UM_KERNELOP;
msg->opcode = KOP_COPY_TO_USER;
msg->len = n;
@@ -175,7 +170,7 @@
send_userspace_message(msg);
- free(msg);
+ talloc_free(msg);
return 0;
}
Modified: trunk/nfsim/core/proc.c
===================================================================
--- trunk/nfsim/core/proc.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/proc.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -76,7 +76,7 @@
goto out;
len = strlen(fn);
- ent = malloc(sizeof(struct proc_dir_entry) + len + 1);
+ ent = talloc_size(NULL, sizeof(struct proc_dir_entry) + len + 1);
if (!ent) goto out;
memset(ent, 0, sizeof(struct proc_dir_entry));
@@ -104,7 +104,7 @@
(S_IFDIR | S_IRUGO | S_IXUGO),2);
if (ent && proc_register(parent, ent) < 0) {
- free(ent);
+ talloc_free(ent);
ent = NULL;
}
return ent;
@@ -117,7 +117,7 @@
ent = proc_create(&parent,name,mode, 0);
if (ent && proc_register(parent, ent) < 0) {
- free(ent);
+ talloc_free(ent);
ent = NULL;
}
return ent;
Modified: trunk/nfsim/core/tui.c
===================================================================
--- trunk/nfsim/core/tui.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/tui.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -253,7 +253,7 @@
{
struct pre_post_hook *h;
- h = new(struct pre_post_hook);
+ h = talloc(NULL, struct pre_post_hook);
h->pre = pre;
h->post = post;
list_add(&h->list, &pre_post_hooks);
@@ -268,7 +268,7 @@
assert(strlen(command) < TUI_MAX_CMD_LEN);
- cmd = new(struct command);
+ cmd = talloc(NULL, struct command);
strncpy(cmd->name, command, TUI_MAX_CMD_LEN);
cmd->handler = handler;
cmd->helpfn = helpfn;
Modified: trunk/nfsim/core/utils.c
===================================================================
--- trunk/nfsim/core/utils.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/utils.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -61,26 +61,3 @@
free(str);
exit(1);
}
-
-void *_realloc_array(void *ptr, size_t size, size_t num)
-{
- if (num >= SIZE_MAX/size)
- return NULL;
- return realloc_nofail(ptr, size * num);
-}
-
-void *realloc_nofail(void *ptr, size_t size)
-{
- ptr = realloc(ptr, size);
- if (ptr)
- return ptr;
- barf("realloc of %zu failed", size);
-}
-
-void *malloc_nofail(size_t size)
-{
- void *ptr = malloc(size);
- if (ptr)
- return ptr;
- barf("malloc of %zu failed", size);
-}
Modified: trunk/nfsim/core/utils.h
===================================================================
--- trunk/nfsim/core/utils.h 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/core/utils.h 2004-11-11 02:30:31 UTC (rev 3272)
@@ -40,16 +40,8 @@
return streq(a + strlen(a) - strlen(b), b);
}
-/* Convenient wrappers for malloc and realloc. Use them. */
-#define new(type) ((type *)malloc_nofail(sizeof(type)))
-#define new_array(type, num) realloc_array(0, type, (num))
-#define realloc_array(ptr, type, num) ((type *)_realloc_array((ptr), sizeof(type), (num)))
-
-void *malloc_nofail(size_t size);
-void *realloc_nofail(void *ptr, size_t size);
-void *_realloc_array(void *ptr, size_t size, size_t num);
-
void barf(const char *fmt, ...) __attribute__((noreturn));
void barf_perror(const char *fmt, ...) __attribute__((noreturn));
+extern void kernelenv_init(void);
#endif /* _STDRUSTY_H */
Modified: trunk/nfsim/kernelenv/include/kernelenv.h
===================================================================
--- trunk/nfsim/kernelenv/include/kernelenv.h 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/kernelenv/include/kernelenv.h 2004-11-11 02:30:31 UTC (rev 3272)
@@ -88,27 +88,28 @@
#define __inline
#define ____cacheline_aligned
+#include <stdarg.h>
+#include <talloc.h>
+extern void *__vmalloc_ctx;
+extern void *__kmalloc_atomic_ctx;
+extern void *__kmalloc_ctx;
#define MALLOC_INIT 1
#ifdef MALLOC_INIT
-static inline void *vmalloc(size_t size)
-{
- void *buf;
- if ((buf = malloc(size)))
- memset(buf, 0, size);
- return buf;
-}
-#define kmalloc(p,f) vmalloc(p)
+#define vmalloc(s) talloc_zero_named_const(__vmalloc_ctx, (s), __location__)
+#define kmalloc(s,f) ((f) & GFP_ATOMIC \
+ ? talloc_zero_named_const(__kmalloc_atomic_ctx, (s), __location__) \
+ : talloc_zero_named_const(__kmalloc_ctx, (s), __location__))
#else
-
-#define vmalloc malloc
-#define kmalloc(p,f) malloc(p)
-
+#define vmalloc(s) talloc_size(__vmalloc_ctx, (s))
+#define kmalloc(s,f) ((f) & GFP_ATOMIC \
+ ? talloc_size(__kmalloc_atomic_ctx, (s)) \
+ : talloc_size(__kmalloc_ctx, (s)))
#endif
-#define vfree free
-#define kfree free
+#define vfree(p) talloc_unreference(__vmalloc_ctx, (p))
+#define kfree(p) talloc_free(p)
#define synchronize_net()
Modified: trunk/nfsim/kernelenv/kernelenv.c
===================================================================
--- trunk/nfsim/kernelenv/kernelenv.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/kernelenv/kernelenv.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -40,6 +40,7 @@
}
/* skbuff */
+static void *__skb_ctx;
struct sk_buff *alloc_skb(unsigned int size, int gfp_mask)
{
@@ -47,8 +48,8 @@
static int seq;
/* skb, followed by data, followed by skb_shinfo */
- skb = malloc_nofail(sizeof(struct sk_buff) +
- sizeof(struct skb_shared_info) + size);
+ skb = talloc_size(__skb_ctx, sizeof(struct sk_buff) +
+ sizeof(struct skb_shared_info) + size);
memset(skb, 0, sizeof(struct sk_buff) + size);
atomic_set(&skb->users, 1);
@@ -72,8 +73,7 @@
if (skb->dst)
dst_release(skb->dst);
- free(skb);
-
+ talloc_free(skb);
}
@@ -475,7 +475,8 @@
void (*dtor)(void *, kmem_cache_t *, unsigned long))
{
kmem_cache_t *cache;
- cache = new(kmem_cache_t);
+
+ cache = talloc(NULL, kmem_cache_t);
cache->name = name;
cache->objsize = objsize;
cache->ctor = ctor;
@@ -487,12 +488,7 @@
int kmem_cache_destroy(kmem_cache_t *cache)
{
- struct list_head *i;
- list_for_each(i, cache->objs.next) {
- free(list_entry(i,struct kmem_cache_obj, entry)->ptr);
- free(list_entry(i,struct kmem_cache_obj, entry));
- }
- free(cache);
+ talloc_free(cache);
return 0;
}
@@ -501,8 +497,8 @@
{
struct kmem_cache_obj *obj;
- obj = new(struct kmem_cache_obj);
- obj->ptr = malloc_nofail(cache->objsize);
+ obj = talloc(cache, struct kmem_cache_obj);
+ obj->ptr = talloc_size(obj, cache->objsize);
list_add(&obj->entry, &cache->objs);
@@ -511,21 +507,26 @@
}
void kmem_cache_free(kmem_cache_t *cache, void *ptr)
{
- struct kmem_cache_obj *i, *obj = 0;
+ struct kmem_cache_obj *i;
list_for_each_entry(i, &(cache->objs), entry) {
if (i->ptr == ptr) {
- obj = i;
- break;
+ list_del(&i->entry);
+ talloc_free(i);
+ return;
}
}
- if (!obj)
- panic("[cache] attempting to free non-cache memory\n");
+ panic("[cache] attempting to free non-cache memory\n");
}
+void *__vmalloc_ctx, *__kmalloc_ctx, *__kmalloc_atomic_ctx;
-
-
-
-
+void kernelenv_init(void)
+{
+ __vmalloc_ctx = talloc_named_const(NULL, 1, "vmallocs");
+ __kmalloc_ctx = talloc_named_const(NULL, 1, "kmallocs");
+ __kmalloc_atomic_ctx = talloc_named_const(NULL, 1,
+ "kmallocs (atomic)");
+ __skb_ctx = talloc_named_const(NULL, 1, "skbs");
+}
Modified: trunk/nfsim/tools/hook.c
===================================================================
--- trunk/nfsim/tools/hook.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/tools/hook.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -106,7 +106,7 @@
return false;
}
- l = new(struct hook_list);
+ l = talloc(NULL, struct hook_list);
l->ops.owner = THIS_MODULE;
l->ops.priority = atoi(argv[2]);
@@ -127,7 +127,7 @@
l->ops.hooknum = NF_IP_FORWARD;
} else {
nfsim_log(LOG_ALWAYS, "Unknown hook %s", argv[1]);
- free(l);
+ talloc_free(l);
return false;
}
@@ -139,7 +139,7 @@
l->ops.hook = hook_queue;
else {
nfsim_log(LOG_ALWAYS, "Unknown verdict %s", argv[3]);
- free(l);
+ talloc_free(l);
return false;
}
Modified: trunk/nfsim/tools/ifconfig.c
===================================================================
--- trunk/nfsim/tools/ifconfig.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/tools/ifconfig.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -142,19 +142,17 @@
return false;
}
- dev = new(struct net_device);
- indev = new(struct in_device);
+ dev = talloc(NULL, struct net_device);
+ indev = talloc(dev, struct in_device);
dev->ip_ptr = indev;
- indev->ifa_list = new(struct in_ifaddr);
+ indev->ifa_list = talloc(indev, struct in_ifaddr);
indev->ifa_list->ifa_next = NULL;
strncpy(dev->name, argv[1], IFNAMSIZ);
if (!set_device(dev, 3, argv + 2)) {
- free(indev->ifa_list);
- free(indev);
- free(dev);
+ talloc_free(dev);
return false;
}
@@ -174,9 +172,6 @@
if (argc == 3 && !strncmp(argv[2], "down", 4)) {
list_del(&dev->entry);
- /* FIXME: pain: walk backwards through if_addr list
- and free as required */
- free(dev->ip_ptr);
free(dev);
return true;
}
Modified: trunk/nfsim/tools/route.c
===================================================================
--- trunk/nfsim/tools/route.c 2004-11-10 19:57:53 UTC (rev 3271)
+++ trunk/nfsim/tools/route.c 2004-11-11 02:30:31 UTC (rev 3272)
@@ -143,21 +143,21 @@
return false;
}
- route = new(struct ipv4_route);
+ route = talloc(NULL, struct ipv4_route);
if (get_route_dest(route, argc-3, argv+2)) {
- free(route);
+ talloc_free(route);
return false;
}
if (find_matching_route(route)) {
nfsim_log(LOG_UI, "route already exists!");
- free(route);
+ talloc_free(route);
return false;
}
if (!(dev = interface_by_name(argv[argc-1]))) {
nfsim_log(LOG_UI, "no such interface %s", argv[argc-1]);
- free(route);
+ talloc_free(route);
return false;
}
@@ -172,9 +172,9 @@
struct ipv4_route *r2;
char found=0;
- route = new(struct ipv4_route);
+ route = talloc(NULL, struct ipv4_route);
if (get_route_dest(route, argc-2, argv+2)) {
- free(route);
+ talloc_free(route);
return false;
}
@@ -184,7 +184,7 @@
route->netmask == r2->netmask) {
found=1;
list_del(&r2->entry);
- free(r2);
+ talloc_free(r2);
nfsim_log(LOG_UI, "route removed");
break;
}
@@ -193,7 +193,7 @@
nfsim_log(LOG_UI, "route not found");
}
- free(route);
+ talloc_free(route);
return true;
}
More information about the netfilter-cvslog
mailing list