avoid type confusion on interval tree root node when creating snapshot

This commit is contained in:
cube 2024-02-05 10:51:03 +01:00
parent de3e3f15ee
commit 0c51581329

View File

@ -13673,15 +13673,20 @@ struct libafl_mapinfo {
int flags, is_priv; int flags, is_priv;
}; };
IntervalTreeNode * libafl_maps_first(IntervalTreeRoot * map_info); IntervalTreeNode * libafl_maps_first(IntervalTreeRoot * map_info);
IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret); IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret, bool is_root);
IntervalTreeNode * libafl_maps_first(IntervalTreeRoot * map_info) { IntervalTreeNode * libafl_maps_first(IntervalTreeRoot * map_info) {
return interval_tree_iter_first(map_info, 0, -1); return interval_tree_iter_first(map_info, 0, -1);
} }
IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret) { IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinfo* ret, bool is_root) {
if (!node || !ret) if (!node || !ret)
return NULL; return NULL;
if (is_root) {
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret, false);
}
MapInfo *e = container_of(node, MapInfo, itree); MapInfo *e = container_of(node, MapInfo, itree);
if (h2g_valid(e->itree.start)) { if (h2g_valid(e->itree.start)) {
@ -13693,7 +13698,7 @@ IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinf
max : (uintptr_t) g2h_untagged(GUEST_ADDR_MAX) + 1; max : (uintptr_t) g2h_untagged(GUEST_ADDR_MAX) + 1;
if (!page_check_range(h2g(min), max - min, flags)) { if (!page_check_range(h2g(min), max - min, flags)) {
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret); return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret, false);
} }
int libafl_flags = 0; int libafl_flags = 0;
@ -13710,7 +13715,7 @@ IntervalTreeNode * libafl_maps_next(IntervalTreeNode *node, struct libafl_mapinf
return interval_tree_iter_next(node, 0, -1); return interval_tree_iter_next(node, 0, -1);
} else { } else {
return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret); return libafl_maps_next(interval_tree_iter_next(node, 0, -1), ret, false);
} }
} }