From 1597517c9effc275b8b89c8722c808777c17173f Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Tue, 3 Mar 2009 20:11:09 +0100 Subject: [PATCH] volume_id: ntfs - fix uuid setting In my scenario, the ntfs prober did *not* detect the presence of a ntfs filesystem (i.e. vol_id --probe-all returned *only* ext3). However, if you examine the source of the ntfs prober, it overwrites the uuid field of the volume_id object long before it actually decides there's a valid filesystem there - this resulted in vol_id returning the rather bizarre combination of type=ext3, but a uuid populated by the ntfs prober. https://bugs.edge.launchpad.net/ubuntu/+source/udev/+bug/337015 --- configure.ac | 2 +- extras/volume_id/lib/ntfs.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index e916cfca9f..5b2d920721 100644 --- a/configure.ac +++ b/configure.ac @@ -24,7 +24,7 @@ AC_SUBST(LIBUDEV_LT_AGE) dnl /* libvolume_id version */ VOLID_LT_CURRENT=1 -VOLID_LT_REVISION=9 +VOLID_LT_REVISION=10 VOLID_LT_AGE=0 AC_SUBST(VOLID_LT_CURRENT) AC_SUBST(VOLID_LT_REVISION) diff --git a/extras/volume_id/lib/ntfs.c b/extras/volume_id/lib/ntfs.c index b322c77dbd..f727634094 100644 --- a/extras/volume_id/lib/ntfs.c +++ b/extras/volume_id/lib/ntfs.c @@ -97,6 +97,7 @@ static struct volume_info { int volume_id_probe_ntfs(struct volume_id *id, uint64_t off, uint64_t size) { + uint8_t volume_serial[8]; unsigned int sector_size; unsigned int cluster_size; uint64_t mft_cluster; @@ -119,7 +120,7 @@ int volume_id_probe_ntfs(struct volume_id *id, uint64_t off, uint64_t size) if (memcmp(ns->oem_id, "NTFS", 4) != 0) return -1; - volume_id_set_uuid(id, ns->volume_serial, 0, UUID_64BIT_LE); + memcpy(volume_serial, ns->volume_serial, sizeof(volume_serial)); sector_size = le16_to_cpu(ns->bytes_per_sector); if (sector_size < 0x200) @@ -193,6 +194,7 @@ int volume_id_probe_ntfs(struct volume_id *id, uint64_t off, uint64_t size) } } + volume_id_set_uuid(id, volume_serial, 0, UUID_64BIT_LE); volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); id->type = "ntfs"; /* we think this is ntfs, but we make sure no other signatures are found */