WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] We cannot allow nested C functions. They create a stack

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] We cannot allow nested C functions. They create a stack
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 22 Aug 2005 19:58:25 +0000
Delivery-date: Mon, 22 Aug 2005 22:12:08 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 8c58bf3354655a5f54e687070038e31843480155
# Parent  2052ce3345c1441f96729bc59120b3352a995112
We cannot allow nested C functions. They create a stack
trampoline when their address is taken, which causes a
fault if the system implements NX/XD.

Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>

diff -r 2052ce3345c1 -r 8c58bf335465 Config.mk
--- a/Config.mk Mon Aug 22 16:38:13 2005
+++ b/Config.mk Mon Aug 22 19:58:22 2005
@@ -3,7 +3,7 @@
 # Currently supported architectures: x86_32, x86_64
 XEN_COMPILE_ARCH    ?= $(shell uname -m | sed -e s/i.86/x86_32/)
 XEN_TARGET_ARCH     ?= $(XEN_COMPILE_ARCH)
-XEN_TARGET_X86_PAE  ?= n
+XEN_TARGET_X86_PAE  ?= y
 
 # Tools to run on system hosting the build
 HOSTCC     = gcc
diff -r 2052ce3345c1 -r 8c58bf335465 
linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c   Mon Aug 22 16:38:13 2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/ioremap.c   Mon Aug 22 19:58:22 2005
@@ -368,35 +368,37 @@
 
 EXPORT_SYMBOL(direct_remap_area_pages);
 
+static int lookup_pte_fn(
+       pte_t *pte, struct page *pte_page, unsigned long addr, void *data)
+{
+       unsigned long *ptep = (unsigned long *)data;
+       if (ptep)
+               *ptep = (pfn_to_mfn(page_to_pfn(pte_page)) <<
+                        PAGE_SHIFT) |
+                       ((unsigned long)pte & ~PAGE_MASK);
+       return 0;
+}
+
 int create_lookup_pte_addr(struct mm_struct *mm, 
                           unsigned long address,
                           unsigned long *ptep)
 {
-       int f(pte_t *pte, struct page *pte_page, unsigned long addr,
-             void *data) {
-               unsigned long *ptep = (unsigned long *)data;
-               if (ptep)
-                       *ptep = (pfn_to_mfn(page_to_pfn(pte_page)) <<
-                                PAGE_SHIFT) |
-                               ((unsigned long)pte & ~PAGE_MASK);
-               return 0;
-       }
-
-       return generic_page_range(mm, address, PAGE_SIZE, f, ptep);
+       return generic_page_range(mm, address, PAGE_SIZE, lookup_pte_fn, ptep);
 }
 
 EXPORT_SYMBOL(create_lookup_pte_addr);
+
+static int noop_fn(
+       pte_t *pte, struct page *pte_page, unsigned long addr, void *data)
+{
+       return 0;
+}
 
 int touch_pte_range(struct mm_struct *mm,
                    unsigned long address,
                    unsigned long size)
 {
-       int f(pte_t *pte, struct page *pte_page, unsigned long addr,
-             void *data) {
-               return 0;
-       }
-
-       return generic_page_range(mm, address, size, f, NULL);
+       return generic_page_range(mm, address, size, noop_fn, NULL);
 } 
 
 EXPORT_SYMBOL(touch_pte_range);
diff -r 2052ce3345c1 -r 8c58bf335465 
linux-2.6-xen-sparse/arch/xen/x86_64/mm/ioremap.c
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/ioremap.c Mon Aug 22 16:38:13 2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/ioremap.c Mon Aug 22 19:58:22 2005
@@ -465,33 +465,35 @@
 
 EXPORT_SYMBOL(direct_remap_area_pages);
 
+static int lookup_pte_fn(
+    pte_t *pte, struct page *pte_page, unsigned long addr, void *data) 
+{
+    unsigned long *ptep = (unsigned long *)data;
+    if (ptep) *ptep = (pfn_to_mfn(page_to_pfn(pte_page)) << PAGE_SHIFT)
+                  | ((unsigned long)pte & ~PAGE_MASK);
+    return 0;
+}
+
 int create_lookup_pte_addr(struct mm_struct *mm, 
                            unsigned long address,
                            unsigned long *ptep)
 {
-    int f(pte_t *pte, struct page *pte_page, unsigned long addr, void *data) 
-    {
-        unsigned long *ptep = (unsigned long *)data;
-        if (ptep) *ptep = (pfn_to_mfn(page_to_pfn(pte_page)) << PAGE_SHIFT)
-                       | ((unsigned long)pte & ~PAGE_MASK);
-        return 0;
-    }
-
-    return generic_page_range(mm, address, PAGE_SIZE, f, ptep);
+    return generic_page_range(mm, address, PAGE_SIZE, lookup_pte_fn, ptep);
 }
 
 EXPORT_SYMBOL(create_lookup_pte_addr);
+
+static int noop_fn(
+    pte_t *pte, struct page *pte_page, unsigned long addr, void *data) 
+{
+    return 0;
+}
 
 int touch_pte_range(struct mm_struct *mm,
                     unsigned long address,
                     unsigned long size)
 {
-    int f(pte_t *pte, struct page *pte_page, unsigned long addr, void *data) 
-    {
-        return 0;
-    }
-
-    return generic_page_range(mm, address, size, f, NULL);
-}                 
+    return generic_page_range(mm, address, size, noop_fn, NULL);
+}
 
 EXPORT_SYMBOL(touch_pte_range);
diff -r 2052ce3345c1 -r 8c58bf335465 
linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c
--- a/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c        Mon Aug 22 
16:38:13 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/balloon/balloon.c        Mon Aug 22 
19:58:22 2005
@@ -434,20 +434,20 @@
        balloon_unlock(flags);
 }
 
+static int dealloc_pte_fn(
+       pte_t *pte, struct page *pte_page, unsigned long addr, void *data)
+{
+       unsigned long mfn = pte_mfn(*pte);
+       set_pte(pte, __pte_ma(0));
+       phys_to_machine_mapping[__pa(addr) >> PAGE_SHIFT] =
+               INVALID_P2M_ENTRY;
+       BUG_ON(HYPERVISOR_dom_mem_op(
+               MEMOP_decrease_reservation, &mfn, 1, 0) != 1);
+       return 0;
+}
+
 struct page *balloon_alloc_empty_page_range(unsigned long nr_pages)
 {
-       int f(pte_t *pte, struct page *pte_page,
-             unsigned long addr, void *data)
-       {
-               unsigned long mfn = pte_mfn(*pte);
-               set_pte(pte, __pte_ma(0));
-               phys_to_machine_mapping[__pa(addr) >> PAGE_SHIFT] =
-                       INVALID_P2M_ENTRY;
-               BUG_ON(HYPERVISOR_dom_mem_op(
-                       MEMOP_decrease_reservation, &mfn, 1, 0) != 1);
-               return 0;
-        }
-
        unsigned long vstart, flags;
        unsigned int  order = get_order(nr_pages * PAGE_SIZE);
 
@@ -459,7 +459,7 @@
 
        balloon_lock(flags);
        BUG_ON(generic_page_range(
-               &init_mm, vstart, PAGE_SIZE << order, f, NULL) != 0);
+               &init_mm, vstart, PAGE_SIZE << order, dealloc_pte_fn, NULL));
        current_pages -= 1UL << order;
        balloon_unlock(flags);
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] We cannot allow nested C functions. They create a stack, Xen patchbot -unstable <=