• Frantisek Hrbata's avatar
    oom: fix integer overflow of points in oom_badness · ff05b6f7
    Frantisek Hrbata authored
    An integer overflow will happen on 64bit archs if task's sum of rss,
    swapents and nr_ptes exceeds (2^31)/1000 value.  This was introduced by
    commit
    
    f755a042 oom: use pte pages in OOM score
    
    where the oom score computation was divided into several steps and it's no
    longer computed as one expression in unsigned long(rss, swapents, nr_pte
    are unsigned long), where the result value assigned to points(int) is in
    range(1..1000).  So there could be an int overflow while computing
    
    176          points *= 1000;
    
    and points may have negative value. Meaning the oom score for a mem hog task
    will be one.
    
    196          if (points <= 0)
    197                  return 1;
    
    For example:
    [ 3366]     0  3366 35390480 24303939   5       0             0 oom01
    Out of memory: Kill process 3366 (oom01) score 1 or sacrifice child
    
    Here the oom1 process consumes more than 24303939(rss)*4096~=92GB physical
    memory, but it's oom score is one.
    
    In this situation the mem hog task is skippe...
    ff05b6f7
oom_kill.c 22.1 KB