Mixed up two os_core_linux functions
authorHenning Rogge <hrogge@gmail.com>
Thu, 4 Dec 2014 11:11:01 +0000 (12:11 +0100)
committerHenning Rogge <hrogge@gmail.com>
Thu, 4 Dec 2014 11:11:01 +0000 (12:11 +0100)
Fix os_core_get_random() fd leackage (coverity 84338)

src-api/core/os_linux/os_core_linux_get_random.c
src-api/core/os_linux/os_core_linux_locking_file.c

index 3415b96..8c7bcf3 100644 (file)
 
 #include "core/os_core.h"
 
-
 /**
- * Create a lock file of a certain name
- * @param path name of lockfile including path
- * @return 0 if the lock was created successfully, false otherwise
+ * Get some random data
+ * @param dst pointer to destination buffer
+ * @param length number of random bytes requested
+ * @return 0 if the random data was generated, -1 if an error happened
  */
 int
-os_core_create_lockfile(const char *path) {
-  int lock_fd;
+os_core_get_random(void *dst, size_t length) {
+  int random_fd;
+  ssize_t result;
+  uint8_t *u8ptr;
 
-  /* create file for lock */
-  lock_fd = open(path, O_RDWR | O_CREAT, S_IRWXU);
-  if (lock_fd == -1) {
-    return -1;
-  }
+  u8ptr = dst;
 
-  if (flock(lock_fd, LOCK_EX | LOCK_NB)) {
-    close(lock_fd);
+  /* open urandom */
+  random_fd = open("/dev/urandom", O_RDONLY);
+  if (random_fd == -1) {
     return -1;
   }
 
-  /* lock will be released when process ends */
+  while (length > 0) {
+    result = read(random_fd, u8ptr, length);
+    if (result < 0) {
+      close (random_fd);
+      return -1;
+    }
+
+    u8ptr += result;
+    length -= result;
+  }
+  close(random_fd);
   return 0;
 }
index a3b3831..97c785a 100644 (file)
 
 #include "core/os_core.h"
 
-
 /**
- * Get some random data
- * @param dst pointer to destination buffer
- * @param length number of random bytes requested
- * @return 0 if the random data was generated, -1 if an error happened
+ * Create a lock file of a certain name
+ * @param path name of lockfile including path
+ * @return 0 if the lock was created successfully, false otherwise
  */
 int
-os_core_get_random(void *dst, size_t length) {
-  int random_fd;
-  ssize_t result;
-  uint8_t *u8ptr;
-
-  u8ptr = dst;
+os_core_create_lockfile(const char *path) {
+  int lock_fd;
 
-  /* open urandom */
-  random_fd = open("/dev/urandom", O_RDONLY);
-  if (random_fd == -1) {
+  /* create file for lock */
+  lock_fd = open(path, O_RDWR | O_CREAT, S_IRWXU);
+  if (lock_fd == -1) {
     return -1;
   }
 
-  while (length > 0) {
-    result = read(random_fd, u8ptr, length);
-    if (result < 0) {
-      close (random_fd);
-      return -1;
-    }
-
-    u8ptr += result;
-    length -= result;
+  if (flock(lock_fd, LOCK_EX | LOCK_NB)) {
+    close(lock_fd);
+    return -1;
   }
+
+  /* lock will be released when process ends */
   return 0;
 }