public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: Florian Weimer <fweimer@redhat.com>
Cc: "H.J. Lu via Libc-alpha" <libc-alpha@sourceware.org>
Subject: Re: [PATCH 3/4] Add run-time chesk for single global definition
Date: Mon, 21 Jun 2021 06:20:16 -0700	[thread overview]
Message-ID: <CAMe9rOocP1wUgdR+h=eKUo2HVXs4s_wT7P9Qn8ALAdMnfG6d+w@mail.gmail.com> (raw)
In-Reply-To: <87czsfn0w7.fsf@oldenburg.str.redhat.com>

On Mon, Jun 21, 2021 at 12:16 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * H. J. Lu via Libc-alpha:
>
> > +static inline void __attribute__ ((always_inline))
> > +_dl_check_protected_symbol (const char *undef_name,
> > +                         const struct link_map *undef_map,
> > +                         const ElfW(Sym) *ref,
> > +                         const struct link_map *map,
> > +                         int type_class)
> > +{
> > +  if (undef_map != NULL
> > +      && !(undef_map->l_1_needed
> > +        & GNU_PROPERTY_1_NEEDED_SINGLE_GLOBAL_DEFINITION)
> > +      && (map->l_1_needed
> > +       & GNU_PROPERTY_1_NEEDED_SINGLE_GLOBAL_DEFINITION))
> > +    {
> > +      if ((type_class & ELF_RTYPE_CLASS_COPY))
> > +     /* Disallow copy relocations against protected data symbols in
> > +        an object with single global definition.  */
> > +     _dl_fatal_printf ("copy relocation against non-copyable protected symbol=%s in file=%s\n",
> > +                       undef_name, DSO_FILENAME (map->l_name));
> > +      else if (ref->st_value != 0
> > +            && ref->st_shndx == SHN_UNDEF
> > +            && (type_class & ELF_RTYPE_CLASS_PLT))
> > +     /* Disallow non-zero symbol values of undefined symbols, which
> > +        are used as the function pointer, against protected function
> > +        symbols in an object with single global definition.  */
> > +     _dl_fatal_printf ("non-canonical reference to canonical protected function symbol=%s in file=%s\n",
> > +                       undef_name, DSO_FILENAME (map->l_name));
> > +    }
> > +}
>
> Why are those fatal errors?

2 copies of the data symbol can be out of sync between executable and
shared library.  We can make them as warnings with tunable to control
it.

> I have trouble understanding the second comment (for the
> ELF_RTYPE_CLASS_PLT).

If st_value is the undefined symbol in executable is not zero, it
is the PLT address in executable and ld.so will use it for function
pointer which is different from the function address in shared
library.

-- 
H.J.

  reply	other threads:[~2021-06-21 13:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-20 23:36 [PATCH 0/4] Implement single global definition marker H.J. Lu
2021-06-20 23:36 ` [PATCH 1/4] Initial support for GNU_PROPERTY_1_NEEDED H.J. Lu
2021-06-21  7:06   ` Florian Weimer
2021-06-21 12:57     ` H.J. Lu
2021-06-20 23:36 ` [PATCH 2/4] Check -z single-global-definition and -fsingle-global-definition H.J. Lu
2021-06-21  7:31   ` Andreas Schwab
2021-06-21  7:43   ` Florian Weimer
2021-06-21 12:49     ` H.J. Lu
2021-06-20 23:36 ` [PATCH 3/4] Add run-time chesk for single global definition H.J. Lu
2021-06-21  7:16   ` Florian Weimer
2021-06-21 13:20     ` H.J. Lu [this message]
2021-06-22  7:12       ` Florian Weimer
2021-06-20 23:36 ` [PATCH 4/4] Update tests for protected data and function symbols H.J. Lu
2021-06-21  7:19   ` Florian Weimer
2021-06-21 12:54     ` H.J. Lu
2021-06-21 12:57       ` Florian Weimer
2021-06-21 13:05         ` H.J. Lu
2021-06-21 20:05 ` [PATCH 0/4] Implement single global definition marker Joseph Myers

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='CAMe9rOocP1wUgdR+h=eKUo2HVXs4s_wT7P9Qn8ALAdMnfG6d+w@mail.gmail.com' \
    --to=hjl.tools@gmail.com \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.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 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).