]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
valgrind: temporarily handle that valgrind still doesn't know LOOP_GET_STATUS64 14219/head
authorLennart Poettering <lennart@poettering.net>
Mon, 11 Nov 2019 16:57:45 +0000 (17:57 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 2 Dec 2019 09:06:56 +0000 (10:06 +0100)
Should be removed once valgrind learns it.

src/shared/dissect-image.c
src/shared/loop-util.c

index 934e0fe830ffb899691051e4bec99c5c5df7a717..11d21c3a4d1b900af3883edf2e28034590a5521e 100644 (file)
@@ -1,5 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 
+#if HAVE_VALGRIND_MEMCHECK_H
+#include <valgrind/memcheck.h>
+#endif
+
 #include <linux/dm-ioctl.h>
 #include <linux/loop.h>
 #include <sys/mount.h>
@@ -215,9 +219,15 @@ static int wait_for_partitions_to_appear(
                          * an explicit recognizable error about this, so that callers can generate a
                          * proper message explaining the situation. */
 
-                        if (ioctl(fd, LOOP_GET_STATUS64, &info) >= 0 && (info.lo_flags & LO_FLAGS_PARTSCAN) == 0) {
-                                log_debug("Device is a loop device and partition scanning is off!");
-                                return -EPROTONOSUPPORT;
+                        if (ioctl(fd, LOOP_GET_STATUS64, &info) >= 0) {
+#if HAVE_VALGRIND_MEMCHECK_H
+                                /* Valgrind currently doesn't know LOOP_GET_STATUS64. Remove this once it does */
+                                VALGRIND_MAKE_MEM_DEFINED(&info, sizeof(info));
+#endif
+
+                                if ((info.lo_flags & LO_FLAGS_PARTSCAN) == 0)
+                                        return log_debug_errno(EPROTONOSUPPORT,
+                                                               "Device is a loop device and partition scanning is off!");
                         }
                 }
                 if (r != -EBUSY)
index bbb85f9e6e0e78a97814d2a43a9bfdaf9abcbe0c..acf3eae2d72cfbc40d7a3360b30ae00908234e5a 100644 (file)
@@ -1,5 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 
+#if HAVE_VALGRIND_MEMCHECK_H
+#include <valgrind/memcheck.h>
+#endif
+
 #include <errno.h>
 #include <fcntl.h>
 #include <linux/blkpg.h>
@@ -42,6 +46,11 @@ int loop_device_make_full(
         if (S_ISBLK(st.st_mode)) {
                 if (ioctl(loop, LOOP_GET_STATUS64, &info) >= 0) {
                         /* Oh! This is a loopback device? That's interesting! */
+
+#if HAVE_VALGRIND_MEMCHECK_H
+                        /* Valgrind currently doesn't know LOOP_GET_STATUS64. Remove this once it does */
+                        VALGRIND_MAKE_MEM_DEFINED(&info, sizeof(info));
+#endif
                         nr = info.lo_number;
 
                         if (asprintf(&loopdev, "/dev/loop%i", nr) < 0)
@@ -217,9 +226,13 @@ int loop_device_open(const char *loop_path, int open_flags, LoopDevice **ret) {
         if (!S_ISBLK(st.st_mode))
                 return -ENOTBLK;
 
-        if (ioctl(loop_fd, LOOP_GET_STATUS64, &info) >= 0)
+        if (ioctl(loop_fd, LOOP_GET_STATUS64, &info) >= 0) {
+#if HAVE_VALGRIND_MEMCHECK_H
+                /* Valgrind currently doesn't know LOOP_GET_STATUS64. Remove this once it does */
+                VALGRIND_MAKE_MEM_DEFINED(&info, sizeof(info));
+#endif
                 nr = info.lo_number;
-        else
+        else
                 nr = -1;
 
         p = strdup(loop_path);
@@ -347,6 +360,11 @@ int loop_device_refresh_size(LoopDevice *d, uint64_t offset, uint64_t size) {
         if (ioctl(d->fd, LOOP_GET_STATUS64, &info) < 0)
                 return -errno;
 
+#if HAVE_VALGRIND_MEMCHECK_H
+        /* Valgrind currently doesn't know LOOP_GET_STATUS64. Remove this once it does */
+        VALGRIND_MAKE_MEM_DEFINED(&info, sizeof(info));
+#endif
+
         if (size == UINT64_MAX && offset == UINT64_MAX)
                 return 0;
         if (info.lo_sizelimit == size && info.lo_offset == offset)