diff options
author | Adrian Ratiu <adrian.ratiu@collabora.com> | 2021-06-21 12:21:40 +0300 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2021-06-21 14:26:52 +0100 |
commit | 6639b5025d4c120c30022cb2993832fcf0c2e928 (patch) | |
tree | e219e942707c4003aad70b0b2b09562ffbcba122 /sys-process/lsof/files | |
parent | dev-python/huawei-lte-api: remove old (diff) | |
download | gentoo-6639b5025d4c120c30022cb2993832fcf0c2e928.tar.gz gentoo-6639b5025d4c120c30022cb2993832fcf0c2e928.tar.bz2 gentoo-6639b5025d4c120c30022cb2993832fcf0c2e928.zip |
sys-process/lsof: backport arm sigbus crash fix
This backports an upstream fix for a crash which happens on
armv7a + glibc 2.33 due to a buffer misalignment.
Upstream issue: https://github.com/lsof-org/lsof/issues/160
Upstream commit: 21cb1dad1243f4c0a427d893babab12e48b60f0e
Bug: https://bugs.gentoo.org/797358
Closes: https://github.com/gentoo/gentoo/pull/21354
Acked-by: David Seifert <soap@gentoo.org>
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sys-process/lsof/files')
-rw-r--r-- | sys-process/lsof/files/lsof-4.94-arm-sigbus-fix.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/sys-process/lsof/files/lsof-4.94-arm-sigbus-fix.patch b/sys-process/lsof/files/lsof-4.94-arm-sigbus-fix.patch new file mode 100644 index 000000000000..95bad206372e --- /dev/null +++ b/sys-process/lsof/files/lsof-4.94-arm-sigbus-fix.patch @@ -0,0 +1,63 @@ +https://bugs.gentoo.org/797358 + +From 21cb1dad1243f4c0a427d893babab12e48b60f0e Mon Sep 17 00:00:00 2001 +From: Masatake YAMATO <yamato@redhat.com> +Date: Sun, 20 Jun 2021 21:40:55 +0900 +Subject: [PATCH] Adjust alignment of buffer passed to stat() + +Close #160. + +The original code passes char[] buffer to stat(). +This can be cause a SIGBUS. + +#160 reported an actual crash on armv7a + glibc-2.33 platform. +See also https://sourceware.org/bugzilla/show_bug.cgi?id=27993. + +The issue is reported by @10ne1. + +Signed-off-by: Masatake YAMATO <yamato@redhat.com> +[Adrian: Backported to 4.94] +Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> +--- a/misc.c ++++ b/misc.c +@@ -293,7 +293,15 @@ doinchild(fn, fp, rbuf, rbln) + */ + + int r_al, r_rbln; +- char r_arg[MAXPATHLEN+1], r_rbuf[MAXPATHLEN+1]; ++ char r_arg[MAXPATHLEN+1]; ++ union { ++ char r_rbuf[MAXPATHLEN+1]; ++ /* ++ * This field is only for adjusting the alignment of r_rbuf that ++ * can be used as an argument for stat(). ++ */ ++ struct stat _; ++ } r; + int (*r_fn)(); + /* + * Close sufficient open file descriptors except Pipes[0] and +@@ -358,16 +366,16 @@ doinchild(fn, fp, rbuf, rbln) + || read(Pipes[0], r_arg, r_al) != r_al + || read(Pipes[0], (char *)&r_rbln, sizeof(r_rbln)) + != (int)sizeof(r_rbln) +- || r_rbln < 1 || r_rbln > (int)sizeof(r_rbuf)) ++ || r_rbln < 1 || r_rbln > (int)sizeof(r.r_rbuf)) + break; +- zeromem (r_rbuf, r_rbln); +- rv = r_fn(r_arg, r_rbuf, r_rbln); ++ zeromem (r.r_rbuf, r_rbln); ++ rv = r_fn(r_arg, r.r_rbuf, r_rbln); + en = errno; + if (write(Pipes[3], (char *)&rv, sizeof(rv)) + != sizeof(rv) + || write(Pipes[3], (char *)&en, sizeof(en)) + != sizeof(en) +- || write(Pipes[3], r_rbuf, r_rbln) != r_rbln) ++ || write(Pipes[3], r.r_rbuf, r_rbln) != r_rbln) + break; + } + (void) _exit(0); +-- +2.32.0 + |