forked from rpms/kernel
		
	fix nxemu
This commit is contained in:
		
							parent
							
								
									9e66a07b07
								
							
						
					
					
						commit
						6ece5fb0c5
					
				| @ -1173,7 +1173,7 @@ ApplyPatch linux-2.6.29-sparc-IOC_TYPECHECK.patch | |||||||
| # | # | ||||||
| # Exec shield | # Exec shield | ||||||
| # | # | ||||||
| #ApplyPatch linux-2.6-i386-nx-emulation.patch ###FIX | ApplyPatch linux-2.6-i386-nx-emulation.patch | ||||||
| ApplyPatch linux-2.6-32bit-mmap-exec-randomization.patch | ApplyPatch linux-2.6-32bit-mmap-exec-randomization.patch | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
|  | |||||||
| @ -3,21 +3,21 @@ | |||||||
| @@ -5,6 +5,7 @@
 | @@ -5,6 +5,7 @@
 | ||||||
|  #include <asm/ldt.h> |  #include <asm/ldt.h> | ||||||
|  #include <asm/mmu.h> |  #include <asm/mmu.h> | ||||||
|  #include <linux/smp.h> |   | ||||||
| +#include <linux/mm_types.h>
 | +#include <linux/mm_types.h>
 | ||||||
|  |  #include <linux/smp.h> | ||||||
|   |   | ||||||
|  static inline void fill_ldt(struct desc_struct *desc, |  static inline void fill_ldt(struct desc_struct *desc, const struct user_desc *info) | ||||||
|  			    const struct user_desc *info) | @@ -97,6 +98,9 @@ static inline int desc_empty(const void *ptr)
 | ||||||
| @@ -93,6 +94,9 @@ static inline int desc_empty(const void *ptr)
 |  | ||||||
|   |   | ||||||
|  #define load_TLS(t, cpu) native_load_tls(t, cpu) |  #define load_TLS(t, cpu)			native_load_tls(t, cpu) | ||||||
|  #define set_ldt native_set_ldt |  #define set_ldt					native_set_ldt | ||||||
| +#ifdef CONFIG_X86_32
 | +#ifdef CONFIG_X86_32
 | ||||||
| +#define load_user_cs_desc native_load_user_cs_desc
 | +#define	load_user_cs_desc			native_load_user_cs_desc
 | ||||||
| +#endif /*CONFIG_X86_32*/
 | +#endif /*CONFIG_X86_32*/
 | ||||||
|   |   | ||||||
|  #define write_ldt_entry(dt, entry, desc)	\ |  #define write_ldt_entry(dt, entry, desc)	native_write_ldt_entry(dt, entry, desc) | ||||||
|  	native_write_ldt_entry(dt, entry, desc) |  #define write_gdt_entry(dt, entry, desc, type)	native_write_gdt_entry(dt, entry, desc, type) | ||||||
| @@ -392,4 +396,25 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
 | @@ -392,4 +396,25 @@ static inline void set_system_intr_gate_ist(int n, void *addr, unsigned ist)
 | ||||||
|  	_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS); |  	_set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, __KERNEL_CS); | ||||||
|  } |  } | ||||||
| @ -46,7 +46,7 @@ | |||||||
|  #endif /* _ASM_X86_DESC_H */ |  #endif /* _ASM_X86_DESC_H */ | ||||||
| --- a/arch/x86/include/asm/mmu.h
 | --- a/arch/x86/include/asm/mmu.h
 | ||||||
| +++ b/arch/x86/include/asm/mmu.h
 | +++ b/arch/x86/include/asm/mmu.h
 | ||||||
| @@ -7,18 +7,25 @@
 | @@ -7,6 +7,9 @@
 | ||||||
|  /* |  /* | ||||||
|   * The x86 doesn't have a mmu context, but |   * The x86 doesn't have a mmu context, but | ||||||
|   * we put the segment information here. |   * we put the segment information here. | ||||||
| @ -56,19 +56,15 @@ | |||||||
|   */ |   */ | ||||||
|  typedef struct { |  typedef struct { | ||||||
|  	void *ldt; |  	void *ldt; | ||||||
|  	int size; | @@ -19,6 +22,11 @@ typedef struct {
 | ||||||
|  |   | ||||||
|  	struct mutex lock; |  	struct mutex lock; | ||||||
|  	void *vdso; |  	void *vdso; | ||||||
|   | +
 | ||||||
|  #ifdef CONFIG_X86_64 |  | ||||||
|  	/* True if mm supports a task running in 32 bit compatibility mode. */ |  | ||||||
|  	unsigned short ia32_compat; |  | ||||||
|  #endif |  | ||||||
| +#ifdef CONFIG_X86_32
 | +#ifdef CONFIG_X86_32
 | ||||||
| +	struct desc_struct user_cs;
 | +	struct desc_struct user_cs;
 | ||||||
| +	unsigned long exec_limit;
 | +	unsigned long exec_limit;
 | ||||||
| +#endif
 | +#endif
 | ||||||
|   |  | ||||||
|  } mm_context_t; |  } mm_context_t; | ||||||
|   |   | ||||||
|  #ifdef CONFIG_SMP |  #ifdef CONFIG_SMP | ||||||
| @ -508,16 +504,15 @@ | |||||||
|  static void unmap_region(struct mm_struct *mm, |  static void unmap_region(struct mm_struct *mm, | ||||||
|  		struct vm_area_struct *vma, struct vm_area_struct *prev, |  		struct vm_area_struct *vma, struct vm_area_struct *prev, | ||||||
|  		unsigned long start, unsigned long end); |  		unsigned long start, unsigned long end); | ||||||
| @@ -388,6 +401,9 @@
 | @@ -432,6 +432,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
 | ||||||
|  |  	struct vm_area_struct *prev, struct rb_node **rb_link, | ||||||
|  |  	struct rb_node *rb_parent) | ||||||
|  { |  { | ||||||
|  	struct vm_area_struct *next; |  | ||||||
|   |  | ||||||
| +	if (vma->vm_flags & VM_EXEC)
 | +	if (vma->vm_flags & VM_EXEC)
 | ||||||
| +		arch_add_exec_range(mm, vma->vm_end);
 | +		arch_add_exec_range(mm, vma->vm_end);
 | ||||||
| +
 |  	__vma_link_list(mm, vma, prev, rb_parent); | ||||||
|  	vma->vm_prev = prev; |  	__vma_link_rb(mm, vma, rb_link, rb_parent); | ||||||
|  	if (prev) { |  } | ||||||
|  		next = prev->vm_next; |  | ||||||
| @@ -489,6 +504,8 @@
 | @@ -489,6 +504,8 @@
 | ||||||
|  	rb_erase(&vma->vm_rb, &mm->mm_rb); |  	rb_erase(&vma->vm_rb, &mm->mm_rb); | ||||||
|  	if (mm->mmap_cache == vma) |  	if (mm->mmap_cache == vma) | ||||||
| @ -555,8 +550,8 @@ | |||||||
|  	/* Success. */ |  	/* Success. */ | ||||||
| @@ -2254,6 +2367,7 @@
 | @@ -2254,6 +2367,7 @@
 | ||||||
|   |   | ||||||
|  	free_pgtables(tlb, vma, FIRST_USER_ADDRESS, 0); |  	free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0); | ||||||
|  	tlb_finish_mmu(tlb, 0, end); |  	tlb_finish_mmu(&tlb, 0, end); | ||||||
| +	arch_flush_exec_range(mm);
 | +	arch_flush_exec_range(mm);
 | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user