Skip to content

Commit 0c51581

Browse files
committed
avoid type confusion on interval tree root node when creating snapshot
1 parent de3e3f1 commit 0c51581

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

linux-user/syscall.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13673,15 +13673,20 @@ struct libafl_mapinfo {
1367313673
int flags, is_priv;
1367413674
};
1367513675
IntervalTreeNode * libafl_maps_first(IntervalTreeRoot * map_info);
13676-
IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret);
13676+
IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret, bool is_root);
1367713677

1367813678
IntervalTreeNode * libafl_maps_first(IntervalTreeRoot * map_info) {
1367913679
return interval_tree_iter_first(map_info, 0, -1);
1368013680
}
1368113681

13682-
IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret) {
13682+
IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret, bool is_root) {
1368313683
if (!node || !ret)
1368413684
return NULL;
13685+
13686+
if (is_root) {
13687+
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret, false);
13688+
}
13689+
1368513690
MapInfo *e = container_of(node, MapInfo, itree);
1368613691

1368713692
if (h2g_valid(e->itree.start)) {
@@ -13693,7 +13698,7 @@ IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinf
1369313698
max : (uintptr_t) g2h_untagged(GUEST_ADDR_MAX) + 1;
1369413699

1369513700
if (!page_check_range(h2g(min), max - min, flags)) {
13696-
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret);
13701+
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret, false);
1369713702
}
1369813703

1369913704
int libafl_flags = 0;
@@ -13710,7 +13715,7 @@ IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinf
1371013715

1371113716
return interval_tree_iter_next(node, 0, -1);
1371213717
} else {
13713-
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret);
13718+
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret, false);
1371413719
}
1371513720
}
1371613721

0 commit comments

Comments
 (0)