mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
![Robin Holt](/assets/img/avatar_default.png)
We have a customer application which trips a bug. The problem arises when a driver attempts to call do_munmap on an area which is mapped, but because current->thread.task_size has been set to 0xC0000000, the call to do_munmap fails thinking it is an unmap beyond the user's address space. The comment in fs/binfmt_elf.c in load_elf_library() before the call to SET_PERSONALITY() indicates that task_size must not be changed for the running application until flush_thread, but is for ia64 executing ia32 binaries. This patch moves the setting of task_size from SET_PERSONALITY() to flush_thread() as indicated. The customer application no longer is able to trip the bug. Signed-off-by: Robin Holt <holt@sgi.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
40 lines
1.2 KiB
C
40 lines
1.2 KiB
C
#ifndef _ASM_IA64_IA32_H
|
|
#define _ASM_IA64_IA32_H
|
|
|
|
#include <linux/config.h>
|
|
|
|
#include <asm/ptrace.h>
|
|
#include <asm/signal.h>
|
|
|
|
#define IA32_NR_syscalls 285 /* length of syscall table */
|
|
#define IA32_PAGE_SHIFT 12 /* 4KB pages */
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
# ifdef CONFIG_IA32_SUPPORT
|
|
|
|
#define IA32_PAGE_OFFSET 0xc0000000
|
|
|
|
extern void ia32_cpu_init (void);
|
|
extern void ia32_mem_init (void);
|
|
extern void ia32_gdt_init (void);
|
|
extern int ia32_exception (struct pt_regs *regs, unsigned long isr);
|
|
extern int ia32_intercept (struct pt_regs *regs, unsigned long isr);
|
|
extern int ia32_clone_tls (struct task_struct *child, struct pt_regs *childregs);
|
|
|
|
# endif /* !CONFIG_IA32_SUPPORT */
|
|
|
|
/* Declare this unconditionally, so we don't get warnings for unreachable code. */
|
|
extern int ia32_setup_frame1 (int sig, struct k_sigaction *ka, siginfo_t *info,
|
|
sigset_t *set, struct pt_regs *regs);
|
|
#if PAGE_SHIFT > IA32_PAGE_SHIFT
|
|
extern int ia32_copy_partial_page_list (struct task_struct *, unsigned long);
|
|
extern void ia32_drop_partial_page_list (struct task_struct *);
|
|
#else
|
|
# define ia32_copy_partial_page_list(a1, a2) 0
|
|
# define ia32_drop_partial_page_list(a1) do { ; } while (0)
|
|
#endif
|
|
|
|
#endif /* !__ASSEMBLY__ */
|
|
|
|
#endif /* _ASM_IA64_IA32_H */
|