All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <dada1@cosmosbay.com>
To: Benjamin LaHaise <bcrl@kvack.org>, Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH, V2] i386: instead of poisoning .init zone, change protection bits to force a fault
Date: Sun, 29 Jan 2006 21:56:53 +0100	[thread overview]
Message-ID: <43DD2C15.1090800@cosmosbay.com> (raw)
In-Reply-To: <20060129200504.GD28400@kvack.org>

[-- Attachment #1: Type: text/plain, Size: 702 bytes --]


Chasing some invalid accesses to .init zone, I found that free_init_pages() 
was properly freeing the pages but virtual was still usable.

A poisoning (memset(page, 0xcc, PAGE_SIZE)) was done but this is not reliable.

A new config option DEBUG_INITDATA is introduced to mark this initdata as not 
present at all so that buggy code can trigger a fault.

This option is not meant for production machines because it may split one or 
two huge page (2MB or 4MB) into small pages and thus slow down kernel a bit.

(After that we could map non possible cpu percpu data to the initial 
percpudata that is included in .init and discarded in free_initmem())

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>

[-- Attachment #2: i386_mm_init.patch --]
[-- Type: text/plain, Size: 1511 bytes --]

--- a/arch/i386/Kconfig.debug	2006-01-29 22:30:10.000000000 +0100
+++ b/arch/i386/Kconfig.debug	2006-01-29 22:35:54.000000000 +0100
@@ -61,6 +61,18 @@
 	  portion of the kernel code won't be covered by a 2MB TLB anymore.
 	  If in doubt, say "N".
 
+config DEBUG_INITDATA
+	bool "Read/Write protect kernel init data structures"
+	depends on DEBUG_KERNEL
+	help
+	  The init data is normally freed when kernel has booted.
+	  Some code may still try to read or write to data in this area.
+	  If you say Y here, the kernel will mark this zone as not readable
+	  or writeable at all. Buggy code will then fault.
+	  This option may have a slight performance impact because a
+	  portion of the kernel code won't be covered by a 2MB TLB anymore.
+	  If in doubt, say "N".
+
 config 4KSTACKS
 	bool "Use 4Kb + 4Kb for kernel stacks instead of 8Kb" if DEBUG_KERNEL
 	default y
--- a/arch/i386/mm/init.c	2006-01-25 10:17:24.000000000 +0100
+++ b/arch/i386/mm/init.c	2006-01-29 22:38:53.000000000 +0100
@@ -750,11 +750,18 @@
 	for (addr = begin; addr < end; addr += PAGE_SIZE) {
 		ClearPageReserved(virt_to_page(addr));
 		set_page_count(virt_to_page(addr), 1);
+#ifdef CONFIG_DEBUG_INITDATA
+		change_page_attr(virt_to_page(addr), 1, __pgprot(0));
+#else
 		memset((void *)addr, 0xcc, PAGE_SIZE);
+#endif
 		free_page(addr);
 		totalram_pages++;
 	}
 	printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10);
+#ifdef CONFIG_DEBUG_INITDATA
+	global_flush_tlb();
+#endif
 }
 
 void free_initmem(void)

  parent reply	other threads:[~2006-01-29 20:56 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-29  6:26 [PATCH] i386: Add a temporary to make put_user more type safe Eric W. Biederman
2006-01-29  6:39 ` Andrew Morton
2006-01-29  6:49   ` Eric W. Biederman
2006-01-29  7:51     ` Andrew Morton
     [not found]       ` <200601291620.28291.ioe-lkml@rameria.de>
2006-01-29 19:33         ` Andrew Morton
2006-01-29 20:04           ` [PATCH] i386: instead of poisoning .init zone, change protection bits to force a fault Eric Dumazet
2006-01-29 20:05             ` Benjamin LaHaise
2006-01-29 20:28               ` Eric Dumazet
2006-01-29 20:56               ` Eric Dumazet [this message]
2006-01-30  9:03                 ` Questions about alloc_large_system_hash() and TLB entries Eric Dumazet
2006-01-30  9:22                   ` David S. Miller
2006-01-30 10:22                     ` Eric Dumazet
2006-02-04 22:41                 ` [PATCH, V2] i386: instead of poisoning .init zone, change protection bits to force a fault Andrew Morton
2006-02-05 17:03                   ` Eric Dumazet
2006-02-05 19:42                     ` Andrew Morton
2006-02-06  8:53                       ` Eric Dumazet
2006-02-06  9:02                   ` Eric Dumazet
2006-02-06  9:28                     ` Andrew Morton
2006-02-06 10:07                       ` Eric Dumazet
2006-02-06 10:16                         ` Andrew Morton

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=43DD2C15.1090800@cosmosbay.com \
    --to=dada1@cosmosbay.com \
    --cc=akpm@osdl.org \
    --cc=bcrl@kvack.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.