Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 375906f8 authored by Stephen Wilson's avatar Stephen Wilson Committed by Al Viro
Browse files

x86: mark associated mm when running a task in 32 bit compatibility mode



This patch simply follows the same practice as for setting the TIF_IA32 flag.
In particular, an mm is marked as holding 32-bit tasks when a 32-bit binary is
exec'ed.  Both ELF and a.out formats are updated.

Signed-off-by: default avatarStephen Wilson <wilsons@start.ca>
Reviewed-by: default avatarMichel Lespinasse <walken@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent c2ef45df
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -298,6 +298,7 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs)
	/* OK, This is the point of no return */
	set_personality(PER_LINUX);
	set_thread_flag(TIF_IA32);
	current->mm->context.ia32_compat = 1;

	setup_new_exec(bprm);

+8 −0
Original line number Diff line number Diff line
@@ -501,6 +501,10 @@ void set_personality_64bit(void)
	/* Make sure to be in 64bit mode */
	clear_thread_flag(TIF_IA32);

	/* Ensure the corresponding mm is not marked. */
	if (current->mm)
		current->mm->context.ia32_compat = 0;

	/* TBD: overwrites user setup. Should have two bits.
	   But 64bit processes have always behaved this way,
	   so it's not too bad. The main problem is just that
@@ -516,6 +520,10 @@ void set_personality_ia32(void)
	set_thread_flag(TIF_IA32);
	current->personality |= force_personality32;

	/* Mark the associated mm as containing 32-bit tasks. */
	if (current->mm)
		current->mm->context.ia32_compat = 1;

	/* Prepare the first "return" to user space */
	current_thread_info()->status |= TS_COMPAT;
}