From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5B55C4741F for ; Thu, 5 Nov 2020 03:52:54 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 123B62220B for ; Thu, 5 Nov 2020 03:52:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PjHhNccV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 123B62220B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 1C8C86B005D; Wed, 4 Nov 2020 22:52:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 178B76B0082; Wed, 4 Nov 2020 22:52:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F33C26B0087; Wed, 4 Nov 2020 22:52:52 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0044.hostedemail.com [216.40.44.44]) by kanga.kvack.org (Postfix) with ESMTP id B9DDF6B005D for ; Wed, 4 Nov 2020 22:52:52 -0500 (EST) Received: from smtpin17.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 56AA53629 for ; Thu, 5 Nov 2020 03:52:52 +0000 (UTC) X-FDA: 77448993384.17.slave66_250952d272c6 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin17.hostedemail.com (Postfix) with ESMTP id 37F57180D0181 for ; Thu, 5 Nov 2020 03:52:52 +0000 (UTC) X-HE-Tag: slave66_250952d272c6 X-Filterd-Recvd-Size: 8552 Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) by imf08.hostedemail.com (Postfix) with ESMTP for ; Thu, 5 Nov 2020 03:52:51 +0000 (UTC) Received: by mail-qk1-f171.google.com with SMTP id x20so113747qkn.1 for ; Wed, 04 Nov 2020 19:52:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ImBXt77gCmXFt/8EHH8Kl0aJsb2ZFrvStpyErpZk2Lk=; b=PjHhNccV81vfXU42avdviH/kXtxuPQbN1UPpdTfbVRobwbwzUSvdqYA+wKL4+ILHzQ lNCCaBlAmMJnFDgNnertLT2ra79RdvSbzud7CUmZZw+RR+PU6TBfF2BliAnaADdOYRM/ Eil1X/VDIBMprCuvN1BVqugs6bwfYNlc9A0obetwQCGO40LuE4HveLnOlxvfL5HMkF91 O/ae6AfBUy/hPhGQXnmMAxDASlweyRFKhacCI/SYG06pAGOXEgy0aMIkczNNlXKFp/qG T67qvW3kqwmTIZ/TfM2oYpmoaqgnWuc8oiqasbaBYmNyayc7u+cHyWwZSMMY/YTyaZ6L lRoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ImBXt77gCmXFt/8EHH8Kl0aJsb2ZFrvStpyErpZk2Lk=; b=DcxNHUCjthCXsDPjSIBKuPFAqLjvgkJ8HbeJViNOHWe4zfG412YoeDQ/gi4wVzduXW XthZuqwDn7Yoo8YdLoV5pfKzkBGOoxI8KiGCUHiH5pofSuq3fmxOTKmAnlkeMjWu9fO8 WO8ciH8OZcIKohwCQaGKAJUaQ5GXakqvT6c4sKSa4R4AIzofKwfs28Cx5NK9lbTcHhoM hZaXaC48mvtzVRWEyo1hB7nDmfUXCxliYYUvCEnZRMk5B9wb8/+2S6ylvQery3RpG0o4 KMVm4OVakym9o6TeAYAr9O5F3ckW3jBA3r6A0PvSITUDHGpTr1fiQbEBq7KnTwZxFcMg t2Lg== X-Gm-Message-State: AOAM531clxsbLjSX7offCdcjHDfZJbGvKRU/540cIHMPECWx7QqT+g06 A9gwwjpd9IbkeSQTzcnmrfe1snNjbPVboS+3W+s= X-Google-Smtp-Source: ABdhPJzW+KXhkOEYEJq0KDBONC8VqRYVUAp4nLMpw6gwdrK4d/RNXJd0+to9+nzwdZpPboRYb6DIWod49gLn3/Tqibc= X-Received: by 2002:a37:6b07:: with SMTP id g7mr423533qkc.265.1604548371025; Wed, 04 Nov 2020 19:52:51 -0800 (PST) MIME-Version: 1.0 References: <20201103162740.6a7c835276b5a704d5b219cc@linux-foundation.org> <20201104101901.b9750cc1a4413bc8fdc17239@linux-foundation.org> <20201104163822.95df9ee4e42ad5ec45852a19@linux-foundation.org> In-Reply-To: <20201104163822.95df9ee4e42ad5ec45852a19@linux-foundation.org> From: Hsin-Hui Wu Date: Wed, 4 Nov 2020 22:52:40 -0500 Message-ID: Subject: Re: [Bug 210023] New: Crash when allocating > 2 TB memory To: Andrew Morton Cc: bugzilla-daemon@bugzilla.kernel.org, linux-mm@kvack.org Content-Type: multipart/alternative; boundary="000000000000ae109605b35407a5" X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: --000000000000ae109605b35407a5 Content-Type: text/plain; charset="UTF-8" We don't use userspace program to allocate memory. We use kernel module to do so. Here is the sample kernel program you can use to test on a machine that has more than 2 TB memory. Use "insmod memtest.ko mb=2100000" to allocate more than 2 TB memory. Use "rmmod memtest" to free the memory. memtest.c ============================================================= #include #include #include #include #include #include #include #ifdef MODVERSIONS #include #endif #include static char *mem_ptr; MODULE_LICENSE("GPL"); int mb = 0; MODULE_PARM_DESC(mb, "alloc MB memory"); module_param(mb, int, S_IWUSR | S_IRUGO); static int __init memtest_init(void) { mem_ptr = NULL; if (mb > 0) { unsigned long alloc_len; alloc_len = mb * 1024 * 1024; mem_ptr = vmalloc(alloc_len); if (mem_ptr) { printk("memtest: vmalloc for size %u MB.\n", mb); } else { printk("memtest: failed to vmalloc for bytes %u MB.\n", mb); } } else { printk("memtest len_MB\n"); } return(0); } static void __exit memtest_exit(void) { if (mem_ptr) { vfree(mem_ptr); printk("memtest: vfree for size %u MB.\n", mb); mem_ptr = NULL; } } module_init(memtest_init); module_exit(memtest_exit); On Wed, Nov 4, 2020 at 7:38 PM Andrew Morton wrote: > On Wed, 4 Nov 2020 15:53:36 -0500 Hsin-Hui Wu wrote: > > > Did this require custom kernel changes? If not, precisely which system > > calls were used to cause this allocation attempt? > > > > [Frank] No. vmalloc(). > > > > vmalloc() is not a system call. > > Please fully describe how vmalloc() came to be called with such a large > request size. Fully. Are you able to provide example userspace code? > > --000000000000ae109605b35407a5 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
We don't use userspace program to allocate memory. We = use kernel module to do so.
Here is the sample kernel program you can u= se to test on a machine that has more than 2 TB memory.

