From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg Kroah-Hartman Subject: [PATCH 3.18 54/58] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Date: Fri, 23 Feb 2018 19:26:53 +0100 Message-ID: <20180223170215.213776406@linuxfoundation.org> References: <20180223170206.724655284@linuxfoundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180223170206.724655284-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Peter Zijlstra , Greg Kroah-Hartman , stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sasha Levin , Pekka Paalanen , Steven Rostedt , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Thomas Gleixner , Linus Torvalds , Ingo Molnar List-Id: nouveau.vger.kernel.org My4xOC1zdGFibGUgcmV2aWV3IHBhdGNoLiAgSWYgYW55b25lIGhhcyBhbnkgb2JqZWN0aW9ucywg cGxlYXNlIGxldCBtZSBrbm93LgoKLS0tLS0tLS0tLS0tLS0tLS0tCgpGcm9tOiBLYXJvbCBIZXJi c3QgPGtoZXJic3RAcmVkaGF0LmNvbT4KCgpbIFVwc3RyZWFtIGNvbW1pdCA2ZDYwY2UzODRkMWQ1 Y2EzMmI1OTUyNDRkYjQwNzdhNDE5YWNjNjg3IF0KCklmIHNvbWV0aGluZyBjYWxscyBpb3JlbWFw KCkgd2l0aCBhbiBhZGRyZXNzIG5vdCBhbGlnbmVkIHRvIFBBR0VfU0laRSwgdGhlCnJldHVybmVk IGFkZHJlc3MgbWlnaHQgYmUgbm90IGFsaWduZWQgYXMgd2VsbC4gVGhpcyBsZWQgdG8gYSBwcm9i ZQpyZWdpc3RlcmVkIG9uIGV4YWN0bHkgdGhlIHJldHVybmVkIGFkZHJlc3MsIGJ1dCB0aGUgZW50 aXJlIHBhZ2Ugd2FzIGFybWVkCmZvciBtbWlvdHJhY2luZy4KCk9uIGNhbGxpbmcgaW91bm1hcCgp IHRoZSBhZGRyZXNzIHBhc3NlZCB0byB1bnJlZ2lzdGVyX2ttbWlvX3Byb2JlKCkgd2FzClBBR0Vf U0laRSBhbGlnbmVkIGJ5IHRoZSBjYWxsZXIgbGVhZGluZyB0byBhIGNvbXBsZXRlIGZyZWV6ZSBv ZiB0aGUKbWFjaGluZS4KCldlIHNob3VsZCBhbHdheXMgcGFnZSBhbGlnbiBhZGRyZXNzZXMgd2hp bGUgKHVuKXJlZ2lzdGVydW5nIG1hcHBpbmdzLApiZWNhdXNlIHRoZSBtbWlvdHJhY2VyIHdvcmtz IG9uIHRvcCBvZiBwYWdlcywgbm90IG1hcHBpbmdzLiBXZSBzdGlsbCBrZWVwCnRyYWNrIG9mIHRo ZSBwcm9iZXMgYmFzZWQgb24gdGhlaXIgcmVhbCBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgdGhvdWdo LApiZWNhdXNlIHRoZSBtbWlvdHJhY2Ugc3RpbGwgbmVlZHMgdG8ga25vdyB3aGF0IGFyZSBtYXBw ZWQgbWVtb3J5IHJlZ2lvbnMuCgpBbHNvIG1vdmUgdGhlIGNhbGwgdG8gbW1pb3RyYWNlX2lvdW5t YXAoKSBwcmlvciBwYWdlIGFsaWduaW5nIHRoZSBhZGRyZXNzLApzbyB0aGF0IGFsbCBwcm9iZXMg YXJlIHVucmVnaXN0ZXJlZCBwcm9wZXJseSwgb3RoZXJ3aXNlIHRoZSBrZXJuZWwgZW5kcyB1cApm YWlsaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyByYW5kb21seSBhZnRlciBkaXNhYmxpbmcgdGhlIG1t aW90cmFjZXIuCgpUZXN0ZWQtYnk6IEx5dWRlIDxseXVkZUByZWRoYXQuY29tPgpTaWduZWQtb2Zm LWJ5OiBLYXJvbCBIZXJic3QgPGtoZXJic3RAcmVkaGF0LmNvbT4KQWNrZWQtYnk6IFBla2thIFBh YWxhbmVuIDxwcGFhbGFuZW5AZ21haWwuY29tPgpDYzogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnPgpDYzogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRl YWQub3JnPgpDYzogU3RldmVuIFJvc3RlZHQgPHJvc3RlZHRAZ29vZG1pcy5vcmc+CkNjOiBUaG9t YXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6IG5vdXZlYXVAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCkxpbms6IGh0dHA6Ly9sa21sLmtlcm5lbC5vcmcvci8yMDE3MTEyNzA3NTEzOS40 OTI4LTEta2hlcmJzdEByZWRoYXQuY29tClNpZ25lZC1vZmYtYnk6IEluZ28gTW9sbmFyIDxtaW5n b0BrZXJuZWwub3JnPgpTaWduZWQtb2ZmLWJ5OiBTYXNoYSBMZXZpbiA8YWxleGFuZGVyLmxldmlu QG1pY3Jvc29mdC5jb20+ClNpZ25lZC1vZmYtYnk6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2to QGxpbnV4Zm91bmRhdGlvbi5vcmc+Ci0tLQogYXJjaC94ODYvbW0vaW9yZW1hcC5jIHwgICAgNCAr Ky0tCiBhcmNoL3g4Ni9tbS9rbW1pby5jICAgfCAgIDEyICsrKysrKystLS0tLQogMiBmaWxlcyBj aGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgotLS0gYS9hcmNoL3g4Ni9t bS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yOTYsMTEgKzI5Niwx MSBAQCB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyCiAJICAgICh2b2lk IF9fZm9yY2UgKilhZGRyIDwgcGh5c190b192aXJ0KElTQV9FTkRfQUREUkVTUykpCiAJCXJldHVy bjsKIAorCW1taW90cmFjZV9pb3VubWFwKGFkZHIpOworCiAJYWRkciA9ICh2b2xhdGlsZSB2b2lk IF9faW9tZW0gKikKIAkJKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7 CiAKLQltbWlvdHJhY2VfaW91bm1hcChhZGRyKTsKLQogCS8qIFVzZSB0aGUgdm0gYXJlYSB1bmxv Y2tlZCwgYXNzdW1pbmcgdGhlIGNhbGxlcgogCSAgIGVuc3VyZXMgdGhlcmUgaXNuJ3QgYW5vdGhl ciBpb3VubWFwIGZvciB0aGUgc2FtZSBhZGRyZXNzCiAJICAgaW4gcGFyYWxsZWwuIFJldXNlIG9m IHRoZSB2aXJ0dWFsIGFkZHJlc3MgaXMgcHJldmVudGVkIGJ5Ci0tLSBhL2FyY2gveDg2L21tL2tt bWlvLmMKKysrIGIvYXJjaC94ODYvbW0va21taW8uYwpAQCAtNDM0LDE3ICs0MzQsMTggQEAgaW50 IHJlZ2lzdGVyX2ttbWlvX3Byb2JlKHN0cnVjdCBrbW1pb19wcgogCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKwl1bnNpZ25lZCBs b25nIGFkZHIgPSBwLT5hZGRyICYgUEFHRV9NQVNLOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6 ZV9saW0gPSBwLT5sZW4gKyAocC0+YWRkciAmIH5QQUdFX01BU0spOwogCXVuc2lnbmVkIGludCBs OwogCXB0ZV90ICpwdGU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgma21taW9fbG9jaywgZmxhZ3Mp OwotCWlmIChnZXRfa21taW9fcHJvYmUocC0+YWRkcikpIHsKKwlpZiAoZ2V0X2ttbWlvX3Byb2Jl KGFkZHIpKSB7CiAJCXJldCA9IC1FRVhJU1Q7CiAJCWdvdG8gb3V0OwogCX0KIAotCXB0ZSA9IGxv b2t1cF9hZGRyZXNzKHAtPmFkZHIsICZsKTsKKwlwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyLCAm bCk7CiAJaWYgKCFwdGUpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC00NTMs NyArNDU0LDcgQEAgaW50IHJlZ2lzdGVyX2ttbWlvX3Byb2JlKHN0cnVjdCBrbW1pb19wcgogCWtt bWlvX2NvdW50Kys7CiAJbGlzdF9hZGRfcmN1KCZwLT5saXN0LCAma21taW9fcHJvYmVzKTsKIAl3 aGlsZSAoc2l6ZSA8IHNpemVfbGltKSB7Ci0JCWlmIChhZGRfa21taW9fZmF1bHRfcGFnZShwLT5h ZGRyICsgc2l6ZSkpCisJCWlmIChhZGRfa21taW9fZmF1bHRfcGFnZShhZGRyICsgc2l6ZSkpCiAJ CQlwcl9lcnIoIlVuYWJsZSB0byBzZXQgcGFnZSBmYXVsdC5cbiIpOwogCQlzaXplICs9IHBhZ2Vf bGV2ZWxfc2l6ZShsKTsKIAl9CkBAIC01MjcsMTkgKzUyOCwyMCBAQCB2b2lkIHVucmVnaXN0ZXJf a21taW9fcHJvYmUoc3RydWN0IGttbWlvCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNp Z25lZCBsb25nIHNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IHAtPmFkZHIgJiBQQUdF X01BU0s7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBzaXplX2xpbSA9IHAtPmxlbiArIChwLT5hZGRy ICYgflBBR0VfTUFTSyk7CiAJc3RydWN0IGttbWlvX2ZhdWx0X3BhZ2UgKnJlbGVhc2VfbGlzdCA9 IE5VTEw7CiAJc3RydWN0IGttbWlvX2RlbGF5ZWRfcmVsZWFzZSAqZHJlbGVhc2U7CiAJdW5zaWdu ZWQgaW50IGw7CiAJcHRlX3QgKnB0ZTsKIAotCXB0ZSA9IGxvb2t1cF9hZGRyZXNzKHAtPmFkZHIs ICZsKTsKKwlwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyLCAmbCk7CiAJaWYgKCFwdGUpCiAJCXJl dHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZrbW1pb19sb2NrLCBmbGFncyk7CiAJd2hpbGUg KHNpemUgPCBzaXplX2xpbSkgewotCQlyZWxlYXNlX2ttbWlvX2ZhdWx0X3BhZ2UocC0+YWRkciAr IHNpemUsICZyZWxlYXNlX2xpc3QpOworCQlyZWxlYXNlX2ttbWlvX2ZhdWx0X3BhZ2UoYWRkciAr IHNpemUsICZyZWxlYXNlX2xpc3QpOwogCQlzaXplICs9IHBhZ2VfbGV2ZWxfc2l6ZShsKTsKIAl9 CiAJbGlzdF9kZWxfcmN1KCZwLT5saXN0KTsKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL25vdXZlYXUK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-3841409-1519418848-2-9120371232078530656 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.001, ME_NOAUTH 0.01, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='CN', FromHeader='org', MailFrom='org' X-Spam-charsets: plain='UTF-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: stable-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1519418847; b=kxWH4A5OejQmUNjr4zYqnnTcAC7JkYmsxtle1bgF1F1iCaE OrvTve6QES9MiaIMhP/tLqgO+nL00y1vHOq38CLcw5k7oL5Tza+xKSIGsTvVLcRH uGFZK9Tu3wLlhNC1mbtSF9ovVTPVqhq8Z4Wz8smHDnLcdYMUozU9N9PQT71oRZy9 MlHKRqv45R+L2d84fq3Cj630HWlkB/EzTgoZI8ukd5FQE63guRbSxgM4N9cgrhWg DZfVlEI6fAeamtXEAvgaaLLC9clEcwRwq+Dbsy4tTsjnXdXft422hFL3k3wMxrZ/ B9uI9pviCKA/HwASy6Z9yp0jtBFpsgFxofyQ55Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-type:sender :list-id; s=arctest; t=1519418847; bh=sZFq/4y8UfETwgFFxOEz5nkHE9 i+bP4uTJgRiHQiygk=; b=e4sKQxFrAy38BVEwRT7xi113VPvDjbLsqdo0W7iUED 5uCwzWAzdCDlcMhpufHOymi5ttv0a4pQgUtZ/0T6Wf5nZ1AHt6wtHeulc6/AXurK Bu8blfyC7ggB62Ps/cvRWuVb1WpIWNItJQLP9RWkyxuBb4vvEJ/8R8bxDtDNG+Xe VNSb00Vmm/CFCyKQbQo6AP8jUgj9QnZidVBINggoB03W7qPPeDRj1xERZItKcarP 8JW2ueM5G7Pn19JfVP2pFnBtIcYVHgz+iy4CBiGqav39pickdVFr1A98epJnB29L OgczBRw+DzASz8pkCdrNGiADHCUiMfRre6UyPiI1ISYA== ARC-Authentication-Results: i=1; mx4.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=linuxfoundation.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=linuxfoundation.org header.result=pass header_is_org_domain=yes Authentication-Results: mx4.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=linuxfoundation.org; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=linuxfoundation.org header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752766AbeBWUrK (ORCPT ); Fri, 23 Feb 2018 15:47:10 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:36006 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752761AbeBWScK (ORCPT ); Fri, 23 Feb 2018 13:32:10 -0500 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lyude , Karol Herbst , Pekka Paalanen , Linus Torvalds , Peter Zijlstra , Steven Rostedt , Thomas Gleixner , nouveau@lists.freedesktop.org, Ingo Molnar , Sasha Levin Subject: [PATCH 3.18 54/58] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Date: Fri, 23 Feb 2018 19:26:53 +0100 Message-Id: <20180223170215.213776406@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180223170206.724655284@linuxfoundation.org> References: <20180223170206.724655284@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: stable-owner@vger.kernel.org X-Mailing-List: stable@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: 3.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Karol Herbst [ Upstream commit 6d60ce384d1d5ca32b595244db4077a419acc687 ] If something calls ioremap() with an address not aligned to PAGE_SIZE, the returned address might be not aligned as well. This led to a probe registered on exactly the returned address, but the entire page was armed for mmiotracing. On calling iounmap() the address passed to unregister_kmmio_probe() was PAGE_SIZE aligned by the caller leading to a complete freeze of the machine. We should always page align addresses while (un)registerung mappings, because the mmiotracer works on top of pages, not mappings. We still keep track of the probes based on their real addresses and lengths though, because the mmiotrace still needs to know what are mapped memory regions. Also move the call to mmiotrace_iounmap() prior page aligning the address, so that all probes are unregistered properly, otherwise the kernel ends up failing memory allocations randomly after disabling the mmiotracer. Tested-by: Lyude Signed-off-by: Karol Herbst Acked-by: Pekka Paalanen Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Steven Rostedt Cc: Thomas Gleixner Cc: nouveau@lists.freedesktop.org Link: http://lkml.kernel.org/r/20171127075139.4928-1-kherbst@redhat.com Signed-off-by: Ingo Molnar Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- arch/x86/mm/ioremap.c | 4 ++-- arch/x86/mm/kmmio.c | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -296,11 +296,11 @@ void iounmap(volatile void __iomem *addr (void __force *)addr < phys_to_virt(ISA_END_ADDRESS)) return; + mmiotrace_iounmap(addr); + addr = (volatile void __iomem *) (PAGE_MASK & (unsigned long __force)addr); - mmiotrace_iounmap(addr); - /* Use the vm area unlocked, assuming the caller ensures there isn't another iounmap for the same address in parallel. Reuse of the virtual address is prevented by --- a/arch/x86/mm/kmmio.c +++ b/arch/x86/mm/kmmio.c @@ -434,17 +434,18 @@ int register_kmmio_probe(struct kmmio_pr unsigned long flags; int ret = 0; unsigned long size = 0; + unsigned long addr = p->addr & PAGE_MASK; const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK); unsigned int l; pte_t *pte; spin_lock_irqsave(&kmmio_lock, flags); - if (get_kmmio_probe(p->addr)) { + if (get_kmmio_probe(addr)) { ret = -EEXIST; goto out; } - pte = lookup_address(p->addr, &l); + pte = lookup_address(addr, &l); if (!pte) { ret = -EINVAL; goto out; @@ -453,7 +454,7 @@ int register_kmmio_probe(struct kmmio_pr kmmio_count++; list_add_rcu(&p->list, &kmmio_probes); while (size < size_lim) { - if (add_kmmio_fault_page(p->addr + size)) + if (add_kmmio_fault_page(addr + size)) pr_err("Unable to set page fault.\n"); size += page_level_size(l); } @@ -527,19 +528,20 @@ void unregister_kmmio_probe(struct kmmio { unsigned long flags; unsigned long size = 0; + unsigned long addr = p->addr & PAGE_MASK; const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK); struct kmmio_fault_page *release_list = NULL; struct kmmio_delayed_release *drelease; unsigned int l; pte_t *pte; - pte = lookup_address(p->addr, &l); + pte = lookup_address(addr, &l); if (!pte) return; spin_lock_irqsave(&kmmio_lock, flags); while (size < size_lim) { - release_kmmio_fault_page(p->addr + size, &release_list); + release_kmmio_fault_page(addr + size, &release_list); size += page_level_size(l); } list_del_rcu(&p->list);