From: Linus Torvalds <torvalds@osdl.org>
To: Rajesh Venkatasubramanian <vrajesh@umich.edu>
Cc: akpm@osdl.org, linux-kernel@vger.kernel.org, Linux-MM@kvack.org
Subject: Re: [PATCH] mremap NULL pointer dereference fix
Date: Mon, 16 Feb 2004 21:49:06 -0800 (PST) [thread overview]
Message-ID: <Pine.LNX.4.58.0402162144510.30742@home.osdl.org> (raw)
In-Reply-To: <Pine.LNX.4.58.0402162127220.30742@home.osdl.org>
On Mon, 16 Feb 2004, Linus Torvalds wrote:
>
> Ugly, but yes. The "!page_table_present(mm, new_addr))" code just before
> the "alloc_one_pte_map()" should already have done this, but while the
> page tables themselves are safe due to us holding the mm semaphore, the
> pte entry itself at "src" is not.
>
> I hate that code, and your patch makes it even uglier. This code could do
> with a real clean-up, but for now I think your patch will do.
Hmm.. Looking a bit more at it, does this alternate patch work? It's
_slightly_ less ugly, and it also removes the nonsensical TLB invalidate
instead of moving it around together with the comment that says that it
shouldn't exist.
The TLB is (properly) invalidated by "copy_one_pte()" if the mapping
actually changes.
Did I miss anything?
Linus
---
===== mm/mremap.c 1.38 vs edited =====
--- 1.38/mm/mremap.c Wed Feb 4 00:04:56 2004
+++ edited/mm/mremap.c Mon Feb 16 21:44:26 2004
@@ -133,17 +133,21 @@
src = NULL;
}
dst = alloc_one_pte_map(mm, new_addr);
- if (src == NULL)
+ if (src == NULL) {
src = get_one_pte_map_nested(mm, old_addr);
+ /*
+ * "src" could be NULL now, because somebody
+ * might have dropped the (clean) pte entry
+ * while we did the destination pmd allocation.
+ */
+ if (!src)
+ goto out_unmap_dst;
+ }
error = copy_one_pte(vma, old_addr, src, dst, &pte_chain);
pte_unmap_nested(src);
+out_unmap_dst:
pte_unmap(dst);
- } else
- /*
- * Why do we need this flush ? If there is no pte for
- * old_addr, then there must not be a pte for it as well.
- */
- flush_tlb_page(vma, old_addr);
+ }
spin_unlock(&mm->page_table_lock);
pte_chain_free(pte_chain);
out:
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"aart@kvack.org"> aart@kvack.org </a>
next prev parent reply other threads:[~2004-02-17 5:49 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-02-17 4:41 Rajesh Venkatasubramanian
2004-02-17 5:31 ` Andrew Morton
2004-02-17 5:38 ` Linus Torvalds
2004-02-17 5:49 ` Linus Torvalds [this message]
2004-02-17 6:00 ` Andrew Morton
2004-02-17 6:06 ` Linus Torvalds
2004-02-17 13:23 ` Rajesh Venkatasubramanian
2004-02-17 21:33 ` Rajesh Venkatasubramanian
2004-02-19 14:29 ` [PATCH] orphaned ptes -- mremap vs. truncate race Rajesh Venkatasubramanian
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.58.0402162144510.30742@home.osdl.org \
--to=torvalds@osdl.org \
--cc=Linux-MM@kvack.org \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=vrajesh@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox