[OE-core] [PATCH v2] glibc: fix Segmentation fault in gethostid.c
Yu, Mingli
mingli.yu at windriver.com
Thu Sep 20 06:39:07 UTC 2018
Will send out v3 with the update from glibc upstream.
Thanks,
On 2018年09月18日 17:47, mingli.yu at windriver.com wrote:
> From: Mingli Yu <Mingli.Yu at windriver.com>
>
> When run test program hostid, it encounters
> Segmentation fault as hp is NULL.
>
> # cat /mybuild/hostid.c
> #include <stdio.h>
> #include <unistd.h>
>
> int
> main(int argc, char *argv[])
> {
> long hostid;
> hostid = gethostid();
> printf("the hostid is %ld\n", hostid);
>
> }
>
> # gcc -o /mybuild/hostid /mybuild/hostid.c
> # /mybuild/hostid
> Segmentation fault
> # gdb /mybuild/hostid
> GNU gdb (GDB) 8.2
> Copyright (C) 2018 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> Type "show copying" and "show warranty" for details.
> This GDB was configured as "x86_64-wrs-linux".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>.
> Find the GDB manual and other documentation resources online at:
> <http://www.gnu.org/software/gdb/documentation/>.
>
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from /mybuild/hostid...done.
> (gdb) r
> Starting program: /mybuild/hostid
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x00007ffff7f0330e in gethostid () at ../sysdeps/unix/sysv/linux/gethostid.c:125
> 125 memcpy (&in, hp->h_addr,
> (gdb) bt
> #0 0x00007ffff7f0330e in gethostid () at ../sysdeps/unix/sysv/linux/gethostid.c:125
> #1 0x0000555555555159 in main ()
>
> Signed-off-by: Mingli Yu <Mingli.Yu at windriver.com>
> ---
> .../0001-gethostid.c-check-the-value-of-hp.patch | 75 ++++++++++++++++++++++
> meta/recipes-core/glibc/glibc_2.28.bb | 1 +
> 2 files changed, 76 insertions(+)
> create mode 100644 meta/recipes-core/glibc/glibc/0001-gethostid.c-check-the-value-of-hp.patch
>
> diff --git a/meta/recipes-core/glibc/glibc/0001-gethostid.c-check-the-value-of-hp.patch b/meta/recipes-core/glibc/glibc/0001-gethostid.c-check-the-value-of-hp.patch
> new file mode 100644
> index 0000000000..04d1662361
> --- /dev/null
> +++ b/meta/recipes-core/glibc/glibc/0001-gethostid.c-check-the-value-of-hp.patch
> @@ -0,0 +1,75 @@
> +From 84cc79a003cf1a29e0a45ee76b67a3800d9e412e Mon Sep 17 00:00:00 2001
> +From: Mingli Yu <Mingli.Yu at windriver.com>
> +Date: Tue, 18 Sep 2018 07:29:27 +0000
> +Subject: [PATCH] gethostid.c: check the value of hp
> +
> +Fix Segmentation fault in gethostid.c
> +
> +When run test program hostid, it encounters
> +Segmentation fault as hp is NULL.
> +
> + # cat /mybuild/hostid.c
> + #include <stdio.h>
> + #include <unistd.h>
> +
> + int
> + main(int argc, char *argv[])
> + {
> + long hostid;
> + hostid = gethostid();
> + printf("the hostid is %ld\n", hostid);
> + }
> +
> + # gcc -o /mybuild/hostid /mybuild/hostid.c
> + # /mybuild/hostid
> + Segmentation fault
> + # gdb /mybuild/hostid
> + GNU gdb (GDB) 8.2
> + Copyright (C) 2018 Free Software Foundation, Inc.
> + License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
> + This is free software: you are free to change and redistribute it.
> + There is NO WARRANTY, to the extent permitted by law.
> + Type "show copying" and "show warranty" for details.
> + This GDB was configured as "x86_64-wrs-linux".
> + Type "show configuration" for configuration details.
> + For bug reporting instructions, please see:
> + <http://www.gnu.org/software/gdb/bugs/>.
> + Find the GDB manual and other documentation resources online at:
> + <http://www.gnu.org/software/gdb/documentation/>.
> +
> + For help, type "help".
> + Type "apropos word" to search for commands related to "word"...
> + Reading symbols from /mybuild/hostid...done.
> + (gdb) r
> + Starting program: /mybuild/hostid
> +
> + Program received signal SIGSEGV, Segmentation fault.
> + 0x00007ffff7f0330e in gethostid () at ../sysdeps/unix/sysv/linux/gethostid.c:125
> + 125 memcpy (&in, hp->h_addr,
> + (gdb) bt
> + #0 0x00007ffff7f0330e in gethostid () at ../sysdeps/unix/sysv/linux/gethostid.c:125
> + #1 0x0000555555555159 in main ()
> +
> +Upstream-Status: Submitted[https://sourceware.org/bugzilla/show_bug.cgi?id=23679]
> +
> +Signed-off-by: Mingli Yu <Mingli.Yu at windriver.com>
> +---
> + sysdeps/unix/sysv/linux/gethostid.c | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/sysdeps/unix/sysv/linux/gethostid.c b/sysdeps/unix/sysv/linux/gethostid.c
> +index 2e20f034dc..5904b61c40 100644
> +--- a/sysdeps/unix/sysv/linux/gethostid.c
> ++++ b/sysdeps/unix/sysv/linux/gethostid.c
> +@@ -102,7 +102,7 @@ gethostid (void)
> + {
> + int ret = __gethostbyname_r (hostname, &hostbuf,
> + tmpbuf.data, tmpbuf.length, &hp, &herr);
> +- if (ret == 0)
> ++ if (ret == 0 && hp != NULL)
> + break;
> + else
> + {
> +--
> +2.13.3
> +
> diff --git a/meta/recipes-core/glibc/glibc_2.28.bb b/meta/recipes-core/glibc/glibc_2.28.bb
> index 0ebbaf9610..0a8fa0c25f 100644
> --- a/meta/recipes-core/glibc/glibc_2.28.bb
> +++ b/meta/recipes-core/glibc/glibc_2.28.bb
> @@ -45,6 +45,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
> file://0028-bits-siginfo-consts.h-enum-definition-for-TRAP_HWBKP.patch \
> file://0029-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch \
> file://0030-intl-Emit-no-lines-in-bison-generated-files.patch \
> + file://0001-gethostid.c-check-the-value-of-hp.patch \
> "
>
> NATIVESDKFIXES ?= ""
>
More information about the Openembedded-core
mailing list