Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2266692imm; Mon, 28 May 2018 05:05:20 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoZ+3EfG/0Z5+HYjLUn4zmvwqZoJyOdKy7+1Z7gH9eoucMSavsrWAy6G5sFPR94vyOjOZhl X-Received: by 2002:a65:608c:: with SMTP id t12-v6mr10105555pgu.182.1527509120247; Mon, 28 May 2018 05:05:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527509120; cv=none; d=google.com; s=arc-20160816; b=YMskoZnck2hvR47WzcdZy9oFehFQxAbquX0zTr4AGj7V2R+jLZvaGf1X8yns+iIT1Q vrMR++y089qwb+tQiJiaz9x+WA/l+tLurP9Cv+QbSG0pfAfsYIV6jqKy0m5iP1HspC5k 9+o+qBpavF/WOBFNyy9yWMZAUd38n8zT3zGlzSFxyuDGCI0f6QiZM1/ujPQw3RFABQrP 8Hrcbug41lUOUk/8sK/4PmJZzJV4ybtyPzjYhNqgy6drV0uztGTQTTTmNGrLR3iG2tpM tzsR7jqZ+kSg6dRHXzekkGwbTwioaI+xWqGkevv7O9LFmSQ35fDjX0/v96yQ0prqhXs+ RXxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=upQm8hpfOr+GfcHDq3OAln6aq4foYIMccHVLZungmEg=; b=wyzztUqa1cmjPMZ/O+eHfuDd1nLxxw3sJxUY6XbkRji80VsMgofBZ+JOAo2kHbmhCR ouRQ5zta+BqN08myz+Ds6DiaBl93aMy9shxU/rDueMJvgmf+uivt0B2zd9hYrhmeN4TC UXwFJkQ4sz2UzCJR9o5dgxhjzDT0riWhKusFLrZjrSiKfnek4U4MXSHi4bWY5hnW/3jI Az6CLcfZp17T8tJ35oJC/DYUArEFuGKP87VTuf3wGZN4qJ0bQ63r2OZXbUUaMN8qTwJ9 9t+xbHEKp854/wLZErpWfnCVkNF5g1MkJZ/ChCQihotPiGtdxkyz34Pa/J7SyMplynaA srLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2Ire1auc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o10-v6si678115pgp.153.2018.05.28.05.05.05; Mon, 28 May 2018 05:05:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2Ire1auc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S938510AbeE1MEK (ORCPT + 99 others); Mon, 28 May 2018 08:04:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:53272 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423236AbeE1LGY (ORCPT ); Mon, 28 May 2018 07:06:24 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8CDDB208A4; Mon, 28 May 2018 11:06:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527505584; bh=mPQBTY9UTJhdDxlkPS7spbjSwpwIpMJ6b+701Wf2YWY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2Ire1aucAd6zDEyTKApRPdOjaX1fxU2J1jPv5lx7gqundJcuv0w7IVLJCGNgg5ox1 g73P7wsG2Hw/mtTtBN0ESYfw1+9P75jN+2T/7NAUNX3GRmMTnis4nXAWTThFQ9+Pi2 LcfMRPAUc/e+pb7nHIrnER77jQ7YWTkgBLgO61Xw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thomas Abraham , Mark.Landis@Teradata.com, Andrew Morton , Randy Dunlap , Linus Torvalds , Sasha Levin Subject: [PATCH 4.16 057/272] swap: divide-by-zero when zero length swap file on ssd Date: Mon, 28 May 2018 12:01:30 +0200 Message-Id: <20180528100245.688926999@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100240.256525891@linuxfoundation.org> References: <20180528100240.256525891@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Tom Abraham [ Upstream commit a06ad633a37c64a0cd4c229fc605cee8725d376e ] Calling swapon() on a zero length swap file on SSD can lead to a divide-by-zero. Although creating such files isn't possible with mkswap and they woud be considered invalid, it would be better for the swapon code to be more robust and handle this condition gracefully (return -EINVAL). Especially since the fix is small and straightforward. To help with wear leveling on SSD, the swapon syscall calculates a random position in the swap file using modulo p->highest_bit, which is set to maxpages - 1 in read_swap_header. If the swap file is zero length, read_swap_header sets maxpages=1 and last_page=0, resulting in p->highest_bit=0 and we divide-by-zero when we modulo p->highest_bit in swapon syscall. This can be prevented by having read_swap_header return zero if last_page is zero. Link: http://lkml.kernel.org/r/5AC747C1020000A7001FA82C@prv-mh.provo.novell.com Signed-off-by: Thomas Abraham Reported-by: Reviewed-by: Andrew Morton Cc: Randy Dunlap Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- mm/swapfile.c | 4 ++++ 1 file changed, 4 insertions(+) --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -2961,6 +2961,10 @@ static unsigned long read_swap_header(st maxpages = swp_offset(pte_to_swp_entry( swp_entry_to_pte(swp_entry(0, ~0UL)))) + 1; last_page = swap_header->info.last_page; + if (!last_page) { + pr_warn("Empty swap-file\n"); + return 0; + } if (last_page > maxpages) { pr_warn("Truncating oversized swap area, only using %luk out of %luk\n", maxpages << (PAGE_SHIFT - 10),