diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2018-12-17 04:11:34 +0300 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2019-01-09 02:21:44 +0300 |
commit | 1a4b7ee28bf7413af6513fb45ad0d0736048f866 (patch) | |
tree | 79f6d8ea698cab8f2eaf4f54b793d2ca7a1451ce /meta-openembedded/meta-networking/recipes-netkit/netkit-telnet | |
parent | 5b9ede0403237c7dace972affa65cf64a1aadd0e (diff) | |
download | openbmc-1a4b7ee28bf7413af6513fb45ad0d0736048f866.tar.xz |
reset upstream subtrees to yocto 2.6
Reset the following subtrees on thud HEAD:
poky: 87e3a9739d
meta-openembedded: 6094ae18c8
meta-security: 31dc4e7532
meta-raspberrypi: a48743dc36
meta-xilinx: c42016e2e6
Also re-apply backports that didn't make it into thud:
poky:
17726d0 systemd-systemctl-native: handle Install wildcards
meta-openembedded:
4321a5d libtinyxml2: update to 7.0.1
042f0a3 libcereal: Add native and nativesdk classes
e23284f libcereal: Allow empty package
030e8d4 rsyslog: curl-less build with fmhttp PACKAGECONFIG
179a1b9 gtest: update to 1.8.1
Squashed OpenBMC subtree compatibility updates:
meta-aspeed:
Brad Bishop (1):
aspeed: add yocto 2.6 compatibility
meta-ibm:
Brad Bishop (1):
ibm: prepare for yocto 2.6
meta-ingrasys:
Brad Bishop (1):
ingrasys: set layer compatibility to yocto 2.6
meta-openpower:
Brad Bishop (1):
openpower: set layer compatibility to yocto 2.6
meta-phosphor:
Brad Bishop (3):
phosphor: set layer compatibility to thud
phosphor: libgpg-error: drop patches
phosphor: react to fitimage artifact rename
Ed Tanous (4):
Dropbear: upgrade options for latest upgrade
yocto2.6: update openssl options
busybox: remove upstream watchdog patch
systemd: Rebase CONFIG_CGROUP_BPF patch
Change-Id: I7b1fe71cca880d0372a82d94b5fd785323e3a9e7
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'meta-openembedded/meta-networking/recipes-netkit/netkit-telnet')
2 files changed, 127 insertions, 9 deletions
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch new file mode 100644 index 000000000..945785d3c --- /dev/null +++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch @@ -0,0 +1,114 @@ +From 06ed6a6bf25a22902846097d6b6c97e070c2c326 Mon Sep 17 00:00:00 2001 +From: Seiichi Ishitsuka <ishitsuka.sc@ncos.nec.co.jp> +Date: Fri, 1 Jun 2018 14:27:35 +0900 +Subject: [PATCH] telnetd: Fix deadlock on cleanup + +The cleanup function in telnetd is called both directly and on SIGCHLD +signals. This, unfortunately, triggered a deadlock in eglibc 2.9 while +running on a 2.6.31.11 kernel. + +What we were seeing is hangs like these: + + (gdb) bt + #0 0xb7702424 in __kernel_vsyscall () + #1 0xb7658e61 in __lll_lock_wait_private () from ./lib/libc.so.6 + #2 0xb767e7b5 in _L_lock_15 () from ./lib/libc.so.6 + #3 0xb767e6e0 in utmpname () from ./lib/libc.so.6 + #4 0xb76bcde7 in logout () from ./lib/libutil.so.1 + #5 0x0804c827 in cleanup () + #6 <signal handler called> + #7 0xb7702424 in __kernel_vsyscall () + #8 0xb7641003 in __fcntl_nocancel () from ./lib/libc.so.6 + #9 0xb767e0c3 in getutline_r_file () from ./lib/libc.so.6 + #10 0xb767d675 in getutline_r () from ./lib/libc.so.6 + #11 0xb76bce42 in logout () from ./lib/libutil.so.1 + #12 0x0804c827 in cleanup () + #13 0x0804a0b5 in telnet () + #14 0x0804a9c3 in main () + +and what has happened here is that the user closes the telnet session +via the escape character. This causes telnetd to call cleanup in frame +the SIGCHLD signal is delivered while telnetd is executing cleanup. + +Telnetd then calls the signal handler for SIGCHLD, which is cleanup(). +Ouch. The actual deadlock is in libc. getutline_r in frame #10 gets the +__libc_utmp_lock lock, and utmpname above does the same thing in frame + +The fix registers the SIGCHLD handler as cleanup_sighandler, and makes +cleanup disable the SIGCHLD signal before calling cleanup_sighandler. + +Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net> + +The patch was imported from the Ubuntu netkit-telnet package. +(https://bugs.launchpad.net/ubuntu/+source/netkit-telnet/+bug/507455) + +A previous patch declaring attributes of functions, but it is not used +in upstream. + +Signed-off-by: Seiichi Ishitsuka <ishitsuka.sc@ncos.nec.co.jp> +--- + telnetd/ext.h | 1 + + telnetd/sys_term.c | 17 ++++++++++++++++- + telnetd/telnetd.c | 2 +- + 3 files changed, 18 insertions(+), 2 deletions(-) + +diff --git a/telnetd/ext.h b/telnetd/ext.h +index b98d6ec..08f9d07 100644 +--- a/telnetd/ext.h ++++ b/telnetd/ext.h +@@ -97,6 +97,7 @@ void add_slc(int, int, int); + void check_slc(void); + void change_slc(int, int, int); + void cleanup(int); ++void cleanup_sighandler(int); + void clientstat(int, int, int); + void copy_termbuf(char *, int); + void deferslc(void); +diff --git a/telnetd/sys_term.c b/telnetd/sys_term.c +index 5b4aa84..c4fb0f7 100644 +--- a/telnetd/sys_term.c ++++ b/telnetd/sys_term.c +@@ -719,7 +719,7 @@ static void addarg(struct argv_stuff *avs, const char *val) { + * This is the routine to call when we are all through, to + * clean up anything that needs to be cleaned up. + */ +-void cleanup(int sig) { ++void cleanup_sighandler(int sig) { + char *p; + (void)sig; + +@@ -742,3 +742,18 @@ void cleanup(int sig) { + shutdown(net, 2); + exit(0); + } ++ ++void cleanup(int sig) { ++ sigset_t mask, oldmask; ++ ++ /* Set up the mask of signals to temporarily block. */ ++ sigemptyset (&mask); ++ sigaddset (&mask, SIGCHLD); ++ ++ /* Block SIGCHLD while running cleanup */ ++ sigprocmask (SIG_BLOCK, &mask, &oldmask); ++ ++ cleanup_sighandler(sig); ++ /* Technically not needed since cleanup_sighandler exits */ ++ sigprocmask (SIG_UNBLOCK, &mask, NULL); ++} +diff --git a/telnetd/telnetd.c b/telnetd/telnetd.c +index 9ace838..788919c 100644 +--- a/telnetd/telnetd.c ++++ b/telnetd/telnetd.c +@@ -833,7 +833,7 @@ void telnet(int f, int p) + signal(SIGTTOU, SIG_IGN); + #endif + +- signal(SIGCHLD, cleanup); ++ signal(SIGCHLD, cleanup_sighandler); + + #ifdef TIOCNOTTY + { +-- +2.7.4 + diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb index 807b56644..db4b1c98c 100644 --- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb +++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb @@ -5,14 +5,18 @@ DEPENDS = "ncurses" LICENSE = "BSD" LIC_FILES_CHKSUM = "file://telnet/telnet.cc;beginline=2;endline=3;md5=780868e7b566313e70cb701560ca95ef" -SRC_URI = "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${BP}.tar.gz \ +SRC_URI = "http://ftp.linux.org.uk/pub/linux/Networking/netkit/${BP}.tar.gz \ file://To-aviod-buffer-overflow-in-telnet.patch \ file://Warning-fix-in-the-step-of-install.patch \ file://telnet-xinetd \ file://cross-compile.patch \ file://0001-telnet-telnetd-Fix-print-format-strings.patch \ + file://0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch \ " +UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/n/netkit-telnet/" +UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.orig\.tar" + EXTRA_OEMAKE = "INSTALLROOT=${D} SBINDIR=${sbindir} DAEMONMODE=755 \ MANMODE=644 MANDIR=${mandir}" @@ -46,16 +50,16 @@ do_install () { install -p -m644 ${WORKDIR}/telnet-xinetd ${D}/etc/xinetd.d/telnet } -pkg_postinst_${PN} () { -#!/bin/sh - update-alternatives --install ${bindir}/telnet telnet telnet.${PN} 100 -} +inherit update-alternatives -pkg_prerm_${PN} () { -#!/bin/sh - update-alternatives --remove telnet telnet.${PN} 100 -} +ALTERNATIVE_PRIORITY = "100" +ALTERNATIVE_${PN} = "telnet" +ALTERNATIVE_LINK_NAME[telnet] = "${bindir}/telnet" +ALTERNATIVE_TARGET[telnet] = "${bindir}/telnet.${PN}" SRC_URI[md5sum] = "d6beabaaf53fe6e382c42ce3faa05a36" SRC_URI[sha256sum] = "9c80d5c7838361a328fb6b60016d503def9ce53ad3c589f3b08ff71a2bb88e00" FILES_${PN} += "${sbindir}/in.* ${libdir}/* ${sysconfdir}/xinetd.d/*" + +# http://errors.yoctoproject.org/Errors/Details/186954/ +EXCLUDE_FROM_WORLD_libc-musl = "1" |