All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Lawrence <joe.lawrence@redhat.com>
To: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Miroslav Benes <mbenes@suse.cz>,
	Gerald Schaefer <gerald.schaefer@de.ibm.com>,
	live-patching@vger.kernel.org, linux-kernel@vger.kernel.org,
	Peter Zijlstra <peterz@infradead.org>,
	Jessica Yu <jeyu@kernel.org>,
	linux-s390@vger.kernel.org, heiko.carstens@de.ibm.com,
	Vasily Gorbik <gor@linux.ibm.com>
Subject: Re: [PATCH v2 6/9] s390/module: Use s390_kernel_write() for late relocations
Date: Thu, 23 Apr 2020 22:35:21 -0400	[thread overview]
Message-ID: <20200424023521.GA22117@redhat.com> (raw)
In-Reply-To: <20200423232657.7minzcsysnhp474w@treble>

On Thu, Apr 23, 2020 at 06:26:57PM -0500, Josh Poimboeuf wrote:
> On Thu, Apr 23, 2020 at 01:10:30PM -0500, Josh Poimboeuf wrote:
> > Mystery solved:
> > 
> >   $ CROSS_COMPILE=s390x-linux-gnu- scripts/faddr2line vmlinux apply_rela+0x16a/0x520
> >   apply_rela+0x16a/0x520:
> >   apply_rela at arch/s390/kernel/module.c:336
> > 
> > which corresponds to the following code in apply_rela():
> > 
> > 
> > 	case R_390_PLTOFF64:	/* 16 bit offset from GOT to PLT. */
> > 		if (info->plt_initialized == 0) {
> > 			unsigned int *ip;
> > 			ip = me->core_layout.base + me->arch.plt_offset +
> > 				info->plt_offset;
> > 			ip[0] = 0x0d10e310;	/* basr 1,0  */
> > 			ip[1] = 0x100a0004;	/* lg	1,10(1) */
> > 
> > 
> > Notice how it's writing directly to text... oops.
> 
> Here's a fix, using write() for the PLT and the GOT.
> 
> diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
> index 2798329ebb74..fe446f42818f 100644
> --- a/arch/s390/kernel/module.c
> +++ b/arch/s390/kernel/module.c
> @@ -297,7 +297,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
>  
>  			gotent = me->core_layout.base + me->arch.got_offset +
>  				info->got_offset;
> -			*gotent = val;
> +			write(gotent, &val, sizeof(*gotent));
>  			info->got_initialized = 1;
>  		}
>  		val = info->got_offset + rela->r_addend;
> @@ -330,25 +330,29 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
>  	case R_390_PLTOFF32:	/* 32 bit offset from GOT to PLT. */
>  	case R_390_PLTOFF64:	/* 16 bit offset from GOT to PLT. */
>  		if (info->plt_initialized == 0) {
> -			unsigned int *ip;
> +			unsigned int *ip, insn[5];
> +
>  			ip = me->core_layout.base + me->arch.plt_offset +
>  				info->plt_offset;

Would it be too paranoid to declare:

  			const unsigned int *ip = me->core_layout.base + 
						 me->arch.plt_offset +
  						 info->plt_offset;

That would trip an assignment to read-only error if someone were tempted
to write directly through the pointer in the future.  Ditto for Elf_Addr
*gotent pointer in the R_390_GOTPLTENT case.

-- Joe

  reply	other threads:[~2020-04-24  2:35 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-17 14:04 [PATCH v2 0/9] livepatch,module: Remove .klp.arch and module_disable_ro() Josh Poimboeuf
2020-04-17 14:04 ` [PATCH v2 1/9] livepatch: Disallow vmlinux.ko Josh Poimboeuf
2020-04-17 14:04 ` [PATCH v2 2/9] livepatch: Apply vmlinux-specific KLP relocations early Josh Poimboeuf
2020-04-20 17:57   ` Joe Lawrence
2020-04-20 18:25     ` Josh Poimboeuf
2020-04-20 19:01       ` Joe Lawrence
2020-04-20 19:11         ` Josh Poimboeuf
2020-04-20 19:49           ` Joe Lawrence
2020-04-20 19:51             ` Josh Poimboeuf
2020-04-23  1:10           ` Joe Lawrence
2020-04-21 11:54     ` Miroslav Benes
2020-04-17 14:04 ` [PATCH v2 3/9] livepatch: Remove .klp.arch Josh Poimboeuf
2020-04-17 14:04 ` [PATCH v2 4/9] livepatch: Prevent module-specific KLP rela sections from referencing vmlinux symbols Josh Poimboeuf
2020-04-17 14:04 ` [PATCH v2 5/9] s390: Change s390_kernel_write() return type to match memcpy() Josh Poimboeuf
2020-04-17 14:04 ` [PATCH v2 6/9] s390/module: Use s390_kernel_write() for late relocations Josh Poimboeuf
2020-04-22 12:28   ` Miroslav Benes
2020-04-24 13:43     ` Josh Poimboeuf
2020-04-22 14:40   ` Gerald Schaefer
2020-04-22 15:21     ` Gerald Schaefer
2020-04-22 19:46       ` Josh Poimboeuf
2020-04-23 12:33         ` Gerald Schaefer
2020-04-23 13:22           ` Miroslav Benes
2020-04-23 14:12             ` Josh Poimboeuf
2020-04-23 18:10               ` Josh Poimboeuf
2020-04-23 23:26                 ` Josh Poimboeuf
2020-04-24  2:35                   ` Joe Lawrence [this message]
2020-04-24  4:12                     ` Josh Poimboeuf
2020-04-24  7:20                   ` Christian Borntraeger
2020-04-24 13:37                     ` Josh Poimboeuf
2020-04-30 14:38                 ` Joe Lawrence
2020-04-30 16:48                   ` Josh Poimboeuf
2020-04-30 17:04                     ` Joe Lawrence
2020-04-23 14:21             ` Joe Lawrence
2020-04-17 14:04 ` [PATCH v2 7/9] x86/module: Use text_poke() " Josh Poimboeuf
2020-04-17 14:29   ` Peter Zijlstra
2020-04-17 14:51     ` Josh Poimboeuf
2020-04-17 14:04 ` [PATCH v2 8/9] livepatch: Remove module_disable_ro() usage Josh Poimboeuf
2020-04-17 14:04 ` [PATCH v2 9/9] module: Remove module_disable_ro() Josh Poimboeuf

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=20200424023521.GA22117@redhat.com \
    --to=joe.lawrence@redhat.com \
    --cc=gerald.schaefer@de.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jeyu@kernel.org \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=peterz@infradead.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.