summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYousong Zhou <yszhou4tech@gmail.com>2019-10-25 10:48:47 +0000
committerJohn Crispin <john@phrozen.org>2019-10-27 12:24:26 +0100
commitd05276dc1d6de119da518d62930b9a8ef55ef7e9 (patch)
tree33ba20295981d3586b6d212fc2ed141ba9728576
parent4327ed40d96c95803b2d4d09ddf997c895eea071 (diff)
downloadfstools-d05276dc1d6de119da518d62930b9a8ef55ef7e9.tar.gz
libblkid-tiny: ntfs: fix use-after-free
The memory pointed to by ns can be reallocated when checking mft records Fixes FS#2129 Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
-rw-r--r--libblkid-tiny/ntfs.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/libblkid-tiny/ntfs.c b/libblkid-tiny/ntfs.c
index 3a9d5cb..2426e70 100644
--- a/libblkid-tiny/ntfs.c
+++ b/libblkid-tiny/ntfs.c
@@ -86,6 +86,7 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag)
uint32_t sectors_per_cluster, mft_record_size;
uint16_t sector_size;
+ uint64_t volume_serial;
uint64_t nr_clusters, off, attr_off;
unsigned char *buf_mft;
@@ -146,15 +147,16 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag)
return 1;
+ volume_serial = ns->volume_serial;
off = le64_to_cpu(ns->mft_cluster_location) * sector_size *
sectors_per_cluster;
DBG(LOWPROBE, ul_debug("NTFS: sector_size=%"PRIu16", mft_record_size=%"PRIu32", "
"sectors_per_cluster=%"PRIu32", nr_clusters=%"PRIu64" "
- "cluster_offset=%"PRIu64"",
+ "cluster_offset=%"PRIu64", volume_serial=%"PRIu64"",
sector_size, mft_record_size,
sectors_per_cluster, nr_clusters,
- off));
+ off, volume_serial));
buf_mft = blkid_probe_get_buffer(pr, off, mft_record_size);
if (!buf_mft)
@@ -203,9 +205,9 @@ static int probe_ntfs(blkid_probe pr, const struct blkid_idmag *mag)
}
blkid_probe_sprintf_uuid(pr,
- (unsigned char *) &ns->volume_serial,
- sizeof(ns->volume_serial),
- "%016" PRIX64, le64_to_cpu(ns->volume_serial));
+ (unsigned char *) &volume_serial,
+ sizeof(volume_serial),
+ "%016" PRIX64, le64_to_cpu(volume_serial));
return 0;
}