summaryrefslogtreecommitdiffstats
path: root/debian/patches/upstream/libblkid-topology-ioctl-correctly-handle-kernel-types.patch
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-14 19:23:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-14 19:23:41 +0000
commit233be6e0bb85cd0320c198938f10c3443ca6d6c4 (patch)
treec8783175262d293c10e6eeba46a816ed310f9460 /debian/patches/upstream/libblkid-topology-ioctl-correctly-handle-kernel-types.patch
parentMerging upstream version 2.40.1. (diff)
downloadutil-linux-233be6e0bb85cd0320c198938f10c3443ca6d6c4.tar.xz
util-linux-233be6e0bb85cd0320c198938f10c3443ca6d6c4.zip
Merging debian version 2.40.1-1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/patches/upstream/libblkid-topology-ioctl-correctly-handle-kernel-types.patch')
-rw-r--r--debian/patches/upstream/libblkid-topology-ioctl-correctly-handle-kernel-types.patch89
1 files changed, 0 insertions, 89 deletions
diff --git a/debian/patches/upstream/libblkid-topology-ioctl-correctly-handle-kernel-types.patch b/debian/patches/upstream/libblkid-topology-ioctl-correctly-handle-kernel-types.patch
deleted file mode 100644
index 8f28f7f..0000000
--- a/debian/patches/upstream/libblkid-topology-ioctl-correctly-handle-kernel-types.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= <thomas@t-8ch.de>
-Date: Tue, 2 Apr 2024 18:55:29 +0200
-Subject: libblkid: topology/ioctl: correctly handle kernel types
-MIME-Version: 1.0
-Content-Type: text/plain; charset="utf-8"
-Content-Transfer-Encoding: 8bit
-
-Commit 5d71d711d07a ("libblkid: topolicy/ioctl: use union for multiple data types")
-incorrectly assumed that set_ulong and set_int refer to the type
-returned by the kernel. Instead the different function pointer names
-refer to the types of the function pointers.
-However all ioctls, except for the later added BLKGETDISKSEQ, return
-32bit integers.
-This made libblkid also interpret the upper 32bits too, leading to
-garbage values.
-
-Introduce a new member 'kernel_size' to also handle the 64bit
-BLKGETDISKSEQ.
-
-Drop data.ul as it is no actually used.
-
-Closes #2904
-Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
-(cherry picked from commit a10081a52c48a5232db30d8e0a7a7570cc8163ae)
----
- libblkid/src/topology/ioctl.c | 29 +++++++++++++++++++----------
- 1 file changed, 19 insertions(+), 10 deletions(-)
-
-diff --git a/libblkid/src/topology/ioctl.c b/libblkid/src/topology/ioctl.c
-index 3560a2f..4be20e8 100644
---- a/libblkid/src/topology/ioctl.c
-+++ b/libblkid/src/topology/ioctl.c
-@@ -24,6 +24,7 @@
- static const struct topology_val {
-
- long ioc;
-+ size_t kernel_size;
-
- /* functions to set probing result */
- int (*set_ulong)(blkid_probe, unsigned long);
-@@ -31,11 +32,16 @@ static const struct topology_val {
- int (*set_u64)(blkid_probe, uint64_t);
-
- } topology_vals[] = {
-- { BLKALIGNOFF, NULL, blkid_topology_set_alignment_offset },
-- { BLKIOMIN, blkid_topology_set_minimum_io_size },
-- { BLKIOOPT, blkid_topology_set_optimal_io_size },
-- { BLKPBSZGET, blkid_topology_set_physical_sector_size },
-- { BLKGETDISKSEQ, .set_u64 = blkid_topology_set_diskseq },
-+ { 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 */
- };
-
-@@ -48,18 +54,21 @@ static int probe_ioctl_tp(blkid_probe pr,
- const struct topology_val *val = &topology_vals[i];
- int rc = 1;
- union {
-- unsigned long ul;
-- int i;
-+ int s32;
- uint64_t u64;
-- } data;
-+ } 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.i);
-+ rc = val->set_int(pr, data.u64);
- else if (val->set_ulong)
-- rc = val->set_ulong(pr, data.ul);
-+ rc = val->set_ulong(pr, data.u64);
- else
- rc = val->set_u64(pr, data.u64);
-