Resolves: RHEL-29528
This commit is contained in:
parent
2552ee98ca
commit
653aaca8c9
1
.gitignore
vendored
1
.gitignore
vendored
@ -64,3 +64,4 @@
|
|||||||
/systemtap-4.8.tar.gz
|
/systemtap-4.8.tar.gz
|
||||||
/systemtap-4.9.tar.gz
|
/systemtap-4.9.tar.gz
|
||||||
/systemtap-5.0.tar.gz
|
/systemtap-5.0.tar.gz
|
||||||
|
/systemtap-5.1.tar.gz
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
commit 0fef0bd60ff4b359a32da52262855dfe82fe51ae
|
|
||||||
gpg: Signature made Tue 14 Nov 2023 03:20:12 PM EST
|
|
||||||
gpg: using RSA key 4B35DCD2EA45C4E0783135BC8094BE9C9F4696A1
|
|
||||||
gpg: Can't check signature: No public key
|
|
||||||
Author: Yichun Zhang (agentzh) <yichun@openresty.com>
|
|
||||||
Date: Fri Nov 10 21:51:56 2023 -0800
|
|
||||||
|
|
||||||
PR31051: memory and uprobe leaks in early uprobe registraton code when errors happen
|
|
||||||
|
|
||||||
diff --git a/runtime/linux/uprobes-inode.c b/runtime/linux/uprobes-inode.c
|
|
||||||
index 997f4528d..289cce00b 100644
|
|
||||||
--- a/runtime/linux/uprobes-inode.c
|
|
||||||
+++ b/runtime/linux/uprobes-inode.c
|
|
||||||
@@ -529,6 +529,16 @@ stapiu_init(struct stapiu_consumer *consumers, size_t nconsumers)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unlikely(ret != 0)) {
|
|
||||||
+ for ( ;; ) {
|
|
||||||
+ struct stapiu_consumer *c = &consumers[i];
|
|
||||||
+ // protect against conceivable stapiu_refresh() at same time
|
|
||||||
+ mutex_lock(& c->consumer_lock);
|
|
||||||
+ stapiu_consumer_unreg(c);
|
|
||||||
+ mutex_unlock(& c->consumer_lock);
|
|
||||||
+ if (i == 0)
|
|
||||||
+ break;
|
|
||||||
+ i--;
|
|
||||||
+ }
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -545,7 +555,27 @@ stapiu_init(struct stapiu_consumer *consumers, size_t nconsumers)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- return ret;
|
|
||||||
+
|
|
||||||
+ if (unlikely(ret != 0)) {
|
|
||||||
+ int j;
|
|
||||||
+ for (j = 0; j < nconsumers; ++j) {
|
|
||||||
+ struct stapiu_consumer *c = &consumers[j];
|
|
||||||
+ // protect against conceivable stapiu_refresh() at same time
|
|
||||||
+ mutex_lock(& c->consumer_lock);
|
|
||||||
+ stapiu_consumer_unreg(c);
|
|
||||||
+ mutex_unlock(& c->consumer_lock);
|
|
||||||
+ }
|
|
||||||
+ for ( ;; ) {
|
|
||||||
+ struct stapiu_consumer *c = &consumers[i];
|
|
||||||
+ stap_cleanup_task_finder_target(&c->finder);
|
|
||||||
+ if (i == 0)
|
|
||||||
+ break;
|
|
||||||
+ i--;
|
|
||||||
+ }
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
147
RHEL-18334.patch
147
RHEL-18334.patch
@ -1,147 +0,0 @@
|
|||||||
commit b84a5e8c2c5a857c0790a71df7824259a95131cf
|
|
||||||
Author: William Cohen <wcohen@redhat.com>
|
|
||||||
Date: Mon Dec 4 11:28:10 2023 -0500
|
|
||||||
|
|
||||||
PR31074: Ensure that the set_kernel_string* functions limit their writes
|
|
||||||
|
|
||||||
Both the set_kernel_string and set_kernel_string_n function use the
|
|
||||||
underlying _stp_store_deref_string_ function to write strings. There
|
|
||||||
were two issues with the this function:
|
|
||||||
|
|
||||||
1) wrote MAXSTRINGLEN bytes even if string was shorter
|
|
||||||
2) null write at end could spill past end of buffer
|
|
||||||
|
|
||||||
The first issue was addressed by stopping to write once a null
|
|
||||||
character is encountered. The second issue is a side effect of C
|
|
||||||
implicit promotion of character constants to ints and was addressed by
|
|
||||||
explicitlying casting the character constants as a char.
|
|
||||||
|
|
||||||
The pr31074.exp test was added to verify that the write length are
|
|
||||||
limited to string length and the null write does not go beyond the end
|
|
||||||
of the buffer.
|
|
||||||
|
|
||||||
diff --git a/runtime/linux/loc2c-runtime.h b/runtime/linux/loc2c-runtime.h
|
|
||||||
index 68fbe2ab6..663360293 100644
|
|
||||||
--- a/runtime/linux/loc2c-runtime.h
|
|
||||||
+++ b/runtime/linux/loc2c-runtime.h
|
|
||||||
@@ -1007,11 +1007,14 @@ static inline int _stp_store_deref_string_(char *src, void *addr, size_t len,
|
|
||||||
{
|
|
||||||
for (i = 0; i < len - 1; ++i)
|
|
||||||
{
|
|
||||||
+ if (*src == '\0')
|
|
||||||
+ break;
|
|
||||||
err = __stp_put_either(*src++, (u8 *)addr + i, seg);
|
|
||||||
if (err)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
- err = __stp_put_either('\0', (u8 *)addr + i, seg);
|
|
||||||
+ /* PR31074: cast (char) '\0' to make sure right size */
|
|
||||||
+ err = __stp_put_either((char) '\0', (u8 *)addr + i, seg);
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
diff --git a/testsuite/systemtap.base/pr31074.exp b/testsuite/systemtap.base/pr31074.exp
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000..5b382b789
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/testsuite/systemtap.base/pr31074.exp
|
|
||||||
@@ -0,0 +1,5 @@
|
|
||||||
+# Check that the set_kernel_* functions work correctly.
|
|
||||||
+
|
|
||||||
+set test "pr31074"
|
|
||||||
+
|
|
||||||
+stap_run $test no_load $all_pass_string -g $srcdir/$subdir/$test.stp
|
|
||||||
diff --git a/testsuite/systemtap.base/pr31074.stp b/testsuite/systemtap.base/pr31074.stp
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000..930c276b5
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/testsuite/systemtap.base/pr31074.stp
|
|
||||||
@@ -0,0 +1,88 @@
|
|
||||||
+/*
|
|
||||||
+ * pr31074.stp
|
|
||||||
+ *
|
|
||||||
+ * Check that the set_kernel_string function work correctly.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+probe begin { println("systemtap starting probe") }
|
|
||||||
+probe end { println("systemtap ending probe") }
|
|
||||||
+
|
|
||||||
+global errors = 0
|
|
||||||
+
|
|
||||||
+function assert_string(test, expected, value)
|
|
||||||
+{
|
|
||||||
+ if (value == expected)
|
|
||||||
+ return 1
|
|
||||||
+ printf("systemtap test failure - %s: expected \"%s\", got \"%s\"\n",
|
|
||||||
+ test, expected, value)
|
|
||||||
+ errors++
|
|
||||||
+ return 0
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+function assert_not_reached(test)
|
|
||||||
+{
|
|
||||||
+ printf("systemtap test failure - %s: missing exception\n", test)
|
|
||||||
+ errors++
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+function assert_buffer_untouched(test, addr)
|
|
||||||
+{
|
|
||||||
+ if (!buffer_42(addr)) {
|
|
||||||
+ printf("systemtap test failure - %s: buffer overwritten\n", test)
|
|
||||||
+ errors++
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+probe end(1)
|
|
||||||
+{
|
|
||||||
+ test = "set_kernel_string"
|
|
||||||
+ addr3 = get_buffer3()
|
|
||||||
+ addr2 = get_buffer2()
|
|
||||||
+ if (assert_string(test, "", kernel_string(addr2))) {
|
|
||||||
+ set_kernel_string(addr2, "bar")
|
|
||||||
+ assert_string(test, "bar", kernel_string(addr2))
|
|
||||||
+ }
|
|
||||||
+ addr1 = get_buffer1()
|
|
||||||
+ if (assert_string(test, "", kernel_string(addr1))) {
|
|
||||||
+ set_kernel_string(addr1, "foo")
|
|
||||||
+ assert_string(test, "foo", kernel_string(addr1))
|
|
||||||
+ }
|
|
||||||
+ /* now check to make sure that "bar" has not been overwritten */
|
|
||||||
+ assert_string("no null overrun", "bar", kernel_string(addr2))
|
|
||||||
+ assert_buffer_untouched("no overrun", addr3)
|
|
||||||
+ if (!errors)
|
|
||||||
+ println("systemtap test success")
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+%{
|
|
||||||
+ static char buffer_x[4+4+MAXSTRINGLEN];
|
|
||||||
+%}
|
|
||||||
+
|
|
||||||
+function get_buffer1:long () %{
|
|
||||||
+ static char *buffer1 = &(buffer_x[0]);
|
|
||||||
+ memset(buffer1, 0, 4);
|
|
||||||
+ STAP_RETVALUE = (long)buffer1;
|
|
||||||
+%}
|
|
||||||
+
|
|
||||||
+function get_buffer2:long () %{
|
|
||||||
+ static char *buffer2 = &(buffer_x[4]);
|
|
||||||
+ memset(buffer2, 0, 4);
|
|
||||||
+ STAP_RETVALUE = (long)buffer2;
|
|
||||||
+%}
|
|
||||||
+
|
|
||||||
+function get_buffer3:long () %{
|
|
||||||
+ static char *buffer3 = &(buffer_x[8]);
|
|
||||||
+ memset(buffer3, 42, MAXSTRINGLEN);
|
|
||||||
+ STAP_RETVALUE = (long)buffer3;
|
|
||||||
+%}
|
|
||||||
+
|
|
||||||
+function buffer_42:long (addr:long) %{
|
|
||||||
+ int i;
|
|
||||||
+ char *buffer3 = (char *)STAP_ARG_addr;
|
|
||||||
+ STAP_RETVALUE = 1;
|
|
||||||
+ for(i=0; i< MAXSTRINGLEN; ++i){
|
|
||||||
+ if (buffer3[i] != 42)
|
|
||||||
+ STAP_RETVALUE = 0;
|
|
||||||
+ }
|
|
||||||
+%}
|
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (systemtap-5.0.tar.gz) = dc511a05e66abcbbd8c926973962751196180f3c571d0cd2a3b158ae367c5339ad32967a680ecd03224ab5f7ed2c55be7064867e4fb1b1cd7ea1cb21b2436e4c
|
SHA512 (systemtap-5.1.tar.gz) = da0fe237d2124031a5786d1221dbb420d90da5497376715fd43a7a9f61a354a229c1128e67ce6becbc012aa3796dc5d337149e239e3c1def0651b179e5bf199f
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
# work around flakey gcc warnings
|
||||||
|
%{!?with_Werror: %global with_Werror 0}
|
||||||
%{!?with_sqlite: %global with_sqlite 0%{?fedora} >= 17 || 0%{?rhel} >= 7}
|
%{!?with_sqlite: %global with_sqlite 0%{?fedora} >= 17 || 0%{?rhel} >= 7}
|
||||||
# prefer prebuilt docs
|
# prefer prebuilt docs
|
||||||
%{!?with_docs: %global with_docs 0}
|
%{!?with_docs: %global with_docs 0}
|
||||||
@ -90,7 +92,10 @@
|
|||||||
\
|
\
|
||||||
g stapusr 156\
|
g stapusr 156\
|
||||||
g stapsys 157\
|
g stapsys 157\
|
||||||
g stapdev 158
|
g stapdev 158\
|
||||||
|
g stapunpriv 159\
|
||||||
|
u stapunpriv 159 "systemtap unprivileged user" /var/lib/stapunpriv /sbin/nologin\
|
||||||
|
m stapunpriv stapunpriv
|
||||||
|
|
||||||
%define _systemtap_server_preinstall \
|
%define _systemtap_server_preinstall \
|
||||||
# See systemd-sysusers(8) sysusers.d(5)\
|
# See systemd-sysusers(8) sysusers.d(5)\
|
||||||
@ -115,8 +120,8 @@ m stapdev stapdev
|
|||||||
|
|
||||||
Name: systemtap
|
Name: systemtap
|
||||||
# PRERELEASE
|
# PRERELEASE
|
||||||
Version: 5.0
|
Version: 5.1
|
||||||
Release: 4%{?release_override}%{?dist}
|
Release: 1%{?release_override}%{?dist}
|
||||||
# for version, see also configure.ac
|
# for version, see also configure.ac
|
||||||
|
|
||||||
|
|
||||||
@ -153,9 +158,6 @@ License: GPL-2.0-or-later
|
|||||||
URL: http://sourceware.org/systemtap/
|
URL: http://sourceware.org/systemtap/
|
||||||
Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz
|
Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz
|
||||||
|
|
||||||
Patch1: RHEL-16549.patch
|
|
||||||
Patch2: RHEL-18334.patch
|
|
||||||
|
|
||||||
# Build*
|
# Build*
|
||||||
BuildRequires: make
|
BuildRequires: make
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
@ -397,7 +399,7 @@ with the optional dtrace-compatibility preprocessor to process related
|
|||||||
|
|
||||||
%package testsuite
|
%package testsuite
|
||||||
Summary: Instrumentation System Testsuite
|
Summary: Instrumentation System Testsuite
|
||||||
License: GPL-2.0-or-later AND GPL-2.0-only AND GPL-3.0-or-later AND MIT
|
License: GPL-2.0-or-later AND GPL AND GPL-2.0-only AND GPL-3.0-or-later AND MIT
|
||||||
URL: http://sourceware.org/systemtap/
|
URL: http://sourceware.org/systemtap/
|
||||||
Requires: systemtap = %{version}-%{release}
|
Requires: systemtap = %{version}-%{release}
|
||||||
Requires: systemtap-sdt-devel = %{version}-%{release}
|
Requires: systemtap-sdt-devel = %{version}-%{release}
|
||||||
@ -566,7 +568,6 @@ This package installs the services necessary on a virtual machine for a
|
|||||||
systemtap-runtime-virthost machine to execute systemtap scripts.
|
systemtap-runtime-virthost machine to execute systemtap scripts.
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if %{with_python3} && %{with_monitor}
|
|
||||||
%package jupyter
|
%package jupyter
|
||||||
Summary: ISystemtap jupyter kernel and examples
|
Summary: ISystemtap jupyter kernel and examples
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
@ -577,13 +578,11 @@ Requires: systemtap = %{version}-%{release}
|
|||||||
This package includes files needed to build and run
|
This package includes files needed to build and run
|
||||||
the interactive systemtap Jupyter kernel, either locally
|
the interactive systemtap Jupyter kernel, either locally
|
||||||
or within a container.
|
or within a container.
|
||||||
%endif
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch -P1 -p1
|
|
||||||
%patch -P2 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
@ -594,6 +593,13 @@ or within a container.
|
|||||||
%global dyninst_config --without-dyninst
|
%global dyninst_config --without-dyninst
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
# Enable/disable the dyninst pure-userspace backend
|
||||||
|
%if %{with_Werror}
|
||||||
|
%global Werror_config --enable-Werror
|
||||||
|
%else
|
||||||
|
%global Werror_config --disable-Werror
|
||||||
|
%endif
|
||||||
|
|
||||||
# Enable/disable the sqlite coverage testing support
|
# Enable/disable the sqlite coverage testing support
|
||||||
%if %{with_sqlite}
|
%if %{with_sqlite}
|
||||||
%global sqlite_config --enable-sqlite
|
%global sqlite_config --enable-sqlite
|
||||||
@ -681,7 +687,7 @@ or within a container.
|
|||||||
# We don't ship compileworthy python code, just oddball samples
|
# We don't ship compileworthy python code, just oddball samples
|
||||||
%global py_auto_byte_compile 0
|
%global py_auto_byte_compile 0
|
||||||
|
|
||||||
%configure %{dyninst_config} %{sqlite_config} %{crash_config} %{docs_config} %{rpm_config} %{java_config} %{virt_config} %{dracut_config} %{python3_config} %{python2_probes_config} %{python3_probes_config} %{httpd_config} %{bpf_config} %{debuginfod_config} --disable-silent-rules --with-extra-version="rpm %{version}-%{release}"
|
%configure %{Werror_config} %{dyninst_config} %{sqlite_config} %{crash_config} %{docs_config} %{rpm_config} %{java_config} %{virt_config} %{dracut_config} %{python3_config} %{python2_probes_config} %{python3_probes_config} %{httpd_config} %{bpf_config} %{debuginfod_config} --disable-silent-rules --with-extra-version="rpm %{version}-%{release}"
|
||||||
make %{?_smp_mflags} V=1
|
make %{?_smp_mflags} V=1
|
||||||
|
|
||||||
|
|
||||||
@ -839,6 +845,9 @@ echo '%_systemtap_runtime_preinstall' | systemd-sysusers --replace=%{_sysusersdi
|
|||||||
getent group stapusr >/dev/null || groupadd -f -g 156 -r stapusr
|
getent group stapusr >/dev/null || groupadd -f -g 156 -r stapusr
|
||||||
getent group stapsys >/dev/null || groupadd -f -g 157 -r stapsys
|
getent group stapsys >/dev/null || groupadd -f -g 157 -r stapsys
|
||||||
getent group stapdev >/dev/null || groupadd -f -g 158 -r stapdev
|
getent group stapdev >/dev/null || groupadd -f -g 158 -r stapdev
|
||||||
|
getent passwd stapunpriv >/dev/null || \
|
||||||
|
useradd -c "Systemtap Unprivileged User" -u 159 -g stapunpriv -d %{_localstatedir}/lib/stapunpriv -r -s /sbin/nologin stapunpriv 2>/dev/null || \
|
||||||
|
useradd -c "Systemtap Unprivileged User" -g stapunpriv -d %{_localstatedir}/lib/stapunpriv -r -s /sbin/nologin stapunpriv
|
||||||
%endif
|
%endif
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
@ -1285,14 +1294,12 @@ exit 0
|
|||||||
%{_sbindir}/stap-exporter
|
%{_sbindir}/stap-exporter
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if %{with_python3} && %{with_monitor}
|
|
||||||
%files jupyter
|
%files jupyter
|
||||||
%{_bindir}/stap-jupyter-container
|
%{_bindir}/stap-jupyter-container
|
||||||
%{_bindir}/stap-jupyter-install
|
%{_bindir}/stap-jupyter-install
|
||||||
%{_mandir}/man1/stap-jupyter.1*
|
%{_mandir}/man1/stap-jupyter.1*
|
||||||
%dir %{_datadir}/systemtap
|
%dir %{_datadir}/systemtap
|
||||||
%{_datadir}/systemtap/interactive-notebook
|
%{_datadir}/systemtap/interactive-notebook
|
||||||
%endif
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -1303,6 +1310,10 @@ exit 0
|
|||||||
|
|
||||||
# PRERELEASE
|
# PRERELEASE
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Apr 26 2024 Frank Ch. Eigler <fche@redhat.com> - 5.1-1
|
||||||
|
- Upstream release, see wiki page below for detailed notes.
|
||||||
|
https://sourceware.org/systemtap/wiki/SystemTapReleases
|
||||||
|
|
||||||
* Wed Dec 6 2023 William Cohen <wcohen@redhat.com> - 5.0-4
|
* Wed Dec 6 2023 William Cohen <wcohen@redhat.com> - 5.0-4
|
||||||
- RHEL-18334
|
- RHEL-18334
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user