public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug dynamic-link/31218] New: PLT rewrite doesn't work on unrelocated definition
@ 2024-01-06 17:06 hjl.tools at gmail dot com
  2024-01-06 18:59 ` [Bug dynamic-link/31218] " hjl.tools at gmail dot com
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: hjl.tools at gmail dot com @ 2024-01-06 17:06 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=31218

            Bug ID: 31218
           Summary: PLT rewrite doesn't work on unrelocated definition
           Product: glibc
           Version: 2.39
            Status: NEW
          Severity: normal
          Priority: P2
         Component: dynamic-link
          Assignee: unassigned at sourceware dot org
          Reporter: hjl.tools at gmail dot com
                CC: goldstein.w.n at gmail dot com
  Target Milestone: ---
            Target: x86-64

When a R_X86_64_JUMP_SLOT relocation is resolved to the unrelocated object,
PLT rewrite will write the wrong address to PLT entry if the definition in
the unrelocated object will be updated by IFUNC relocation later.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug dynamic-link/31218] PLT rewrite doesn't work on unrelocated definition
  2024-01-06 17:06 [Bug dynamic-link/31218] New: PLT rewrite doesn't work on unrelocated definition hjl.tools at gmail dot com
@ 2024-01-06 18:59 ` hjl.tools at gmail dot com
  2024-01-06 22:07 ` [Bug dynamic-link/31218] PLT rewrite overflows large displacement on x32 hjl.tools at gmail dot com
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: hjl.tools at gmail dot com @ 2024-01-06 18:59 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=31218

--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> ---
IFUNC is fine.  The problem is with x32.  On x32, PLT rewrite generates:

   0xf7fbe060 <+0>:     jmp    0x401030
   0xf7fbe065 <+5>:     int3
   0xf7fbe066 <+6>:     int3
   0xf7fbe067 <+7>:     int3
   0xf7fbe068 <+8>:     int3
   0xf7fbe069 <+9>:     int3
   0xf7fbe06a <+10>:    int3
   0xf7fbe06b <+11>:    int3
   0xf7fbe06c <+12>:    int3
   0xf7fbe06d <+13>:    int3
   0xf7fbe06e <+14>:    int3
   0xf7fbe06f <+15>:    int3

0xf7fbe060 + 0x401030 overflows.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug dynamic-link/31218] PLT rewrite overflows large displacement on x32
  2024-01-06 17:06 [Bug dynamic-link/31218] New: PLT rewrite doesn't work on unrelocated definition hjl.tools at gmail dot com
  2024-01-06 18:59 ` [Bug dynamic-link/31218] " hjl.tools at gmail dot com
@ 2024-01-06 22:07 ` hjl.tools at gmail dot com
  2024-01-06 22:26 ` cvs-commit at gcc dot gnu.org
  2024-01-06 22:26 ` hjl.tools at gmail dot com
  3 siblings, 0 replies; 5+ messages in thread
From: hjl.tools at gmail dot com @ 2024-01-06 22:07 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=31218

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|PLT rewrite doesn't work on |PLT rewrite overflows large
                   |unrelocated definition      |displacement on x32

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug dynamic-link/31218] PLT rewrite overflows large displacement on x32
  2024-01-06 17:06 [Bug dynamic-link/31218] New: PLT rewrite doesn't work on unrelocated definition hjl.tools at gmail dot com
  2024-01-06 18:59 ` [Bug dynamic-link/31218] " hjl.tools at gmail dot com
  2024-01-06 22:07 ` [Bug dynamic-link/31218] PLT rewrite overflows large displacement on x32 hjl.tools at gmail dot com
@ 2024-01-06 22:26 ` cvs-commit at gcc dot gnu.org
  2024-01-06 22:26 ` hjl.tools at gmail dot com
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-01-06 22:26 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=31218

--- Comment #2 from Sourceware Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by H.J. Lu <hjl@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0f9afc265a4a0f4ba658d7f71c9602a3fda3538e

commit 0f9afc265a4a0f4ba658d7f71c9602a3fda3538e
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Sat Jan 6 14:03:37 2024 -0800

    x32: Handle displacement overflow in PLT rewrite [BZ #31218]

    PLT rewrite calculated displacement with

    ElfW(Addr) disp = value - branch_start - JMP32_INSN_SIZE;

    On x32, displacement from 0xf7fbe060 to 0x401030 was calculated as

    unsigned int disp = 0x401030 - 0xf7fbe060 - 5;

    with disp == 0x8442fcb and caused displacement overflow. The PLT entry
    was changed to:

    0xf7fbe060 <+0>:        e9 cb 2f 44 08          jmp    0x401030
    0xf7fbe065 <+5>:        cc                      int3
    0xf7fbe066 <+6>:        cc                      int3
    0xf7fbe067 <+7>:        cc                      int3
    0xf7fbe068 <+8>:        cc                      int3
    0xf7fbe069 <+9>:        cc                      int3
    0xf7fbe06a <+10>:       cc                      int3
    0xf7fbe06b <+11>:       cc                      int3
    0xf7fbe06c <+12>:       cc                      int3
    0xf7fbe06d <+13>:       cc                      int3
    0xf7fbe06e <+14>:       cc                      int3
    0xf7fbe06f <+15>:       cc                      int3

    x32 has 32-bit address range, but it doesn't wrap address around at 4GB,
    JMP target was changed to 0x100401030 (0xf7fbe060LL + 0x8442fcbLL + 5),
    which is above 4GB.

    Always use uint64_t to calculate displacement.  This fixes BZ #31218.
    Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug dynamic-link/31218] PLT rewrite overflows large displacement on x32
  2024-01-06 17:06 [Bug dynamic-link/31218] New: PLT rewrite doesn't work on unrelocated definition hjl.tools at gmail dot com
                   ` (2 preceding siblings ...)
  2024-01-06 22:26 ` cvs-commit at gcc dot gnu.org
@ 2024-01-06 22:26 ` hjl.tools at gmail dot com
  3 siblings, 0 replies; 5+ messages in thread
From: hjl.tools at gmail dot com @ 2024-01-06 22:26 UTC (permalink / raw)
  To: glibc-bugs

https://sourceware.org/bugzilla/show_bug.cgi?id=31218

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |2.39
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> ---
Fixed.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-01-06 22:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-06 17:06 [Bug dynamic-link/31218] New: PLT rewrite doesn't work on unrelocated definition hjl.tools at gmail dot com
2024-01-06 18:59 ` [Bug dynamic-link/31218] " hjl.tools at gmail dot com
2024-01-06 22:07 ` [Bug dynamic-link/31218] PLT rewrite overflows large displacement on x32 hjl.tools at gmail dot com
2024-01-06 22:26 ` cvs-commit at gcc dot gnu.org
2024-01-06 22:26 ` hjl.tools at gmail dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).