Re: [PATCH v2 2/7] objtool/klp: Fix size of empty special section entries

Song Liu <[email protected]>
Newsgroups org.kernel.vger.live-patching,org.kernel.vger.linux-kernel
Message-ID <CAPhsuW5eDasiSJSiHaMFKy+eK6dF_0nBzFD=7HyhXzGBoUPfOw@mail.gmail.com>
On Wed, Aug 5, 2026 at 10:11 PM Josh Poimboeuf <[email protected]> wrote:
>
> On Wed, Aug 05, 2026 at 01:36:26PM -0700, Song Liu wrote:
> > On Wed, Aug 5, 2026 at 7:30 AM Josh Poimboeuf <[email protected]> wrote:
> > >
> > [...]
> > >
> > > diff --git a/tools/objtool/klp-diff.c b/tools/objtool/klp-diff.c
> > > index 492d7a012cffe..11e8f3ddbb0e6 100644
> > > --- a/tools/objtool/klp-diff.c
> > > +++ b/tools/objtool/klp-diff.c
> > > @@ -1627,6 +1627,7 @@ static int create_fake_symbols(struct elf *elf)
> > >         for_each_reloc(sec->rsec, reloc) {
> > >                 unsigned long offset, size;
> > >                 struct reloc *next_reloc;
> > > +               bool last = true;
> > >
> > >                 if (annotype(elf, sec, reloc) != ANNOTYPE_DATA_SPECIAL)
> > >                         continue;
> > > @@ -1641,10 +1642,11 @@ static int create_fake_symbols(struct elf *elf)
> > >                                 continue;
> > >
> > >                         size = reloc_addend(next_reloc) - offset;
> > > +                       last = false;
> > >                         break;
> > >                 }
> > >
> > > -               if (!size)
> > > +               if (last)
> > >                         size = sec_size(reloc->sym->sec) - offset;
> >
> > Some comments about "last" logic here can be very helpful.
> >
> > Also, with the last flag, "size = 0;" before the for_each_reloc_continue()
> > loop can be removed.
> >
> > Other than these nitpicks:
> >
> > Acked-by: Song Liu <[email protected]>
>
> How about this on top?

Looks great! Thanks!

Song

> diff --git a/tools/objtool/klp-diff.c b/tools/objtool/klp-diff.c
> index 11e8f3ddbb0e6..38fae861d12c7 100644
> --- a/tools/objtool/klp-diff.c
> +++ b/tools/objtool/klp-diff.c
> @@ -1634,7 +1634,10 @@ static int create_fake_symbols(struct elf *elf)
>
>                 offset = reloc_addend(reloc);
>
> -               size = 0;
> +               /*
> +                * Find the start of the next entry so the fake symbol size can
> +                * be calculated.
> +                */
>                 next_reloc = reloc;
>                 for_each_reloc_continue(sec->rsec, next_reloc) {
>                         if (annotype(elf, sec, next_reloc) != ANNOTYPE_DATA_SPECIAL ||
> @@ -1646,6 +1649,10 @@ static int create_fake_symbols(struct elf *elf)
>                         break;
>                 }
>
> +               /*
> +                * If no next entry found, this is the last entry, so its size
> +                * is from the current offset to the end of the section.
> +                */
>                 if (last)
>                         size = sec_size(reloc->sym->sec) - offset;
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.