From: Vladimir Murzin <vladimir.murzin@arm.com>
To: Christoph Hellwig <hch@lst.de>, Greg Ungerer <gerg@linux-m68k.org>
Cc: uclinux-h8-devel@lists.sourceforge.jp,
linux-xtensa@linux-xtensa.org, Michal Simek <monstr@monstr.eu>,
linux-c6x-dev@linux-c6x.org, linux-sh@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-riscv@lists.infradead.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 08/15] binfmt_flat: add endianess annotations
Date: Tue, 11 Jun 2019 10:58:01 +0100 [thread overview]
Message-ID: <79a2f6d9-7161-b2c7-2eb0-6719daadca8b@arm.com> (raw)
In-Reply-To: <20190610212015.9157-9-hch@lst.de>
On 6/10/19 10:20 PM, Christoph Hellwig wrote:
> Most binfmt_flat on-disk fields are big endian. Use the proper __be32
> type where applicable.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/binfmt_flat.c | 26 ++++++++++++++++----------
> 1 file changed, 16 insertions(+), 10 deletions(-)
Tested-by: Vladimir Murzin <vladimir.murzin@arm.com>
Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com>
>
> diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c
> index 6ae0f9af3fc9..6c1848dee724 100644
> --- a/fs/binfmt_flat.c
> +++ b/fs/binfmt_flat.c
> @@ -421,7 +421,8 @@ static int load_flat_file(struct linux_binprm *bprm,
> unsigned long textpos, datapos, realdatastart;
> u32 text_len, data_len, bss_len, stack_len, full_data, flags;
> unsigned long len, memp, memp_size, extra, rlim;
> - u32 __user *reloc, *rp;
> + __be32 __user *reloc;
> + u32 __user *rp;
> struct inode *inode;
> int i, rev, relocs;
> loff_t fpos;
> @@ -594,7 +595,7 @@ static int load_flat_file(struct linux_binprm *bprm,
> goto err;
> }
>
> - reloc = (u32 __user *)
> + reloc = (__be32 __user *)
> (datapos + (ntohl(hdr->reloc_start) - text_len));
> memp = realdatastart;
> memp_size = len;
> @@ -619,7 +620,7 @@ static int load_flat_file(struct linux_binprm *bprm,
> MAX_SHARED_LIBS * sizeof(u32),
> FLAT_DATA_ALIGN);
>
> - reloc = (u32 __user *)
> + reloc = (__be32 __user *)
> (datapos + (ntohl(hdr->reloc_start) - text_len));
> memp = textpos;
> memp_size = len;
> @@ -785,15 +786,16 @@ static int load_flat_file(struct linux_binprm *bprm,
> u32 __maybe_unused persistent = 0;
> for (i = 0; i < relocs; i++) {
> u32 addr, relval;
> + __be32 tmp;
>
> /*
> * Get the address of the pointer to be
> * relocated (of course, the address has to be
> * relocated first).
> */
> - if (get_user(relval, reloc + i))
> + if (get_user(tmp, reloc + i))
> return -EFAULT;
> - relval = ntohl(relval);
> + relval = ntohl(tmp);
> addr = flat_get_relocate_addr(relval);
> rp = (u32 __user *)calc_reloc(addr, libinfo, id, 1);
> if (rp == (u32 __user *)RELOC_FAILED) {
> @@ -812,8 +814,13 @@ static int load_flat_file(struct linux_binprm *bprm,
> * Do the relocation. PIC relocs in the data section are
> * already in target order
> */
> - if ((flags & FLAT_FLAG_GOTPIC) == 0)
> - addr = ntohl(addr);
> + if ((flags & FLAT_FLAG_GOTPIC) == 0) {
> + /*
> + * Meh, the same value can have a different
> + * byte order based on a flag..
> + */
> + addr = ntohl((__force __be32)addr);
> + }
> addr = calc_reloc(addr, libinfo, id, 0);
> if (addr == RELOC_FAILED) {
> ret = -ENOEXEC;
> @@ -828,11 +835,10 @@ static int load_flat_file(struct linux_binprm *bprm,
> }
> } else {
> for (i = 0; i < relocs; i++) {
> - u32 relval;
> + __be32 relval;
> if (get_user(relval, reloc + i))
> return -EFAULT;
> - relval = ntohl(relval);
> - old_reloc(relval);
> + old_reloc(ntohl(relval));
> }
> }
>
>
next prev parent reply other threads:[~2019-06-11 9:58 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-10 21:20 binfmt_flat cleanups and RISC-V support Christoph Hellwig
2019-06-10 21:20 ` [PATCH 01/15] binfmt_flat: remove flat_reloc_valid Christoph Hellwig
2019-06-11 9:44 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 02/15] binfmt_flat: remove flat_set_persistent Christoph Hellwig
2019-06-11 9:45 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 03/15] binfmt_flat: provide a default version of flat_get_relocate_addr Christoph Hellwig
2019-06-11 9:46 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 04/15] binfmt_flat: remove flat_old_ram_flag Christoph Hellwig
2019-06-11 6:04 ` Greg Ungerer
2019-06-11 7:36 ` Christoph Hellwig
2019-06-11 13:07 ` Greg Ungerer
2019-06-11 9:47 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 05/15] binfmt_flat: replace flat_argvp_envp_on_stack with a Kconfig variable Christoph Hellwig
2019-06-11 9:49 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 06/15] binfmt_flat: remove the uapi <linux/flat.h> header Christoph Hellwig
2019-06-11 9:51 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 07/15] binfmt_flat: use __be32 for the on-disk format Christoph Hellwig
2019-06-11 8:25 ` Geert Uytterhoeven
2019-06-11 9:57 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 08/15] binfmt_flat: add endianess annotations Christoph Hellwig
2019-06-11 9:58 ` Vladimir Murzin [this message]
2019-06-10 21:20 ` [PATCH 09/15] binfmt_flat: add a ARCH_HAS_BINFMT_FLAT option Christoph Hellwig
2019-06-11 9:59 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 10/15] binfmt_flat: make support for old format binaries optional Christoph Hellwig
2019-06-10 21:20 ` [PATCH 11/15] binfmt_flat: provide an asm-generic/flat.h Christoph Hellwig
2019-06-11 10:01 ` Vladimir Murzin
2019-06-10 21:20 ` [PATCH 12/15] binfmt_flat: remove the persistent argument from flat_get_addr_from_rp Christoph Hellwig
2019-06-10 21:20 ` [PATCH 13/15] binfmt_flat: move the MAX_SHARED_LIBS definition to binfmt_flat.c Christoph Hellwig
2019-06-10 21:20 ` [PATCH 14/15] binfmt_flat: don't offset the data start Christoph Hellwig
2019-06-10 21:20 ` [PATCH 15/15] riscv: add binfmt_flat support Christoph Hellwig
2019-06-11 8:16 ` Vladimir Murzin
2019-06-11 9:20 ` Christoph Hellwig
2019-06-11 6:51 ` binfmt_flat cleanups and RISC-V support Greg Ungerer
2019-06-11 7:38 ` Christoph Hellwig
2019-06-11 13:02 ` Greg Ungerer
2019-06-11 8:05 ` Vladimir Murzin
2019-06-11 8:11 ` Christoph Hellwig
2019-06-11 10:08 ` Vladimir Murzin
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=79a2f6d9-7161-b2c7-2eb0-6719daadca8b@arm.com \
--to=vladimir.murzin@arm.com \
--cc=gerg@linux-m68k.org \
--cc=hch@lst.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-c6x-dev@linux-c6x.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-xtensa@linux-xtensa.org \
--cc=monstr@monstr.eu \
--cc=uclinux-h8-devel@lists.sourceforge.jp \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome