There is pre-existing logic that appears to be undocumented for an mremap() shrink operation, where it turns out that the usual 'input range must span a single mapping' requirement no longer applies. In fact, it turns out that the input range specified by [old_address, old_size) may span any number of mappings, as long old_address resides at or within a mapping and [old_address, new_size) spans only a single mapping. Explicitly document this. Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> --- man/man2/mremap.2 | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/man/man2/mremap.2 b/man/man2/mremap.2 index 6ba51310c..bbd807f1b 100644 --- a/man/man2/mremap.2 +++ b/man/man2/mremap.2 @@ -48,8 +48,24 @@ The .B MREMAP_DONTUNMAP flag may be specified. .P -If the operation is not -simply moving mappings, +Equally, if the operation performs a shrink, +that is if +.I old_size +is greater than +.IR new_size , +then +.I old_size +may also span multiple mappings +which do not have to be +adjacent to one another. +However in this case, +.I new_size +must span only a single mapping. +.P +If the operation is neither a +.B MREMAP_FIXED +move +nor a shrink, then .I old_size must span only a single mapping. -- 2.50.1