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=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 D9418C433DB for ; Fri, 8 Jan 2021 19:27:32 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 5E25923AA3 for ; Fri, 8 Jan 2021 19:27:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5E25923AA3 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 AF02B8D01A0; Fri, 8 Jan 2021 14:27:31 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AC79D8D0156; Fri, 8 Jan 2021 14:27:31 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9F1D78D01A0; Fri, 8 Jan 2021 14:27:31 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0248.hostedemail.com [216.40.44.248]) by kanga.kvack.org (Postfix) with ESMTP id 888A78D0156 for ; Fri, 8 Jan 2021 14:27:31 -0500 (EST) Received: from smtpin27.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 4BCF0181AEF2A for ; Fri, 8 Jan 2021 19:27:31 +0000 (UTC) X-FDA: 77683591902.27.drain43_24011bb274f5 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin27.hostedemail.com (Postfix) with ESMTP id 2EDC33D663 for ; Fri, 8 Jan 2021 19:27:31 +0000 (UTC) X-HE-Tag: drain43_24011bb274f5 X-Filterd-Recvd-Size: 7601 Received: from mail-il1-f180.google.com (mail-il1-f180.google.com [209.85.166.180]) by imf03.hostedemail.com (Postfix) with ESMTP for ; Fri, 8 Jan 2021 19:27:29 +0000 (UTC) Received: by mail-il1-f180.google.com with SMTP id q1so11359479ilt.6 for ; Fri, 08 Jan 2021 11:27:29 -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=p5wHVV/QbImaQMsuteMK+I8BrXV06ShRHu6XF/hxJiQ=; b=rUzvD0Cht2vNJRz5GW60NqtSWrQLOYpot2NzQf9LHMetnFFSEUad97U1Ho9ZzMv1uV Ilbk66Sv5uA7DMfYA+T3u12kmOrt5V3LmmbIStGvYwhvth04yt8wkB6lc7iXWSAgPxi/ aIT0x7oI/AP5vfLGccgqiH9VjS7n/XegP/wyjB7dghX81tQV+s9zJUmxwr3Gb0eSu+b7 e3XMvKOotzZQdyhsngUEonaSzZJrydMNUDfxVYDS//WGU+RmjdR+Dbzqd5Lu5KRhUNXw gDRxP6XhREzxxT3/x7jD2xYkavAiSzHylA8eZuPvrmLqXMrXekVfJsswUT6a5MsouThV eEPw== 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=p5wHVV/QbImaQMsuteMK+I8BrXV06ShRHu6XF/hxJiQ=; b=iZZb58320ll97hU6qAvc46052xaeNdiw9q5kLb26XRaQE/vMBfLkjE4evM3riQhhsF 2NStOhk6polg7tgRMCpaCGXBxUNnyHabudavwxoecS5zeumeV2l4d4hC+9j8uVC2u1VQ B75y2/UKswtjij/5ryGTyAuQGUbD4QokSBH3IOn96R7CaBhqal0fE9z06OGSQyu0Ynw2 73tpDigd362/tsI0/WhOnLdL5B0R1mOcjcIy/aqh+Lp5etovfrkqUGiw7gTIOjbrbhg4 kIFHb3YPesCLu1fhgYp83+R3j1PR02ei2D8keteHX37pvV9M7EB40mXNugvAEVW25727 CdIQ== X-Gm-Message-State: AOAM531rVgH/B5ssFD2d6qCGqeRh5pTjrMN+pChlaPxpnYjLUo10pGSI gbiQy2WBlf+lzlVYLOvUNR0GThkofQsLY6IpAg== X-Google-Smtp-Source: ABdhPJxz27r9DjmvpUm4cq3s4FsZ2sD1v5l6wb928eYFi8YfoqMrS76pujZwOC+Roy8cQQoLsCsrnHYFZAxxgt/01EE= X-Received: by 2002:a92:cccd:: with SMTP id u13mr5244910ilq.273.1610134048822; Fri, 08 Jan 2021 11:27:28 -0800 (PST) MIME-Version: 1.0 References: <3d34069ab2d249d866ea1d18a47e4170dbfb5982.1610132102.git.luto@kernel.org> In-Reply-To: <3d34069ab2d249d866ea1d18a47e4170dbfb5982.1610132102.git.luto@kernel.org> From: Brian Gerst Date: Fri, 8 Jan 2021 14:27:17 -0500 Message-ID: Subject: Re: [PATCH] x86/vm86/32: Remove VM86_SCREEN_BITMAP support To: Andy Lutomirski Cc: "the arch/x86 maintainers" , LKML , Andrea Arcangeli , Linux-MM , Jason Gunthorpe , Linus Torvalds , Matthew Wilcox , Jann Horn , Jan Kara , Yu Zhao , Peter Xu Content-Type: text/plain; charset="UTF-8" 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: On Fri, Jan 8, 2021 at 1:59 PM Andy Lutomirski wrote: > > The implementation was rather buggy. It unconditionally marked PTEs > read-only, even for VM_SHARED mappings. I'm not sure whether this is > actually a problem, but it certainly seems unwise. More importantly, it > released the mmap lock before flushing the TLB, which could allow a racing > CoW operation to falsely believe that the underlying memory was not > writable. > > I can't find any users at all of this mechanism, so just remove it. > > Cc: Andrea Arcangeli > Cc: Linux-MM > Cc: Jason Gunthorpe > Cc: x86@kernel.org > Cc: Linus Torvalds > Cc: Matthew Wilcox > Cc: Jann Horn > Cc: Jan Kara > Cc: Yu Zhao > Cc: Peter Xu > Signed-off-by: Andy Lutomirski > --- > arch/x86/include/uapi/asm/vm86.h | 2 +- > arch/x86/kernel/vm86_32.c | 55 ++++++-------------------------- > 2 files changed, 10 insertions(+), 47 deletions(-) > > diff --git a/arch/x86/include/uapi/asm/vm86.h b/arch/x86/include/uapi/asm/vm86.h > index d2ee4e307ef8..50004fb4590d 100644 > --- a/arch/x86/include/uapi/asm/vm86.h > +++ b/arch/x86/include/uapi/asm/vm86.h > @@ -106,7 +106,7 @@ struct vm86_struct { > /* > * flags masks > */ > -#define VM86_SCREEN_BITMAP 0x0001 > +#define VM86_SCREEN_BITMAP 0x0001 /* no longer supported */ > > struct vm86plus_info_struct { > unsigned long force_return_for_pic:1; > diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c > index 764573de3996..28b9e8d511e1 100644 > --- a/arch/x86/kernel/vm86_32.c > +++ b/arch/x86/kernel/vm86_32.c > @@ -160,49 +160,6 @@ void save_v86_state(struct kernel_vm86_regs *regs, int retval) > do_exit(SIGSEGV); > } > > -static void mark_screen_rdonly(struct mm_struct *mm) > -{ > - struct vm_area_struct *vma; > - spinlock_t *ptl; > - pgd_t *pgd; > - p4d_t *p4d; > - pud_t *pud; > - pmd_t *pmd; > - pte_t *pte; > - int i; > - > - mmap_write_lock(mm); > - pgd = pgd_offset(mm, 0xA0000); > - if (pgd_none_or_clear_bad(pgd)) > - goto out; > - p4d = p4d_offset(pgd, 0xA0000); > - if (p4d_none_or_clear_bad(p4d)) > - goto out; > - pud = pud_offset(p4d, 0xA0000); > - if (pud_none_or_clear_bad(pud)) > - goto out; > - pmd = pmd_offset(pud, 0xA0000); > - > - if (pmd_trans_huge(*pmd)) { > - vma = find_vma(mm, 0xA0000); > - split_huge_pmd(vma, pmd, 0xA0000); > - } > - if (pmd_none_or_clear_bad(pmd)) > - goto out; > - pte = pte_offset_map_lock(mm, pmd, 0xA0000, &ptl); > - for (i = 0; i < 32; i++) { > - if (pte_present(*pte)) > - set_pte(pte, pte_wrprotect(*pte)); > - pte++; > - } > - pte_unmap_unlock(pte, ptl); > -out: > - mmap_write_unlock(mm); > - flush_tlb_mm_range(mm, 0xA0000, 0xA0000 + 32*PAGE_SIZE, PAGE_SHIFT, false); > -} > - > - > - > static int do_vm86_irq_handling(int subfunction, int irqnumber); > static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus); > > @@ -282,6 +239,15 @@ static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus) > offsetof(struct vm86_struct, int_revectored))) > return -EFAULT; > > + > + /* VM86_SCREEN_BITMAP had numerous bugs and appears to have no users. */ > + if (v.flags & VM86_SCREEN_BITMAP) { > + char comm[TASK_COMM_LEN]; > + > + pr_info_once("vm86: '%s' uses VM86_SCREEN_BITMAP, which is no longer supported\n", get_task_comm(comm, current); > + return -EINVAL; > + } > + > memset(&vm86regs, 0, sizeof(vm86regs)); > > vm86regs.pt.bx = v.regs.ebx; > @@ -370,9 +336,6 @@ static long do_sys_vm86(struct vm86plus_struct __user *user_vm86, bool plus) > update_task_stack(tsk); > preempt_enable(); > > - if (vm86->flags & VM86_SCREEN_BITMAP) > - mark_screen_rdonly(tsk->mm); > - > memcpy((struct kernel_vm86_regs *)regs, &vm86regs, sizeof(vm86regs)); > return regs->ax; > } You can also remove screen_bitmap from struct vm86 (the kernel internal structure), and the check_v8086_mode() function. -- Brian Gerst