summaryrefslogtreecommitdiffstats
path: root/debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-26 17:41:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-26 17:41:48 +0000
commit44ad8616fc71dc577a8a09be7cd05a034606feeb (patch)
tree2b6e157c29d7eae810d06ee00dd3169de654ef39 /debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch
parentReleasing progress-linux version 2.40-6~progress7.99u1. (diff)
downloadutil-linux-44ad8616fc71dc577a8a09be7cd05a034606feeb.tar.xz
util-linux-44ad8616fc71dc577a8a09be7cd05a034606feeb.zip
Merging debian version 2.40-7.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch')
-rw-r--r--debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch117
1 files changed, 117 insertions, 0 deletions
diff --git a/debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch b/debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch
new file mode 100644
index 0000000..7dac8b2
--- /dev/null
+++ b/debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch
@@ -0,0 +1,117 @@
+From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= <thomas@t-8ch.de>
+Date: Thu, 4 Apr 2024 07:24:58 +0200
+Subject: libblkid: topology/ioctl: simplify ioctl handling
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Coverity complains about the data copy within the union.
+Instead unroll the loop which is less code and easier to follow.
+
+Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
+(cherry picked from commit 2ab95860db0b7423906911b8b9e9f231332c2c11)
+---
+ libblkid/src/topology/ioctl.c | 85 ++++++++++++++-----------------------------
+ 1 file changed, 27 insertions(+), 58 deletions(-)
+
+diff --git a/libblkid/src/topology/ioctl.c b/libblkid/src/topology/ioctl.c
+index 4be20e8..7b15c9e 100644
+--- a/libblkid/src/topology/ioctl.c
++++ b/libblkid/src/topology/ioctl.c
+@@ -18,69 +18,38 @@
+
+ #include "topology.h"
+
+-/*
+- * ioctl topology values
+- */
+-static const struct topology_val {
+-
+- long ioc;
+- size_t kernel_size;
+-
+- /* functions to set probing result */
+- int (*set_ulong)(blkid_probe, unsigned long);
+- int (*set_int)(blkid_probe, int);
+- int (*set_u64)(blkid_probe, uint64_t);
+-
+-} topology_vals[] = {
+- { BLKALIGNOFF, sizeof(int),
+- .set_int = blkid_topology_set_alignment_offset },
+- { BLKIOMIN, sizeof(int),
+- .set_ulong = blkid_topology_set_minimum_io_size },
+- { BLKIOOPT, sizeof(int),
+- .set_ulong = blkid_topology_set_optimal_io_size },
+- { BLKPBSZGET, sizeof(int),
+- .set_ulong = blkid_topology_set_physical_sector_size },
+- { BLKGETDISKSEQ, sizeof(uint64_t),
+- .set_u64 = blkid_topology_set_diskseq },
+- /* we read BLKSSZGET in topology.c */
+-};
+-
+ static int probe_ioctl_tp(blkid_probe pr,
+ const struct blkid_idmag *mag __attribute__((__unused__)))
+ {
+- size_t i;
+-
+- for (i = 0; i < ARRAY_SIZE(topology_vals); i++) {
+- const struct topology_val *val = &topology_vals[i];
+- int rc = 1;
+- union {
+- int s32;
+- uint64_t u64;
+- } data = { 0 };
+-
+- if (ioctl(pr->fd, val->ioc, &data) == -1)
+- goto nothing;
+-
+- /* Convert from kernel to libblkid type */
+- if (val->kernel_size == 4)
+- data.u64 = data.s32;
+-
+- if (val->set_int)
+- rc = val->set_int(pr, data.u64);
+- else if (val->set_ulong)
+- rc = val->set_ulong(pr, data.u64);
+- else
+- rc = val->set_u64(pr, data.u64);
+-
+- if (rc)
+- goto err;
+- }
++ uint64_t u64;
++ int s32;
++
++ if (ioctl(pr->fd, BLKALIGNOFF, &s32) == -1)
++ return 1;
++ if (blkid_topology_set_alignment_offset(pr, s32))
++ return -1;
++
++ if (ioctl(pr->fd, BLKIOMIN, &s32) == -1)
++ return 1;
++ if (blkid_topology_set_minimum_io_size(pr, s32))
++ return -1;
++
++ if (ioctl(pr->fd, BLKIOOPT, &s32) == -1)
++ return 1;
++ if (blkid_topology_set_optimal_io_size(pr, s32))
++ return -1;
++
++ if (ioctl(pr->fd, BLKPBSZGET, &s32) == -1)
++ return 1;
++ if (blkid_topology_set_physical_sector_size(pr, s32))
++ return -1;
++
++ if (ioctl(pr->fd, BLKGETDISKSEQ, &u64) == -1)
++ return 1;
++ if (blkid_topology_set_physical_sector_size(pr, u64))
++ return -1;
+
+ return 0;
+-nothing:
+- return 1;
+-err:
+- return -1;
+ }
+
+ const struct blkid_idinfo ioctl_tp_idinfo =