summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2019-09-22 17:01:18 +0200
committerMichael Olbrich <m.olbrich@pengutronix.de>2019-09-22 17:28:12 +0200
commiteb6b3771eb47bfa1fa02c0c45523af9b1061125b (patch)
tree1f41f9f446924debdbb1fd4bd36c2d4fe893148c
parent4fcd0bfd141f0f371cf5a1c4ab580234e6bd6ba7 (diff)
downloadgenimage-eb6b3771eb47bfa1fa02c0c45523af9b1061125b.tar.gz
genimage-eb6b3771eb47bfa1fa02c0c45523af9b1061125b.tar.xz
map_file_extents: avoid theoretical race condition
The second FS_IOC_FIEMAP call might result in a different number for fm_mapped_extents if the file changed. So just use the size we allocated. Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
-rw-r--r--util.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/util.c b/util.c
index 709d427..874cc3d 100644
--- a/util.c
+++ b/util.c
@@ -363,8 +363,8 @@ static int map_file_extents(struct image *image, const char *filename, int f,
goto err_out;
/* Build extent array */
- *extent_count = fiemap->fm_mapped_extents;
- *extents = xzalloc(fiemap->fm_mapped_extents * sizeof(struct extent));
+ *extent_count = fiemap->fm_extent_count;
+ *extents = xzalloc(*extent_count * sizeof(struct extent));
for (i = 0; i < fiemap->fm_mapped_extents; i++) {
(*extents)[i].start = fiemap->fm_extents[i].fe_logical;
(*extents)[i].end = fiemap->fm_extents[i].fe_logical + fiemap->fm_extents[i].fe_length;