diff options
author | Robert Yang <liezhi.yang@windriver.com> | 2018-10-11 12:06:53 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-10-12 16:57:21 +0100 |
commit | f302012bdd45ef4582ae110964324d33349025b8 (patch) | |
tree | 31556481ef940c762046781bad455db785b2bd44 /meta/recipes-devtools/prelink | |
parent | 25f0252d61fbbff97fab31d63c74a9b3c77fa7ce (diff) | |
download | poky-f302012bdd45ef4582ae110964324d33349025b8.tar.gz |
prelink: Fix Segmentation fault error when prelink qemu
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)
[snip]
(From OE-Core rev: 7f5d6f6b70cb1eb486d3ff5c029fc3c6202fc826)
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/prelink')
-rw-r--r-- | meta/recipes-devtools/prelink/prelink/0001-src-arch-mips.c-check-info-resolvetls-before-use-its.patch | 51 | ||||
-rw-r--r-- | meta/recipes-devtools/prelink/prelink_git.bb | 1 |
2 files changed, 52 insertions, 0 deletions
diff --git a/meta/recipes-devtools/prelink/prelink/0001-src-arch-mips.c-check-info-resolvetls-before-use-its.patch b/meta/recipes-devtools/prelink/prelink/0001-src-arch-mips.c-check-info-resolvetls-before-use-its.patch new file mode 100644 index 0000000000..b1688243af --- /dev/null +++ b/meta/recipes-devtools/prelink/prelink/0001-src-arch-mips.c-check-info-resolvetls-before-use-its.patch | |||
@@ -0,0 +1,51 @@ | |||
1 | From 2136969e3e196b9cf7f4788340efa4b1d9b39565 Mon Sep 17 00:00:00 2001 | ||
2 | From: Robert Yang <liezhi.yang@windriver.com> | ||
3 | Date: Thu, 11 Oct 2018 10:05:52 +0800 | ||
4 | Subject: [PATCH] src/arch-mips.c: check info->resolvetls before use its member | ||
5 | |||
6 | The info->resolvetls might be NULL according to src/prelink.c: | ||
7 | [snip] | ||
8 | /* Dynamic linker does not depend on any other library, | ||
9 | all symbols resolve to themselves with the exception | ||
10 | of SHN_UNDEF symbols which resolve to 0. */ | ||
11 | if (info->symtab[r_sym].st_shndx == SHN_UNDEF) | ||
12 | { | ||
13 | info->resolveent = NULL; | ||
14 | info->resolvetls = NULL; | ||
15 | [snip] | ||
16 | |||
17 | So we must check it before use its members, otherwise, there might be | ||
18 | Segmentation fault error. | ||
19 | |||
20 | Fixed: | ||
21 | MACHINE = "qemumips" | ||
22 | IMAGE_INSTALL_append = " qemu" | ||
23 | $ bitbake core-image-minimal | ||
24 | [snip] | ||
25 | | /path/to/qemumips-poky-linux/core-image-minimal/1.0-r0/temp/run.prelink_image.1000: line 111: 1010 Segmentation fault (core dumped) | ||
26 | [snip] | ||
27 | |||
28 | Upstream-Status: Submitted [https://lists.yoctoproject.org/pipermail/yocto/2018-October/042812.html] | ||
29 | |||
30 | Signed-off-by: Robert Yang <liezhi.yang@windriver.com> | ||
31 | --- | ||
32 | src/arch-mips.c | 3 ++- | ||
33 | 1 file changed, 2 insertions(+), 1 deletion(-) | ||
34 | |||
35 | diff --git a/src/arch-mips.c b/src/arch-mips.c | ||
36 | index ccb1834..02c608f 100644 | ||
37 | --- a/src/arch-mips.c | ||
38 | +++ b/src/arch-mips.c | ||
39 | @@ -567,7 +567,8 @@ mips_prelink_reloc (struct prelink_info *info, GElf_Addr r_offset, | ||
40 | if (dso->ehdr.e_type == ET_EXEC) | ||
41 | { | ||
42 | value = info->resolve (info, r_sym, r_type); | ||
43 | - value += info->resolvetls->offset - TLS_TP_OFFSET; | ||
44 | + if (info->resolvetls != NULL) | ||
45 | + value += info->resolvetls->offset - TLS_TP_OFFSET; | ||
46 | if (r_type == R_MIPS_TLS_TPREL32) | ||
47 | mips_prelink_32bit_reloc (dso, rela, value); | ||
48 | else | ||
49 | -- | ||
50 | 2.7.4 | ||
51 | |||
diff --git a/meta/recipes-devtools/prelink/prelink_git.bb b/meta/recipes-devtools/prelink/prelink_git.bb index 3f2a2e227d..b1261d5942 100644 --- a/meta/recipes-devtools/prelink/prelink_git.bb +++ b/meta/recipes-devtools/prelink/prelink_git.bb | |||
@@ -32,6 +32,7 @@ SRC_URI = "git://git.yoctoproject.org/prelink-cross.git;branch=cross_prelink_sta | |||
32 | file://prelink.cron.daily \ | 32 | file://prelink.cron.daily \ |
33 | file://prelink.default \ | 33 | file://prelink.default \ |
34 | file://macros.prelink \ | 34 | file://macros.prelink \ |
35 | file://0001-src-arch-mips.c-check-info-resolvetls-before-use-its.patch \ | ||
35 | " | 36 | " |
36 | UPSTREAM_CHECK_COMMITS = "1" | 37 | UPSTREAM_CHECK_COMMITS = "1" |
37 | 38 | ||