From 5fe615a4d66f4dea48812ed9e4f250010a8f9298 Mon Sep 17 00:00:00 2001 From: Lancelot SIX Date: Thu, 25 Dec 2014 22:01:53 +0100 Subject: Make sure to free content dir in procfs In procfs/netfs.c:netfs_get_dirents, make sure to free the memory allocated with the "get_contents" callback of nodes. --- procfs/netfs.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'procfs/netfs.c') diff --git a/procfs/netfs.c b/procfs/netfs.c index 276c57cc..737abbc9 100644 --- a/procfs/netfs.c +++ b/procfs/netfs.c @@ -161,6 +161,8 @@ error_t netfs_get_dirents (struct iouser *cred, struct node *dir, vm_size_t bufsize, int *amt) { char *contents; + char *first_content; // Keep pointer to the dir content's buffer to free it + // at the end of the procedure ssize_t contents_len; error_t err; @@ -170,6 +172,7 @@ error_t netfs_get_dirents (struct iouser *cred, struct node *dir, err = procfs_get_contents (dir, &contents, &contents_len); if (err) return err; + first_content = contents; /* We depend on the fact that CONTENTS is terminated. */ assert (contents_len == 0 || contents[contents_len - 1] == '\0'); @@ -188,7 +191,10 @@ error_t netfs_get_dirents (struct iouser *cred, struct node *dir, { char *n = mmap (0, *datacnt, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, 0, 0); if (n == MAP_FAILED) - return ENOMEM; + { + free (first_content); + return ENOMEM; + } *data = n; } @@ -196,6 +202,7 @@ error_t netfs_get_dirents (struct iouser *cred, struct node *dir, /* Do the actual conversion. */ *amt = putentries (contents, contents_len, nentries, *data, datacnt); + free (first_content); return 0; } -- cgit v1.2.3