On Sat, Aug 09, 2025 at 04:33:12PM +0200, Alejandro Colomar wrote: > 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? I think it's fine in this order, it's more convenient for me as it'd be a pain to re-order otherwise, and we've waited ~20 years (or longer?) to document this so a delay in ordering is probably fine :P Cheers, Lorenzo > > > 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/>