Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2310488imm; Mon, 28 May 2018 05:52:19 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpSjLouNRuJv8Xz6OLesfsq0hsezJ5uKs7mfqN6nQnm17EjC8Y9lwF7puHU+BaVUmv/GF83 X-Received: by 2002:a17:902:264:: with SMTP id 91-v6mr13415010plc.341.1527511939060; Mon, 28 May 2018 05:52:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527511939; cv=none; d=google.com; s=arc-20160816; b=EX8T7LXK0LVWM8OXhKUwONNWM6qZ9MXv7VR2etQqUPNb9by15PrHm0oHOyoJ+ltQ4p SjKkqOupYzUvMfcy+Y+EqwMqHditYFBveQI0Wn+wEcPqPR+wMV89ANnphSbJZ2VacrjP Y4tcFez3ARVwRqKGgl/iuLurohbxbtbsAB8JJuDPY8K5Sx0bSNrj4Pr0GV7qmO6xM0n8 YqTIDXzA5J1U8S8uNBvmHyNZBbH1nTKnMCPIudZf9koIbDG9QS5HPPBgLlPU9gmghE7z iZu80qyULIW2HDpYkxdZn5u/bbQbyLfpp6Yw80tl7IeuN/BryBiqBKj5wa6i1xuH1D+X DO6w== 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=f74UImsyVYOIjbxmnM5ql7XZY3CS/VERaGNtVPBa+lk=; b=kuctEhKD7mpghpCtQqTO/AgI92PdzrYRG2SBKm9bz8vX9ZZigkTirvvnvoad6R4kCF Ssg6gyy4HYHH1b37uYWogCLjnZqn0zmveRaaFcc2eztLu1e5kjUuUP1cTOm/UITWyqZB wJHAafu0A2BKxHkotOC9a0dZ1s0RAS9SIVvECQK21KuuHhFiI6xnFdAQZe/8m6GuKCaC +RcQjo8ih4yQeDvLoGFxcno0/+JUxswLoArnmwJ0kqX6Znwe0T5DXn31PAFq3mThJDS0 YHki/NWX5GX5zxp7PUZP+ezgwzmfRcmUswx22nfAaeR/Yvbr7yztdXyO9KXHAUweyFWF GRMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fUAc5dlh; 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 s88-v6si29664255pfa.339.2018.05.28.05.52.04; Mon, 28 May 2018 05:52:19 -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=fUAc5dlh; 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 S1164481AbeE1K4G (ORCPT + 99 others); Mon, 28 May 2018 06:56:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:44474 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1164152AbeE1K4A (ORCPT ); Mon, 28 May 2018 06:56:00 -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 4C248208A1; Mon, 28 May 2018 10:55:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527504959; bh=jxlOPLmzkw83UBzQlyfBzcBuGRhL2JLDbXXSuQ9GKVc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fUAc5dlhnR6Nc55ZPu4ITc50QFDgmBrUtkK27+0tchgM+mgFKu7c3rtc0Ib531b2S Js43u+o/l+H3BCpNpLVkFpZQpMILcQ95KSBTZOGrmcf3fpwzrJ4uVRpwRMYz1+eWsY s70H7yGXWDYCKObGg0bWZqvWpP/IAyKW3v9HVZnY= 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.14 325/496] swap: divide-by-zero when zero length swap file on ssd Date: Mon, 28 May 2018 12:01:50 +0200 Message-Id: <20180528100333.524952903@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100319.498712256@linuxfoundation.org> References: <20180528100319.498712256@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.14-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 @@ -2954,6 +2954,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),