diff options
author | Mike Frysinger <vapier@gentoo.org> | 2011-07-12 03:32:10 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2011-07-12 03:32:10 +0000 |
commit | f524f137a3bd0dfcecdb29dd7163f164a6414834 (patch) | |
tree | a93131ff294379abee8d9accafc38fbd1a0def63 /sys-apps | |
parent | Version bump. Update to EAPI 4, remove old kernel version warning, use system... (diff) | |
download | gentoo-2-f524f137a3bd0dfcecdb29dd7163f164a6414834.tar.gz gentoo-2-f524f137a3bd0dfcecdb29dd7163f164a6414834.tar.bz2 gentoo-2-f524f137a3bd0dfcecdb29dd7163f164a6414834.zip |
Add fixes from upstream for `mount -a` segfault #366213 and `umount -l` stalls #370051 by Pacho Ramos.
(Portage version: 2.2.0_alpha43/cvs/Linux x86_64)
Diffstat (limited to 'sys-apps')
-rw-r--r-- | sys-apps/util-linux/ChangeLog | 10 | ||||
-rw-r--r-- | sys-apps/util-linux/files/util-linux-2.19.1-mount-a-segv.patch | 86 | ||||
-rw-r--r-- | sys-apps/util-linux/files/util-linux-2.19.1-umount-l-nfs.patch | 92 | ||||
-rw-r--r-- | sys-apps/util-linux/util-linux-2.19.1-r1.ebuild | 115 |
4 files changed, 302 insertions, 1 deletions
diff --git a/sys-apps/util-linux/ChangeLog b/sys-apps/util-linux/ChangeLog index 960e249de644..7fbd37dd8e60 100644 --- a/sys-apps/util-linux/ChangeLog +++ b/sys-apps/util-linux/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog for sys-apps/util-linux # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-apps/util-linux/ChangeLog,v 1.344 2011/06/17 19:06:41 c1pher Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-apps/util-linux/ChangeLog,v 1.345 2011/07/12 03:32:10 vapier Exp $ + +*util-linux-2.19.1-r1 (12 Jul 2011) + + 12 Jul 2011; Mike Frysinger <vapier@gentoo.org> +util-linux-2.19.1-r1.ebuild, + +files/util-linux-2.19.1-mount-a-segv.patch, + +files/util-linux-2.19.1-umount-l-nfs.patch: + Add fixes from upstream for `mount -a` segfault #366213 and `umount -l` + stalls #370051 by Pacho Ramos. 17 Jun 2011; Dane Smith <c1pher@gentoo.org> util-linux-2.19.1.ebuild, metadata.xml: diff --git a/sys-apps/util-linux/files/util-linux-2.19.1-mount-a-segv.patch b/sys-apps/util-linux/files/util-linux-2.19.1-mount-a-segv.patch new file mode 100644 index 000000000000..1f358bafe3c7 --- /dev/null +++ b/sys-apps/util-linux/files/util-linux-2.19.1-mount-a-segv.patch @@ -0,0 +1,86 @@ +https://bugs.gentoo.org/366213 + +From f53edda83ebcfd7015c3f35196d6cbd7bc2d8369 Mon Sep 17 00:00:00 2001 +From: Karel Zak <kzak@redhat.com> +Date: Wed, 11 May 2011 16:57:27 +0200 +Subject: [PATCH] mount: -a segfaults when 4th field is omitted (mount + options) + + # echo 'tmpd /tmp/x tmpfs' >> /etc/fstab + # mkdir /tmp/x + # mount -a + segfault + +Reported-by: Mike Frysinger <vapier@gentoo.org> +Signed-off-by: Karel Zak <kzak@redhat.com> +--- + mount/mount.c | 8 +++++--- + mount/mount_mntent.c | 5 +++-- + mount/sundries.c | 2 ++ + 3 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/mount/mount.c b/mount/mount.c +index ba71149..29963c2 100644 +--- a/mount/mount.c ++++ b/mount/mount.c +@@ -1163,7 +1163,9 @@ is_mounted_same_loopfile(const char *node0, const char *loopfile, unsigned long + res = loopfile_used_with((char *) mnt->m.mnt_fsname, + loopfile, offset); + +- else if ((p = strstr(mnt->m.mnt_opts, "loop="))) { ++ else if (mnt->m.mnt_opts && ++ (p = strstr(mnt->m.mnt_opts, "loop="))) ++ { + char *dev = xstrdup(p+5); + if ((p = strchr(dev, ','))) + *p = '\0'; +@@ -2052,8 +2054,8 @@ is_fstab_entry_mounted(struct mntentchn *mc, int verbose) + goto yes; + + /* extra care for loop devices */ +- if ((strstr(mc->m.mnt_opts, "loop=") || +- (stat(mc->m.mnt_fsname, &st) == 0 && S_ISREG(st.st_mode)))) { ++ if ((mc->m.mnt_opts && strstr(mc->m.mnt_opts, "loop=")) || ++ (stat(mc->m.mnt_fsname, &st) == 0 && S_ISREG(st.st_mode))) { + + char *p = get_option_value(mc->m.mnt_opts, "offset="); + uintmax_t offset = 0; +diff --git a/mount/mount_mntent.c b/mount/mount_mntent.c +index d90def3..f42c0ad 100644 +--- a/mount/mount_mntent.c ++++ b/mount/mount_mntent.c +@@ -70,7 +70,7 @@ my_addmntent (mntFILE *mfp, struct my_mntent *mnt) { + m1 = mangle(mnt->mnt_fsname); + m2 = mangle(mnt->mnt_dir); + m3 = mangle(mnt->mnt_type); +- m4 = mangle(mnt->mnt_opts); ++ m4 = mnt->mnt_opts ? mangle(mnt->mnt_opts) : "rw"; + + res = fprintf (mfp->mntent_fp, "%s %s %s %s %d %d\n", + m1, m2, m3, m4, mnt->mnt_freq, mnt->mnt_passno); +@@ -78,7 +78,8 @@ my_addmntent (mntFILE *mfp, struct my_mntent *mnt) { + free(m1); + free(m2); + free(m3); +- free(m4); ++ if (mnt->mnt_opts) ++ free(m4); + return (res < 0) ? 1 : 0; + } + +diff --git a/mount/sundries.c b/mount/sundries.c +index ae4501a..2dec37f 100644 +--- a/mount/sundries.c ++++ b/mount/sundries.c +@@ -217,6 +217,8 @@ matching_opts (const char *options, const char *test_opts) { + + if (test_opts == NULL) + return 1; ++ if (options == NULL) ++ options = ""; + + len = strlen(test_opts); + q = alloca(len+1); +-- +1.7.6 + diff --git a/sys-apps/util-linux/files/util-linux-2.19.1-umount-l-nfs.patch b/sys-apps/util-linux/files/util-linux-2.19.1-umount-l-nfs.patch new file mode 100644 index 000000000000..72ec3aa736b9 --- /dev/null +++ b/sys-apps/util-linux/files/util-linux-2.19.1-umount-l-nfs.patch @@ -0,0 +1,92 @@ +https://bugs.gentoo.org/370051 + +From b3b0c657818aa6191e6494f88d671601dd9d837d Mon Sep 17 00:00:00 2001 +From: Petr Uzel <petr.uzel@suse.cz> +Date: Wed, 29 Jun 2011 10:24:09 +0200 +Subject: [PATCH] umount: do not hang with disconnected NFS mounts + +Since util-linux commit f4612577c942a3683b97632ad0b49671897c2070, +umount stat(2)s its argument to check whether it can be associated +with some loop device. This could hang with broken NFS mounts. + +Fix by first checking mtab if umount's argument is mounted and only if +we fail, check if there is a loop device associated. + +http://marc.info/?l=util-linux-ng&m=130924963804836&w=2 + +Reported-by: Konstantin Khlebnikov <khlebnikov@openvz.org> +Signed-off-by: Petr Uzel <petr.uzel@suse.cz> +--- + mount/umount.c | 42 ++++++++++++++++++++++-------------------- + 1 files changed, 22 insertions(+), 20 deletions(-) + +diff --git a/mount/umount.c b/mount/umount.c +index 0349cb3..96c940e 100644 +--- a/mount/umount.c ++++ b/mount/umount.c +@@ -600,6 +600,7 @@ umount_file (char *arg) { + int fstab_has_user, fstab_has_users, fstab_has_owner, fstab_has_group; + int ok, status = 0; + struct stat statbuf; ++ char *loopdev = NULL; + + if (!*arg) { /* "" would be expanded to `pwd` */ + die(2, _("Cannot unmount \"\"\n")); +@@ -608,26 +609,7 @@ umount_file (char *arg) { + + file = canonicalize(arg); /* mtab paths are canonicalized */ + +- /* if file is a regular file, check if it is associated +- * with some loop device +- */ +- if (!stat(file, &statbuf) && S_ISREG(statbuf.st_mode)) { +- char *loopdev = NULL; +- switch (find_loopdev_by_backing_file(file, &loopdev)) { +- case 0: +- if (verbose) +- printf(_("%s is associated with %s, trying to unmount it\n"), +- arg, loopdev); +- file = loopdev; +- break; +- case 2: +- if (verbose) +- printf(_("%s is associated with more than one loop device: not unmounting\n"), +- arg); +- break; +- } +- } +- ++try_loopdev: + if (verbose > 1) + printf(_("Trying to unmount %s\n"), file); + +@@ -659,6 +641,26 @@ umount_file (char *arg) { + if (!mc && verbose) + printf(_("Could not find %s in mtab\n"), file); + ++ /* not found in mtab - check if it is associated with some loop device ++ * (only if it is a regular file) ++ */ ++ if (!mc && !loopdev && !stat(file, &statbuf) && S_ISREG(statbuf.st_mode)) { ++ switch (find_loopdev_by_backing_file(file, &loopdev)) { ++ case 0: ++ if (verbose) ++ printf(_("%s is associated with %s\n"), ++ arg, loopdev); ++ file = loopdev; ++ goto try_loopdev; ++ break; ++ case 2: ++ if (verbose) ++ printf(_("%s is associated with more than one loop device: not unmounting\n"), ++ arg); ++ break; ++ } ++ } ++ + if (restricted) { + char *mtab_user = NULL; + +-- +1.7.6 + diff --git a/sys-apps/util-linux/util-linux-2.19.1-r1.ebuild b/sys-apps/util-linux/util-linux-2.19.1-r1.ebuild new file mode 100644 index 000000000000..14d3b970af7a --- /dev/null +++ b/sys-apps/util-linux/util-linux-2.19.1-r1.ebuild @@ -0,0 +1,115 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/util-linux/util-linux-2.19.1-r1.ebuild,v 1.1 2011/07/12 03:32:10 vapier Exp $ + +EAPI="2" + +EGIT_REPO_URI="git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git" +inherit eutils toolchain-funcs libtool flag-o-matic +[[ ${PV} == "9999" ]] && inherit git autotools + +MY_PV=${PV/_/-} +MY_P=${PN}-${MY_PV} +S=${WORKDIR}/${MY_P} + +DESCRIPTION="Various useful Linux utilities" +HOMEPAGE="http://www.kernel.org/pub/linux/utils/util-linux/" +if [[ ${PV} == "9999" ]] ; then + SRC_URI="" + #KEYWORDS="" +else + SRC_URI="mirror://kernel/linux/utils/util-linux/v${PV:0:4}/${MY_P}.tar.bz2 + loop-aes? ( http://loop-aes.sourceforge.net/updates/util-linux-2.19.1-20110510.diff.bz2 )" + KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86" +fi + +LICENSE="GPL-2" +SLOT="0" +IUSE="+cramfs crypt loop-aes ncurses nls old-linux perl selinux slang uclibc unicode" + +RDEPEND="!sys-process/schedutils + !sys-apps/setarch + !<sys-libs/e2fsprogs-libs-1.41.8 + !<sys-fs/e2fsprogs-1.41.8 + cramfs? ( sys-libs/zlib ) + ncurses? ( >=sys-libs/ncurses-5.2-r2 ) + perl? ( dev-lang/perl ) + selinux? ( sys-libs/libselinux ) + slang? ( sys-libs/slang )" +DEPEND="${RDEPEND} + nls? ( sys-devel/gettext ) + virtual/os-headers" + +src_prepare() { + if [[ ${PV} == "9999" ]] ; then + autopoint --force + eautoreconf + else + use loop-aes && epatch "${WORKDIR}"/util-linux-*.diff + fi + epatch "${FILESDIR}"/${P}-mount-a-segv.patch #366213 + epatch "${FILESDIR}"/${P}-umount-l-nfs.patch #370051 + use uclibc && sed -i -e s/versionsort/alphasort/g -e s/strverscmp.h/dirent.h/g mount/lomount.c + elibtoolize +} + +lfs_fallocate_test() { + # Make sure we can use fallocate with LFS #300307 + cat <<-EOF > "${T}"/fallocate.c + #define _GNU_SOURCE + #include <fcntl.h> + main() { return fallocate(0, 0, 0, 0); } + EOF + append-lfs-flags + $(tc-getCC) ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} "${T}"/fallocate.c -o /dev/null >/dev/null 2>&1 \ + || export ac_cv_func_fallocate=no + rm -f "${T}"/fallocate.c +} + +usex() { use $1 && echo ${2:-yes} || echo ${3:-no} ; } +src_configure() { + lfs_fallocate_test + econf \ + --enable-fs-paths-extra=/usr/sbin \ + $(use_enable nls) \ + --enable-agetty \ + $(use_enable cramfs) \ + $(use_enable old-linux elvtune) \ + --with-ncurses=$(usex ncurses $(usex unicode auto yes) no) \ + --disable-init \ + --disable-kill \ + --disable-last \ + --disable-mesg \ + --enable-partx \ + --enable-raw \ + --enable-rename \ + --disable-reset \ + --disable-login-utils \ + --enable-schedutils \ + --disable-wall \ + --enable-write \ + --without-pam \ + $(use_with selinux) \ + $(use_with slang) \ + $(tc-has-tls || echo --disable-tls) +} + +src_install() { + emake install DESTDIR="${D}" || die "install failed" + dodoc AUTHORS NEWS README* TODO docs/* + + if ! use perl ; then #284093 + rm "${D}"/usr/bin/chkdupexe || die + rm "${D}"/usr/share/man/man1/chkdupexe.1 || die + fi + + # need the libs in / + gen_usr_ldscript -a blkid uuid + # e2fsprogs-libs didnt install .la files, and .pc work fine + rm -f "${D}"/usr/$(get_libdir)/*.la + + if use crypt ; then + newinitd "${FILESDIR}"/crypto-loop.initd crypto-loop || die + newconfd "${FILESDIR}"/crypto-loop.confd crypto-loop || die + fi +} |