Re: [PATCH] prctl: implement PR_GET_ENDIAN for all architectures

From: Helge Deller
Date: Wed Feb 01 2017 - 14:47:28 EST


Hi Andrew,

On 01.02.2017 01:26, Andrew Morton wrote:
> On Sat, 28 Jan 2017 12:13:10 +0100 Helge Deller <deller@xxxxxx> wrote:
>
>> The prctl(PR_GET_ENDIAN) syscall was added to Kernel 2.6.18, but
>> implemented for PowerPC only.
>> This trivial patch adds support for this syscall for all other architectures.
>
> Seems reasonable. I guess.

Heck, I did forgot but I submitted a similar patch 8 years ago:
http://www.serverphorums.com/read.php?12,51902

> Why is this needed?

It's not actually needed beside the trivial reason of providing an interface
not just for one single architecture.

After reading the discussion from 2009 again, I'm fine if
you would simply drop the patch. The decision up to you.

> The man page will need updating. It says "PowerPC only".

In case you would include the patch I'd send patches to update
the manpage.

Thanks,
Helge

>> diff --git a/kernel/sys.c b/kernel/sys.c
>> index 842914e..5818e5e 100644
>> --- a/kernel/sys.c
>> +++ b/kernel/sys.c
>> @@ -79,9 +79,6 @@
>> #ifndef GET_FPEXC_CTL
>> # define GET_FPEXC_CTL(a, b) (-EINVAL)
>> #endif
>> -#ifndef GET_ENDIAN
>> -# define GET_ENDIAN(a, b) (-EINVAL)
>> -#endif
>> #ifndef SET_ENDIAN
>> # define SET_ENDIAN(a, b) (-EINVAL)
>> #endif
>> @@ -2136,7 +2133,13 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
>> return -EFAULT;
>> break;
>> case PR_GET_ENDIAN:
>> +#ifdef GET_ENDIAN
>> error = GET_ENDIAN(me, arg2);
>> +#elif defined(__BIG_ENDIAN)
>> + error = put_user(PR_ENDIAN_BIG, (unsigned int __user *)arg2);
>> +#else
>> + error = put_user(PR_ENDIAN_LITTLE, (unsigned int __user *)arg2);
>> +#endif
>> break;
>> case PR_SET_ENDIAN:
>> error = SET_ENDIAN(me, arg2);