All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nikola Veljkovic <Nikola.Veljkovic@imgtec.com>
To: Markos Chandras <Markos.Chandras@imgtec.com>
Cc: "linux-mips@linux-mips.org" <linux-mips@linux-mips.org>,
	"ralf@linux-mips.org" <ralf@linux-mips.org>,
	Chris Dearman <Chris.Dearman@imgtec.com>,
	Raghu Gandham <Raghu.Gandham@imgtec.com>,
	Miodrag Dinic <Miodrag.Dinic@imgtec.com>,
	Petar Jovanovic <Petar.Jovanovic@imgtec.com>,
	Lazar Trsic <Lazar.Trsic@imgtec.com>
Subject: RE: [PATCH] MIPS: personality syscall discrepancy on mips64-o32/n32
Date: Thu, 20 Aug 2015 14:46:26 +0000	[thread overview]
Message-ID: <19CDB9880DBFC241860D925D8FAA94A00342F48A@BADAG02.ba.imgtec.org> (raw)
In-Reply-To: <20150818125605.GA25978@mchandras-linux.le.imgtec.org>

Hi,

 > I am not sure what the implication will be to userland with that change...
I could not find any code that explicitly checks for PER_LINUX[32]. Of course,
I might be missing something. Any suspects?

 > I presume you also need to fix the n32 case and then completely remove the 
 > sys_32_personality syscall from linux32.c. 
New patch below removes the syscall.

 > Moreover, I think you also need to fix the arch/mips/include/asm/elf.h
 > code to set LINUX32 for O32 and n32 (for both 32b and 64b kernels.)
Other archs (arm, intel) do not do that, so I think we should follow, and set 
PER_LINUX, but let userspace change this if it wants to. On the kernel side this
only affects uname. From the discussion [1] it seems like the right way to go.

