Hi Lorenzo, On Tue, Aug 05, 2025 at 06:31:56PM +0100, Lorenzo Stoakes wrote: > 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_address + old_size) may span any number of mappings. > > If shrinking in-place (that is, neither the MREMAP_FIXED nor > MREMAP_DONTUNMAP flags are specified), then the new span may also span any > number of VMAs - [old_address, old_address + new_size). > > If shrinking and moving, the range specified by [old_address, old_address + > new_size) must span a single VMA. > > There must be at least one VMA contained within the [old_address, > old_address + old_size) range, and old_address must be within the range of > a VMA. > > Explicitly document this. > > Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> Since this is documenting old behavior, could we have this patch before the patch documenting new behavior? Or do you prefer it in this order? Cheers, Alex > --- > man/man2/mremap.2 | 31 +++++++++++++++++++++++++++++-- > 1 file changed, 29 insertions(+), 2 deletions(-) > > diff --git a/man/man2/mremap.2 b/man/man2/mremap.2 > index 6ba51310c..631c835b8 100644 > --- a/man/man2/mremap.2 > +++ b/man/man2/mremap.2 > @@ -48,8 +48,35 @@ 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. > +If this shrink is performed > +in-place, > +that is, > +neither > +.BR MREMAP_FIXED , > +nor > +.B MREMAP_DONTUNMAP > +are specified, > +.I new_size > +may also span multiple VMAs. > +However, if the range is moved, > +then > +.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 > -- <https://www.alejandro-colomar.es/>
Attachment:
signature.asc
Description: PGP signature