fix write, free mem
Stefan Schuermans

Stefan Schuermans commited on 2026-02-15 15:36:45
Showing 3 changed files, with 22 additions and 2 deletions.

... ...
@@ -15,4 +15,5 @@ __attribute__((constructor)) static void constructor(void) {
15 15
   size_t size = 0;
16 16
   uptev_proc_begin(&data, &size);
17 17
   uptpl_write(data, size);
18
+  free(data);
18 19
 }
... ...
@@ -15,4 +15,5 @@ __attribute__((destructor)) static void destructor(void) {
15 15
   size_t size = 0;
16 16
   uptev_proc_end(&data, &size);
17 17
   uptpl_write(data, size);
18
+  free(data);
18 19
 }
... ...
@@ -13,6 +13,23 @@
13 13
 #include <sys/file.h>
14 14
 #include <unistd.h>
15 15
 
16
+static ssize_t write_all(int fd, const void *buf, size_t n) {
17
+  ssize_t written = 0;
18
+  while (n > 0) {
19
+    ssize_t wr = write(fd, buf, n);
20
+    if (wr < 0) {
21
+      return wr;
22
+    }
23
+    if (wr == 0) {
24
+      return written;
25
+    }
26
+    written += wr;
27
+    buf = (const uint8_t *)buf + wr;
28
+    n -= wr;
29
+  }
30
+  return written;
31
+}
32
+
16 33
 struct uptpl_event_header_s {
17 34
   uint8_t magic[4]; /**< u p t 0 */
18 35
   uint8_t size[4];  /**< size of payload in network byte oder */
... ...
@@ -42,8 +59,9 @@ void uptpl_write(void const *data, size_t size) {
42 59
           (size >> 8) & 0xFF,
43 60
           size & 0xFF,
44 61
       }};
45
-  ssize_t written = write(fd, &uptpl_event_header, sizeof(uptpl_event_header));
46
-  written += write(fd, data, size);
62
+  ssize_t written =
63
+      write_all(fd, &uptpl_event_header, sizeof(uptpl_event_header));
64
+  written += write_all(fd, data, size);
47 65
   (void)written; /* if writing failed, nobody there to receive the error */
48 66
   flock(fd, LOCK_UN);
49 67
   close(fd);
50 68