Re: [PATCH] alpha: Fix personality flag propagation across an exec

"Arnd Bergmann" <[email protected]>
Newsgroups org.kernel.vger.util-linux,org.kernel.vger.linux-alpha,org.kernel.vger.linux-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
On Fri, Jan 3, 2025, at 15:01, John Paul Adrian Glaubitz wrote:

> 
>  #define SET_PERSONALITY(EX)					\
> -	set_personality(((EX).e_flags & EF_ALPHA_32BIT)		\
> -	   ? PER_LINUX_32BIT : PER_LINUX)
> +	set_personality((((EX).e_flags & EF_ALPHA_32BIT)	\
> +	   ? PER_LINUX_32BIT : PER_LINUX) | (current->personality & (~PER_MASK)))

This looks wrong to me: since ADDR_LIMIT_32BIT is not part of
PER_MASK, executing a regular binary from a taso binary no longer
reverts back to the entire 64-bit address space.

It seems that the behavior on most other architectures changed in 2012
commit 16f3e95b3209 ("cross-arch: don't corrupt personality flags upon
exec()").

At the time, the same bug existed on mips, parisc and tile, but those
got fixed quickly.

There are two related bits I don't quite understand:

- Do we still care about EF_ALPHA_32BIT? I see that it gets set by
 "alpha-linux-ld.bfd --taso", but could not find any documentation
 on what that flag is actually good for. On all other architectures,
 the address space limit gets enforced through a per-thread setting
 like TIF_32BIT, not through the personality that gets inherited
 by the child processes.

- all architectures other than x86 mask out the lower byte. Why
  not that one?

       Arnd
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.