Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/openwrt/odhcp6c.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2018-03-27 21:45:04 +0300
committerHans Dedecker <dedeckeh@gmail.com>2018-03-27 21:45:04 +0300
commitd57346128e86418dc6a69140482073c3c7ab34ba (patch)
treeb30c5a0e10f6e5389b756d6666f394de026153b6
parent1f93bd4c6d267813d1bbe803358499050c47bdeb (diff)
odhcp6c: fix file pointer leakage
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
-rw-r--r--src/odhcp6c.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/odhcp6c.c b/src/odhcp6c.c
index e03f282..b055b70 100644
--- a/src/odhcp6c.c
+++ b/src/odhcp6c.c
@@ -831,6 +831,7 @@ bool odhcp6c_addr_in_scope(const struct in6_addr *addr)
{
FILE *fd = fopen("/proc/net/if_inet6", "r");
int len;
+ bool ret = false;
char buf[256];
if (fd == NULL)
@@ -845,13 +846,13 @@ bool odhcp6c_addr_in_scope(const struct in6_addr *addr)
len = strlen(buf);
if ((len <= 0) || buf[len - 1] != '\n')
- return false;
+ break;
buf[--len] = '\0';
if (sscanf(buf, "%s %x %x %x %x %s",
addr_buf, &dummy, &dummy, &dummy, &flags, name) != 6)
- return false;
+ break;
if (strcmp(name, ifname) ||
(flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE | IFA_F_DEPRECATED)))
@@ -859,7 +860,7 @@ bool odhcp6c_addr_in_scope(const struct in6_addr *addr)
for (i = 0; i < strlen(addr_buf); i++) {
if (!isxdigit(addr_buf[i]) || isupper(addr_buf[i]))
- return false;
+ break;
}
memset(&inet6_addr, 0, sizeof(inet6_addr));
@@ -872,11 +873,14 @@ bool odhcp6c_addr_in_scope(const struct in6_addr *addr)
}
if ((IN6_IS_ADDR_LINKLOCAL(&inet6_addr) == IN6_IS_ADDR_LINKLOCAL(addr)) &&
- (IN6_IS_ADDR_UNIQUELOCAL(&inet6_addr) == IN6_IS_ADDR_UNIQUELOCAL(addr)))
- return true;
+ (IN6_IS_ADDR_UNIQUELOCAL(&inet6_addr) == IN6_IS_ADDR_UNIQUELOCAL(addr))) {
+ ret = true;
+ break;
+ }
}
- return false;
+ fclose(fd);
+ return ret;
}
static void sighandler(int signal)