= Use "insmod memtest.ko mb=3D2100000" to allocate more than 2 TB m= emory.
Use "rmmod memtest" to free the memory.

memtest.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
#include <linux/version.h>
#include <linux/init.h>
#inc= lude <linux/module.h>
#include <linux/fs.h>
#include <= linux/cdev.h>
#include <linux/mm.h>
#include <linux/vmall= oc.h>
#ifdef MODVERSIONS
#include <linux/modversions.h>
#= endif
#include <asm/io.h>

static char *mem_ptr;
MODULE_L= ICENSE("GPL");
int mb =3D 0;
MODULE_PARM_DESC(mb, "all= oc MB memory");
module_param(mb, int, S_IWUSR | S_IRUGO);

st= atic int __init memtest_init(void) {
=C2=A0 =C2=A0 mem_ptr =3D NULL;=C2= =A0
=C2=A0 =C2=A0 if (mb > 0) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 unsign= ed long alloc_len;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 alloc_len =3D mb * 1024 *= 1024;
=C2=A0 =C2=A0 =C2=A0 =C2=A0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 mem_p= tr =3D vmalloc(alloc_len);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (mem_ptr) = {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 printk("memtest: vmallo= c for size %u MB.\n", mb);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 } else {
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 printk("memtest: failed to v= malloc for bytes %u MB.\n", mb);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
= =C2=A0 =C2=A0 } else {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 printk("memtest = len_MB\n");
=C2=A0 =C2=A0 }
=C2=A0 =C2=A0 return(0);
}
static void __exit memtest_exit(void) {
=C2=A0 =C2=A0 if (mem_ptr) {=C2=A0 =C2=A0 =C2=A0 =C2=A0 vfree(mem_ptr);
=C2=A0 =C2=A0 =C2=A0 =C2=A0= printk("memtest: vfree for size %u MB.\n", mb);
=C2=A0 =C2=A0= =C2=A0 =C2=A0 mem_ptr =3D NULL;
=C2=A0 =C2=A0 }
}

module_init= (memtest_init);
module_exit(memtest_exit);
On Wed, = Nov 4, 2020 at 7:38 PM Andrew Morton <akpm@linux-foundation.org> wrote:
On Wed, 4 Nov 2020 15:53:36 -0500 Hsin-= Hui Wu <hsinhui= wu@gmail.com> wrote:

> Did this require custom kernel changes?=C2=A0 If not, precisely which = system
> calls were used to cause this allocation attempt?
>
> [Frank] No. vmalloc().
>

vmalloc() is not a system call.

Please fully describe how vmalloc() came to be called with such a large
request size.=C2=A0 Fully.=C2=A0 Are you able to provide example userspace = code?

--000000000000ae109605b35407a5--