Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1980391pxb; Fri, 5 Mar 2021 04:41:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJzhvzfq1dBcBlY5+cxmJEU9yM8YuHExGQMpxuseg3sgT4BtExRLjrlVrXJy9nVI+2qBvlJN X-Received: by 2002:a17:906:1746:: with SMTP id d6mr2141694eje.36.1614948078939; Fri, 05 Mar 2021 04:41:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614948078; cv=none; d=google.com; s=arc-20160816; b=D0CAKv5npXsMek6S8MIZQoRJw8IkO6KvuqSmn17JLkHhSY49zLiXF02Ta8g9p9N3uR rhI4k6M2qHTvShv3cxDaLAszcO6xxzqZnmUphZ4BEtJomrk2GtAKZGK6wzA1+MOX6omb Rw/xuzpJxOKy12hQGhxRtkSvAMoFumQrma16nmOgKpKUOrjCU9gP/xCnK5oj476xLhHm 5DeRKga/xPf3iybswYINMdUiPEO1j8JASn8Vv+DryO9VIy8aJlpmtJ91799KrB7XWPqD n1i7O9pLEnLxqD02HoPw1KCBZOfFQFmgI6BeFpipIXwRXXPrWq5TS0sEcbF8Yf50XJE8 K2Bg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0mkBfxyh6WSDkWuCQBUNvMO/B2L6Q+h7M911Cg5b5AM=; b=zWpVdOWByaDg1Xh6Hbhb+gAVO53E1pZXLKMmad+UIzQdashpq1PFqqWuFh8FCEuFW4 EDuY4eK2yRDmHv8/tOTit+nOxJ1FuHmHvGQudXPa5YXXA+RdzIGzWUV5OULGYgAaDj+U EjlrTE1RUIrBLfTVwiRsGPu53NikvMOS8wYVhR2Boh1IMIVtlmvBMae/0+3qUwdYVyA0 eChrXXx5RLZtG18/55ASxhRgIt0XFdHjnPc+cis5JAYgsoo+Q+gKYLOBVBv5KUEvcmIO SgYpoxtKJdb+ygpL2JY0tHMgRITd07wgSIFa0aOY/514S9zdCt2zug6swZxjgTOTp/e6 Heug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=xnDknYLG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y18si1214862ejp.482.2021.03.05.04.40.55; Fri, 05 Mar 2021 04:41:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=xnDknYLG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232663AbhCEMhz (ORCPT + 99 others); Fri, 5 Mar 2021 07:37:55 -0500 Received: from mail.kernel.org ([198.145.29.99]:50030 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232941AbhCEMgw (ORCPT ); Fri, 5 Mar 2021 07:36:52 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id EC51B65014; Fri, 5 Mar 2021 12:36:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614947811; bh=JtaYzPNlDI7tqDNphEOdtbx2Ac0hDe4hPbGR1bbhcj4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xnDknYLGHHeOY19YeSR6+ws9kiGAcf9dLd6CqhQXnjt8chAkL4NcarOM/OFMNmGBE nPv5xNpLAyNtUP47nYubRqYLyBVV4zsVCEBhutm/sA7GgpiEaCD6zma++hkpS4iZxv EKDYwYGY+XNJu0DDpl3E7fyy4mbWwQSv5tNpC0Mg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zi Yan , Mike Kravetz , Davidlohr Bueso , "Kirill A . Shutemov" , Andrea Arcangeli , Matthew Wilcox , Oscar Salvador , Joao Martins , Andrew Morton , Linus Torvalds Subject: [PATCH 4.19 02/52] hugetlb: fix update_and_free_page contig page struct assumption Date: Fri, 5 Mar 2021 13:21:33 +0100 Message-Id: <20210305120853.778850487@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210305120853.659441428@linuxfoundation.org> References: <20210305120853.659441428@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mike Kravetz commit dbfee5aee7e54f83d96ceb8e3e80717fac62ad63 upstream. page structs are not guaranteed to be contiguous for gigantic pages. The routine update_and_free_page can encounter a gigantic page, yet it assumes page structs are contiguous when setting page flags in subpages. If update_and_free_page encounters non-contiguous page structs, we can see “BUG: Bad page state in process …” errors. Non-contiguous page structs are generally not an issue. However, they can exist with a specific kernel configuration and hotplug operations. For example: Configure the kernel with CONFIG_SPARSEMEM and !CONFIG_SPARSEMEM_VMEMMAP. Then, hotplug add memory for the area where the gigantic page will be allocated. Zi Yan outlined steps to reproduce here [1]. [1] https://lore.kernel.org/linux-mm/16F7C58B-4D79-41C5-9B64-A1A1628F4AF2@nvidia.com/ Link: https://lkml.kernel.org/r/20210217184926.33567-1-mike.kravetz@oracle.com Fixes: 944d9fec8d7a ("hugetlb: add support for gigantic page allocation at runtime") Signed-off-by: Zi Yan Signed-off-by: Mike Kravetz Cc: Zi Yan Cc: Davidlohr Bueso Cc: "Kirill A . Shutemov" Cc: Andrea Arcangeli Cc: Matthew Wilcox Cc: Oscar Salvador Cc: Joao Martins Cc: Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman Signed-off-by: Mike Kravetz --- mm/hugetlb.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1171,14 +1171,16 @@ static inline void destroy_compound_giga static void update_and_free_page(struct hstate *h, struct page *page) { int i; + struct page *subpage = page; if (hstate_is_gigantic(h) && !gigantic_page_supported()) return; h->nr_huge_pages--; h->nr_huge_pages_node[page_to_nid(page)]--; - for (i = 0; i < pages_per_huge_page(h); i++) { - page[i].flags &= ~(1 << PG_locked | 1 << PG_error | + for (i = 0; i < pages_per_huge_page(h); + i++, subpage = mem_map_next(subpage, page, i)) { + subpage->flags &= ~(1 << PG_locked | 1 << PG_error | 1 << PG_referenced | 1 << PG_dirty | 1 << PG_active | 1 << PG_private | 1 << PG_writeback);