Skip to content

Commit 8efb4b5

Browse files
committed
Assert in HoleList::new that the space is large enough to store a Hole
Ensures that no out of bounds write happens when the given hole size is to small, or becomes too small after alignment.
1 parent c6956c6 commit 8efb4b5

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/hole.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,22 @@ impl HoleList {
329329
/// The pointer to `hole_addr` is automatically aligned.
330330
pub unsafe fn new(hole_addr: *mut u8, hole_size: usize) -> HoleList {
331331
assert_eq!(size_of::<Hole>(), Self::min_size());
332+
assert!(hole_size >= size_of::<Hole>());
332333

333334
let aligned_hole_addr = align_up(hole_addr, align_of::<Hole>());
335+
let aligned_hole_size = hole_size - ((aligned_hole_addr as usize) - (hole_addr as usize));
336+
assert!(aligned_hole_size >= size_of::<Hole>());
337+
334338
let ptr = aligned_hole_addr as *mut Hole;
335339
ptr.write(Hole {
336-
size: hole_size - ((aligned_hole_addr as usize) - (hole_addr as usize)),
340+
size: aligned_hole_size,
337341
next: None,
338342
});
339343

344+
assert_eq!(
345+
hole_addr.wrapping_add(hole_size),
346+
aligned_hole_addr.wrapping_add(aligned_hole_size)
347+
);
340348
HoleList {
341349
first: Hole {
342350
size: 0,

0 commit comments

Comments
 (0)