From 44ad8616fc71dc577a8a09be7cd05a034606feeb Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 26 Apr 2024 19:41:48 +0200 Subject: Merging debian version 2.40-7. Signed-off-by: Daniel Baumann --- ...id-topology-ioctl-simplify-ioctl-handling.patch | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch (limited to 'debian/patches/upstream/libblkid-topology-ioctl-simplify-ioctl-handling.patch') 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?= +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 +(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 = -- cgit v1.2.3