diff options
author | dimitri staessens <dimitri.staessens@ugent.be> | 2017-10-23 17:47:52 +0200 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@ugent.be> | 2017-10-23 18:19:18 +0200 |
commit | 3d9501007a24bf5422335238960f6777d2684d35 (patch) | |
tree | 22326bbba7109b0adab59b1f4e18c59aedd23ddd /src | |
parent | 2b1f71e7993070cbc8b37d44a44d8c6554ef0631 (diff) | |
download | ouroboros-3d9501007a24bf5422335238960f6777d2684d35.tar.gz ouroboros-3d9501007a24bf5422335238960f6777d2684d35.zip |
lib: Fix exit bug in dev.c
If the library init() fails, the fini() call tries to access
unreleased resources. The fix resets the ai struct to 0 if init()
fails and checks a heap pointer for NULL before the fini() accesses
internals.
Signed-off-by: dimitri staessens <dimitri.staessens@ugent.be>
Signed-off-by: Sander Vrijders <sander.vrijders@ugent.be>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/dev.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lib/dev.c b/src/lib/dev.c index 85dbfb0a..e216baab 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -713,6 +713,7 @@ __attribute__((constructor)) static void init(int argc, fail_fds: fprintf(stderr, "FATAL: ouroboros-dev init failed. " "Make sure an IRMd is running.\n\n"); + memset(&ai, 0, sizeof(ai)); exit(EXIT_FAILURE); } @@ -720,6 +721,9 @@ __attribute__((destructor)) static void fini(void) { int i = 0; + if (ai.fds == NULL) + return; + bmp_destroy(ai.fds); bmp_destroy(ai.fqueues); |