Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1497036ybt; Mon, 15 Jun 2020 01:37:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz25+cciagbnzKscV/UnQd9DRbXNEKrt3Z7catEy3vf/qCjwVCOtSb/J33qIufxwbfR+Yre X-Received: by 2002:a50:f387:: with SMTP id g7mr23564988edm.185.1592210261492; Mon, 15 Jun 2020 01:37:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592210261; cv=none; d=google.com; s=arc-20160816; b=LgIANXp0tDlL248YXRgSuzC70bCqWTjd1K76QdaEMpKnZHY15FOc+LVZqu33dte/ul zeOkSr4Kz+vvLFyC5PazV5rL56bZJ7fmLwYzt6RapHkFW5ax0Sv1p/xojxTVrRJnA9On Q1DvuqKTm0YBUGWELfZqc2GniRPgSBU1Oldth9T9BI22rxNJ2dcV2yLZsdFqq+s4WGdc 457kkLarb6KoQZv3srLJf1Q8KvuFX5d0Y8U3kIUOGB/egzfU/COx97hKW/8t9cRDGjYw wYiGIkbejAudNThcbvB/EgCp4Ba7AldYfuLqD2QHEO+4k2ypwD1BTRhf68SrJt3oqr5L fwMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:references:in-reply-to:subject:cc:to:from :dkim-signature; bh=phOlbjTOdvARM/mTZZxrS9vASbyMVJpwN2vWscSJYrs=; b=Qq4x/9jrj7t5p9HEnD/1OhF+xWq6HP77rcEYH3oVyxeYdkj+Uc5oRqqTllDJBaA6wi B8LFy8cJ28YzQtP9/Ut6GMDk7Vm8kUeSb6Uqxe17I0AEEPY0gCf4wQX13JeAh4o8yeGR 3w5VJGCx74oF0igg83JOLSBg8TmNMcDUBuXN+MHSnByUIuWyGmbRJRy9OFlriYv8ToEn M8kbWrsoE9KaOAPqidcmiuxkDc+4RaiLuX1545DW9UbTjUBsz2JTJsrSXYzSxuFE3JHz pWnPsWgMYOcdXH4e0CNHHkmk7varjWJo0ozR7gHC2AwTVrJYZw/CfDIAVSF6sVDCQJw9 k9Qw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Bqn4wC0a; 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=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ce14si8760864ejb.12.2020.06.15.01.37.18; Mon, 15 Jun 2020 01:37:41 -0700 (PDT) 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=@redhat.com header.s=mimecast20190719 header.b=Bqn4wC0a; 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=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728921AbgFOIf2 (ORCPT + 99 others); Mon, 15 Jun 2020 04:35:28 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:28907 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728649AbgFOIf1 (ORCPT ); Mon, 15 Jun 2020 04:35:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1592210125; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=phOlbjTOdvARM/mTZZxrS9vASbyMVJpwN2vWscSJYrs=; b=Bqn4wC0ax//pQVvX6TbdXNPSId4x5ZOlS6jSr6sb40v1l/loeEvVbc2tQkn88DUlw+1EPx fk8TlG2Ei2E+nbGmi4xVXHr7BOjItQVLALcz6slUzFySvCVgT3RE1dK0kSM6fidsvBOTMa QoY3rFPPJXRO/FQbjlGV85N5oX5AzZ0= Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-513-NV9ou7YNP6-KaeK6Zm2EbQ-1; Mon, 15 Jun 2020 04:35:23 -0400 X-MC-Unique: NV9ou7YNP6-KaeK6Zm2EbQ-1 Received: by mail-ej1-f71.google.com with SMTP id z21so7468275ejl.6 for ; Mon, 15 Jun 2020 01:35:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version:content-transfer-encoding; bh=phOlbjTOdvARM/mTZZxrS9vASbyMVJpwN2vWscSJYrs=; b=nuMXt2GeskLq8OKL0OuzPhhDDehATx+M76qHQXB2KqWQsdnKt3i4nVexMgHU2N+fPG 7utcb8uWlibFYaHOSLRSQ4/5bhGAQKwLTExPJosNGc7jqaNHfBI6QVuHUPgcwaJcYceP cU1ZrNc0Yb0+5gWYUMPdmrZstPuMUiqpRh6aq5Kq1BVqw5eg73JTIBtRGVEyYpewK653 wbYBY/eLoCcJFjVLv0wa/kaaX+Z+M1u6oCAPvjOI1povvJzGf5YnsJ4MCirIQLRpDlvq R/gSwc8TpQtcaypV5E72aQyMNqjlClMUrnLK0afJ9GgYmeM9qrx4iBt0pwKntyYtU3BD qA5A== X-Gm-Message-State: AOAM531cKLzoyTGyE4BF2EnznJDnrDWkLSkaaNR6SpQD+/T6KvsE1qbH GZzk7yqd4CAHzeOA44s4ULZyk5yf0wEgZtoFRXLV5u/ZJqX+apeBBQOPjEeZLzGmv9WLV0ICKRP SWsAe3b2HGwhJgiDXQRVzD4Kb X-Received: by 2002:a17:906:3e0c:: with SMTP id k12mr23882437eji.441.1592210121746; Mon, 15 Jun 2020 01:35:21 -0700 (PDT) X-Received: by 2002:a17:906:3e0c:: with SMTP id k12mr23882413eji.441.1592210121421; Mon, 15 Jun 2020 01:35:21 -0700 (PDT) Received: from vitty.brq.redhat.com (g-server-2.ign.cz. [91.219.240.2]) by smtp.gmail.com with ESMTPSA id bg21sm8608364ejb.90.2020.06.15.01.35.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:35:20 -0700 (PDT) From: Vitaly Kuznetsov To: Dexuan Cui Cc: Stephen Hemminger , Andy Lutomirski , Peter Zijlstra , Andy Lutomirski , Christoph Hellwig , Michael Kelley , Ju-Hyoung Lee , "x86\@kernel.org" , "linux-hyperv\@vger.kernel.org" , "linux-kernel\@vger.kernel.org" , KY Srinivasan Subject: RE: hv_hypercall_pg page permissios In-Reply-To: References: <20200407073830.GA29279@lst.de> Date: Mon, 15 Jun 2020 10:35:19 +0200 Message-ID: <87y2ooiv5k.fsf@vitty.brq.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Dexuan Cui writes: >> From: linux-hyperv-owner@vger.kernel.org >> On Behalf Of Andy Lutomirski >> Sent: Tuesday, April 7, 2020 2:01 PM >> To: Christoph Hellwig >> Cc: vkuznets ; x86@kernel.org; >> linux-hyperv@vger.kernel.org; linux-kernel@vger.kernel.org; KY Srinivasan >> ; Stephen Hemminger ; >> Andy Lutomirski ; Peter Zijlstra >> Subject: Re: hv_hypercall_pg page permissios >> >> >> > On Apr 7, 2020, at 12:38 AM, Christoph Hellwig wrote: >> > >> > On Tue, Apr 07, 2020 at 09:28:01AM +0200, Vitaly Kuznetsov wrote: >> >> Christoph Hellwig writes: >> >> >> >>> Hi all, >> >>> >> >>> The x86 Hyper-V hypercall page (hv_hypercall_pg) is the only allocation >> >>> in the kernel using __vmalloc with exectutable persmissions, and the >> >>> only user of PAGE_KERNEL_RX. Is there any good reason it needs to >> >>> be readable? Otherwise we could use vmalloc_exec and kill off >> >>> PAGE_KERNEL_RX. Note that before 372b1e91343e6 ("drivers: hv: Turn >> off >> >>> write permission on the hypercall page") it was even mapped writable.. >> >> >> >> [There is nothing secret in the hypercall page, by reading it you can >> >> figure out if you're running on Intel or AMD (VMCALL/VMMCALL) but it's >> >> likely not the only possible way :-)] >> >> >> >> I see no reason for hv_hypercall_pg to remain readable. I just >> >> smoke-tested >> > >> > Thanks, I have the same in my WIP tree, but just wanted to confirm this >> > makes sense. >> >> Just to make sure we’re all on the same page: x86 doesn’t normally have an >> execute-only mode. Executable memory in the kernel is readable unless you >> are using fancy hypervisor-based XO support. > > Hi hch, > The patch is merged into the mainine recently, but unluckily we noticed > a warning with CONFIG_DEBUG_WX=y (it looks typically this config is defined > by default in Linux distros, at least in Ubuntu 18.04's > /boot/config-4.18.0-11-generic). > > Should we revert this patch, or figure out a way to ask the DEBUG_WX code to > ignore this page? > Are you sure it is hv_hypercall_pg? AFAIU it shouldn't be W+X as we are allocating it with vmalloc_exec(). In other words, if you revert 78bb17f76edc, does the issue go away? > [ 19.387536] debug: unmapping init [mem 0xffffffff82713000-0xffffffff82886fff] > [ 19.431766] Write protecting the kernel read-only data: 18432k > [ 19.438662] debug: unmapping init [mem 0xffffffff81c02000-0xffffffff81dfffff] > [ 19.446830] debug: unmapping init [mem 0xffffffff821d6000-0xffffffff821fffff] > [ 19.522368] ------------[ cut here ]------------ > [ 19.527495] x86/mm: Found insecure W+X mapping at address 0xffffc90000012000 > [ 19.535066] WARNING: CPU: 26 PID: 1 at arch/x86/mm/dump_pagetables.c:248 note_page+0x639/0x690 > [ 19.539038] Modules linked in: > [ 19.539038] CPU: 26 PID: 1 Comm: swapper/0 Not tainted 5.7.0+ #1 > [ 19.539038] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008 12/07/2018 > [ 19.539038] RIP: 0010:note_page+0x639/0x690 > [ 19.539038] Code: fe ff ff 31 c0 e9 a0 fe ff ff 80 3d 39 d1 31 01 00 0f 85 76 fa ff ff 48 c7 c7 98 55 0a 82 c6 05 25 d1 31 01 01 e8 f7 c9 00 00 <0f> 0b e9 5c fa ff ff 48 83 c0 18 48 c7 45 68 00 00 00 00 48 89 45 > [ 19.539038] RSP: 0000:ffffc90003137cb0 EFLAGS: 00010282 > [ 19.539038] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000007 > [ 19.539038] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff810fa9c4 > [ 19.539038] RBP: ffffc90003137ea0 R08: 0000000000000000 R09: 0000000000000000 > [ 19.539038] R10: 0000000000000001 R11: 0000000000000000 R12: ffffc90000013000 > [ 19.539038] R13: 0000000000000000 R14: ffffc900001ff000 R15: 0000000000000000 > [ 19.539038] FS: 0000000000000000(0000) GS:ffff8884dad00000(0000) knlGS:0000000000000000 > [ 19.539038] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 19.539038] CR2: 0000000000000000 CR3: 0000000002210001 CR4: 00000000003606e0 > [ 19.539038] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > [ 19.539038] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 > [ 19.539038] Call Trace: > [ 19.539038] ptdump_pte_entry+0x39/0x40 > [ 19.539038] __walk_page_range+0x5b7/0x960 > [ 19.539038] walk_page_range_novma+0x7e/0xd0 > [ 19.539038] ptdump_walk_pgd+0x53/0x90 > [ 19.539038] ptdump_walk_pgd_level_core+0xdf/0x110 > [ 19.539038] ? ptdump_walk_pgd_level_debugfs+0x40/0x40 > [ 19.539038] ? hugetlb_get_unmapped_area+0x2f0/0x2f0 > [ 19.703692] ? rest_init+0x24d/0x24d > [ 19.703692] ? rest_init+0x24d/0x24d > [ 19.703692] kernel_init+0x2c/0x113 > [ 19.703692] ret_from_fork+0x24/0x30 > [ 19.703692] irq event stamp: 2840666 > [ 19.703692] hardirqs last enabled at (2840665): [] console_unlock+0x444/0x5b0 > [ 19.703692] hardirqs last disabled at (2840666): [] trace_hardirqs_off_thunk+0x1a/0x1c > [ 19.703692] softirqs last enabled at (2840662): [] __do_softirq+0x366/0x490 > [ 19.703692] softirqs last disabled at (2840655): [] irq_exit+0xe8/0x100 > [ 19.703692] ---[ end trace 99ca90806a8e657c ]--- > [ 19.786235] x86/mm: Checked W+X mappings: FAILED, 1 W+X pages found. > [ 19.793298] rodata_test: all tests were successful > [ 19.798508] x86/mm: Checking user space page tables > [ 19.818007] x86/mm: Checked W+X mappings: passed, no W+X pages found. > > Thanks, > -- Dexuan -- Vitaly