[yocto] [prelink-cross][PATCH] src/arch-mips.c: check info->resolvetls before use its member

Robert Yang liezhi.yang at windriver.com
Wed Oct 10 19:14:45 PDT 2018


The info->resolvetls might be NULL according to src/prelink.c:
[snip]
 /* Dynamic linker does not depend on any other library,
    all symbols resolve to themselves with the exception
    of SHN_UNDEF symbols which resolve to 0.  */
if (info->symtab[r_sym].st_shndx == SHN_UNDEF)
  {
    info->resolveent = NULL;
    info->resolvetls = NULL;
[snip]

So we must check it before use its members, otherwise, there might be
Segmentation fault error.

Fixed:
MACHINE = "qemumips"
IMAGE_INSTALL_append = " qemu"
$ bitbake core-image-minimal
[snip]
| /path/to/qemumips-poky-linux/core-image-minimal/1.0-r0/temp/run.prelink_image.1000: line 111:  1010 Segmentation fault      (core dumped) /path/to/qemumips-poky-linux/core-image-minimal/1.0-r0/recipe-sysroot-native/usr/sbin/prelink --root /path/to/qemumips-poky-linux/core-image-minimal/1.0-r0/rootfs -amR -N -c /etc/prelink.conf --dynamic-linker $dynamic_loader
[snip]

Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
---
 src/arch-mips.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/arch-mips.c b/src/arch-mips.c
index ccb1834..02c608f 100644
--- a/src/arch-mips.c
+++ b/src/arch-mips.c
@@ -567,7 +567,8 @@ mips_prelink_reloc (struct prelink_info *info, GElf_Addr r_offset,
       if (dso->ehdr.e_type == ET_EXEC)
 	{
 	  value = info->resolve (info, r_sym, r_type);
-	  value += info->resolvetls->offset - TLS_TP_OFFSET;
+	  if (info->resolvetls != NULL)
+	    value += info->resolvetls->offset - TLS_TP_OFFSET;
 	  if (r_type == R_MIPS_TLS_TPREL32)
 	    mips_prelink_32bit_reloc (dso, rela, value);
 	  else
-- 
2.7.4



More information about the yocto mailing list