Skip to content
  • Konstantin Belousov's avatar
    Consistently handle negative or wrapping offsets in the mmap(2) syscalls. · 987ff181
    Konstantin Belousov authored
    For regular files and posix shared memory, POSIX requires that
    [offset, offset + size) range is legitimate.  At the maping time,
    check that offset is not negative.  Allowing negative offsets might
    expose the data that filesystem put into vm_object for internal use,
    esp. due to OFF_TO_IDX() signess treatment.  Fault handler verifies
    that the mapped range is valid, assuming that mmap(2) checked that
    arithmetic gives no undefined results.
    
    For device mappings, leave the semantic of negative offsets to the
    driver.  Correct object page index calculation to not erronously
    propagate sign.
    
    In either case, disallow overflow of offset + size.
    
    Update mmap(2) man page to explain the requirement of the range
    validity, and behaviour when the range becomes invalid after mapping.
    
    Reported and tested by:	royger (previous version)
    Reviewed by:	alc
    Sponsored by:	The FreeBSD Foundation
    MFC after:	2 weeks
    987ff181