• Gordon Jin's avatar
    [PATCH] Fix mincore cornercases: overflow caused by large "len" · dad361f2
    Gordon Jin authored
    This patch fixes 2 cornercases of overflow caused by argument len in
    sys_mincore():
    
    Case 1: len is so large that will overflow to 0 after page alignment.
    E.g. len=(size_t)(-1), i.e. 0xff...ff.
    Expected result: it's overflow and return ENOMEM.
    Current result: len is aligned to 0, then treated the same as len=0 and
    return succeed.
    This cornercase has been fixed in do_mmap_pgoff(), and here
    sys_mincore() also needs this fix.
    
    Case 2: len is a large number but will not overflow after alignment. But
    start+len will overflow.
    E.g. len=(size_t)(-PAGE_SIZE), and start>0.
    Expected result: it's overflow and return ENOMEM.
    Current result: return EINVAL. Looks like considering len as a
    non-positive value, probably influenced by manpage. But since the type
    of len is size_t, i.e. unsigned, it shouldn't be considered as
    non-positive value.
    I've also reported this inconsistency to manpage mincore.
    Signed-off-by: default avatarGordon Jin <gordon.jin@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    dad361f2
mincore.c 4.43 KB