lkml.org 
[lkml]   [2013]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 096/212] PM / hibernate: Avoid overflow in hibernate_preallocate_memory()
    Date
    3.12-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Aaron Lu <aaron.lu@intel.com>

    commit fd432b9f8c7c88428a4635b9f5a9c6e174df6e36 upstream.

    When system has a lot of highmem (e.g. 16GiB using a 32 bits kernel),
    the code to calculate how much memory we need to preallocate in
    normal zone may cause overflow. As Leon has analysed:

    It looks that during computing 'alloc' variable there is overflow:
    alloc = (3943404 - 1970542) - 1978280 = -5418 (signed)
    And this function goes to err_out.

    Fix this by avoiding that overflow.

    References: https://bugzilla.kernel.org/show_bug.cgi?id=60817
    Reported-and-tested-by: Leon Drugi <eyak@wp.pl>
    Signed-off-by: Aaron Lu <aaron.lu@intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    kernel/power/snapshot.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    --- a/kernel/power/snapshot.c
    +++ b/kernel/power/snapshot.c
    @@ -1402,7 +1402,11 @@ int hibernate_preallocate_memory(void)
    * highmem and non-highmem zones separately.
    */
    pages_highmem = preallocate_image_highmem(highmem / 2);
    - alloc = (count - max_size) - pages_highmem;
    + alloc = count - max_size;
    + if (alloc > pages_highmem)
    + alloc -= pages_highmem;
    + else
    + alloc = 0;
    pages = preallocate_image_memory(alloc, avail_normal);
    if (pages < alloc) {
    /* We have exhausted non-highmem pages, try highmem. */



    \
     
     \ /
      Last update: 2013-12-03 07:41    [W:2.638 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site