[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2012-August/114506.html

 > If you are going to submit a new patch, can you please create a proper git patch
 > (using git format-patch) and include your Signed-off-by line as well? Thank you
If not obvious, my first post here, thanks for the tips.
------------------
From 6ce4addd17a333ad9935c1d6dc9fa9114e02b3fd Mon Sep 17 00:00:00 2001
From: Nikola Veljkovic <Nikola.Veljkovic@imgtec.com>
Date: Thu, 30 Jul 2015 13:54:26 +0200
Subject: [PATCH] Fix personality syscall for mips64-o32/n32
Content-Length: 5435
Lines: 139

Remove unnecessary sys_32_personality wrapper, which replaces
PER_LINUX32 with PER_LINUX.

Most other archs removed the wrapper even before 2.6.

Now that exec domains are gone, there is almost no kernel code using
personality flags - so set PER_LINUX and let userspace change it.

This fixes bionic test on Android, by making mips more like other
architectures. Change has been tested on mips64 (n64 and o32), there
were no regressions.

Signed-off-by: Nikola Veljkovic <Nikola.Veljkovic@imgtec.com>
---
 arch/mips/kernel/linux32.c     | 14 --------------
 arch/mips/kernel/scall64-n32.S |  2 +-
 arch/mips/kernel/scall64-o32.S |  2 +-
 3 files changed, 2 insertions(+), 16 deletions(-)

diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c
index 0b29646..0513e19 100644
--- a/arch/mips/kernel/linux32.c
+++ b/arch/mips/kernel/linux32.c
@@ -119,20 +119,6 @@ SYSCALL_DEFINE6(32_pwrite, unsigned int, fd, const char __user *, buf,
 	return sys_pwrite64(fd, buf, count, merge_64(a4, a5));
 }
 
-SYSCALL_DEFINE1(32_personality, unsigned long, personality)
-{
-	unsigned int p = personality & 0xffffffff;
-	int ret;
-
-	if (personality(current->personality) == PER_LINUX32 &&
-	    personality(p) == PER_LINUX)
-		p = (p & ~PER_MASK) | PER_LINUX32;
-	ret = sys_personality(p);
-	if (ret != -1 && personality(ret) == PER_LINUX32)
-		ret = (ret & ~PER_MASK) | PER_LINUX;
-	return ret;
-}
-
 asmlinkage ssize_t sys32_readahead(int fd, u32 pad0, u64 a2, u64 a3,
 				   size_t count)
 {
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index 4b20106..e4c036c 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -240,7 +240,7 @@ EXPORT(sysn32_call_table)
 	PTR	compat_sys_sigaltstack
 	PTR	compat_sys_utime		/* 6130 */
 	PTR	sys_mknod
-	PTR	sys_32_personality
+	PTR	sys_personality
 	PTR	compat_sys_ustat
 	PTR	compat_sys_statfs
 	PTR	compat_sys_fstatfs		/* 6135 */
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index f543ff4..9b3e881 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -363,7 +363,7 @@ EXPORT(sys32_call_table)
 	PTR	sys_fchdir
 	PTR	sys_bdflush
 	PTR	sys_sysfs			/* 4135 */
-	PTR	sys_32_personality
+	PTR	sys_personality
 	PTR	sys_ni_syscall			/* for afs_syscall */
 	PTR	sys_setfsuid
 	PTR	sys_setfsgid
-- 
2.4.0

________________________________________
From: Markos Chandras
Sent: Tuesday, August 18, 2015 2:56 PM
To: Nikola Veljkovic
Cc: linux-mips@linux-mips.org; ralf@linux-mips.org; Chris Dearman; Raghu Gandham; Miodrag Dinic; Petar Jovanovic; Lazar Trsic
Subject: Re: [PATCH] MIPS: personality syscall discrepancy on mips64-o32/n32

On Tue, Aug 18, 2015 at 10:25:31AM +0000, Nikola Veljkovic wrote:
> There is a discrepancy in the personality() syscall on mips64.
>
> For a 32bit process (o32 or n32) sys_32_personality() [1] is called, which
> converts PER_LINUX32 -> PER_LINUX:
>
> ret = sys_personality(p);
> if (ret != -1 && (ret & PER_MASK) == PER_LINUX32)  // personality macro applied
>    ret = (ret & ~PER_MASK) | PER_LINUX;            // to make it clearer
>
> This is different than what Intel and ARM are doing. They directly invoke
> sys_personality(). On Android, this causes a bionic test to fail for mips, as it
> expects PER_LINUX32 but receives PER_LINUX, when ran on mips64 core.
>
> The code itself comes from older kernel versions (2.4), where it was also used
> by other architectures [2], [3], [4]. However, since kernel 2.6 other archs are
> invoking sys_personality() directly, for all ABIs.
>
> Is there any reason why we should do PER_LINUX32 -> PER_LINUX on mips? Also, if
> we do change this for o32, should we change it for n32, as well? There is no n32
> support for Android, so it would have to be tested elsewhere.
>
> Tested changing only o32 on Android, there were no regressions:
>
> diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
> index ab93427..b94ee4e 100644
> --- a/arch/mips/kernel/scall64-o32.S
> +++ b/arch/mips/kernel/scall64-o32.S
> @@ -358,7 +358,7 @@ sys_call_table:
>         sys     sys_fchdir              1
>         sys     sys_bdflush             2
>         sys     sys_sysfs               3       /* 4135 */
> -       sys     sys_32_personality      1
> +       sys     sys_personality         1
>         sys     sys_ni_syscall          0       /* for afs_syscall */
>         sys     sys_setfsuid            1
>         sys     sys_setfsgid            1
> --
>
> [1] http://git.linux-mips.org/cgit/ralf/linux.git/tree/arch/mips/kernel/linux32.c#n122
> [2] http://git.linux-mips.org/cgit/ralf/linux.git/tree/include/asm-mips64/elf.h?h=linux-2.4#n124
> [3] http://git.linux-mips.org/cgit/ralf/linux.git/tree/arch/x86_64/ia32/sys_ia32.c?h=linux-2.4#n1974
> [4] http://git.linux-mips.org/cgit/ralf/linux.git/tree/arch/ia64/ia32/sys_ia32.c?h=linux-2.4#n4005
> --
> Nikola Veljkovic

Hi,

I am not sure what the implication will be to userland with that change...

I presume you also need to fix the n32 case and then completely remove the sys_32_personality
syscall from linux32.c. Moreover, I think you also need to fix the arch/mips/include/asm/elf.h
code to set LINUX32 for O32 and n32 (for both 32b and 64b kernels.)

If you are going to submit a new patch, can you please create a proper git patch
(using git format-patch) and include your Signed-off-by line as well? Thank you

--
markos

WARNING: multiple messages have this Message-ID (diff)
From: Nikola Veljkovic <Nikola.Veljkovic@imgtec.com>
To: Markos Chandras <Markos.Chandras@imgtec.com>
Cc: "linux-mips@linux-mips.org" <linux-mips@linux-mips.org>,
	"ralf@linux-mips.org" <ralf@linux-mips.org>,
	Chris Dearman <Chris.Dearman@imgtec.com>,
	Raghu Gandham <Raghu.Gandham@imgtec.com>,
	Miodrag Dinic <Miodrag.Dinic@imgtec.com>,
	Petar Jovanovic <Petar.Jovanovic@imgtec.com>,
	Lazar Trsic <Lazar.Trsic@imgtec.com>
Subject: RE: [PATCH] MIPS: personality syscall discrepancy on mips64-o32/n32
Date: Thu, 20 Aug 2015 14:46:26 +0000	[thread overview]
Message-ID: <19CDB9880DBFC241860D925D8FAA94A00342F48A@BADAG02.ba.imgtec.org> (raw)
Message-ID: <20150820144626.V92K1UVkjiDOr7_HaiGqA1rIQN1ao_Y2hA1e69gwfxM@z> (raw)
In-Reply-To: <20150818125605.GA25978@mchandras-linux.le.imgtec.org>

Hi,

 > I am not sure what the implication will be to userland with that change...
I could not find any code that explicitly checks for PER_LINUX[32]. Of course,
I might be missing something. Any suspects?

 > I presume you also need to fix the n32 case and then completely remove the 
 > sys_32_personality syscall from linux32.c. 
New patch below removes the syscall.

 > Moreover, I think you also need to fix the arch/mips/include/asm/elf.h
 > code to set LINUX32 for O32 and n32 (for both 32b and 64b kernels.)
Other archs (arm, intel) do not do that, so I think we should follow, and set 
PER_LINUX, but let userspace change this if it wants to. On the kernel side this
only affects uname. From the discussion [1] it seems like the right way to go.

[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2012-August/114506.html

 > If you are going to submit a new patch, can you please create a proper git patch
 > (using git format-patch) and include your Signed-off-by line as well? Thank you
If not obvious, my first post here, thanks for the tips.
------------------

  reply	other threads:[~2015-08-20 14:46 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-18 10:25 [PATCH] MIPS: personality syscall discrepancy on mips64-o32/n32 Nikola Veljkovic
2015-08-18 10:25 ` Nikola Veljkovic
2015-08-18 12:56 ` Markos Chandras
2015-08-20 14:46   ` Nikola Veljkovic [this message]
2015-08-20 14:46     ` Nikola Veljkovic
2015-11-12 16:25     ` Ralf Baechle
2015-11-12 19:50       ` Nikola Veljkovic
2015-11-12 19:50         ` Nikola Veljkovic

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=19CDB9880DBFC241860D925D8FAA94A00342F48A@BADAG02.ba.imgtec.org \
    --to=nikola.veljkovic@imgtec.com \
    --cc=Chris.Dearman@imgtec.com \
    --cc=Lazar.Trsic@imgtec.com \
    --cc=Markos.Chandras@imgtec.com \
    --cc=Miodrag.Dinic@imgtec.com \
    --cc=Petar.Jovanovic@imgtec.com \
    --cc=Raghu.Gandham@imgtec.com \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.