diff --git a/bcc-0.30.0-Revert-Fix-bashreadline-4903.patch b/bcc-0.30.0-Revert-Fix-bashreadline-4903.patch new file mode 100644 index 0000000..28b1a4a --- /dev/null +++ b/bcc-0.30.0-Revert-Fix-bashreadline-4903.patch @@ -0,0 +1,179 @@ +From 0e81f1ef9145b853745fdd56808388c9b295b1f9 Mon Sep 17 00:00:00 2001 +From: Jerome Marchand +Date: Fri, 4 Oct 2024 10:01:54 +0200 +Subject: [PATCH] Revert "Fix bashreadline (#4903)" + +This reverts commit 706ec4fe3dbbd63f6d7adda8d8d7311afe998cfa. +--- + docker/Dockerfile.ubuntu | 2 +- + docker/build/Dockerfile.fedora | 2 +- + docker/build/Dockerfile.ubuntu | 2 +- + libbpf-tools/bashreadline.c | 40 +++------------------------------- + tools/bashreadline.py | 18 +-------------- + 5 files changed, 7 insertions(+), 57 deletions(-) + +diff --git a/docker/Dockerfile.ubuntu b/docker/Dockerfile.ubuntu +index a6afd969..cdb52871 100644 +--- a/docker/Dockerfile.ubuntu ++++ b/docker/Dockerfile.ubuntu +@@ -24,6 +24,6 @@ COPY --from=builder /root/bcc/*.deb /root/bcc/ + RUN \ + apt-get update -y && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y python3 python3-pip python-is-python3 binutils libelf1 kmod llvm-12-dev && \ +- pip3 install dnslib cachetools pyelftools && \ ++ pip3 install dnslib cachetools && \ + dpkg -i /root/bcc/*.deb && \ + apt-get clean +diff --git a/docker/build/Dockerfile.fedora b/docker/build/Dockerfile.fedora +index d135bcea..bf8c2b36 100644 +--- a/docker/build/Dockerfile.fedora ++++ b/docker/build/Dockerfile.fedora +@@ -59,7 +59,7 @@ RUN dnf -y install \ + iperf \ + netperf + +-RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1 pyelftools==0.30 ++RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1 + + RUN wget -O ruby-install-${RUBY_INSTALL_VERSION}.tar.gz \ + https://github.com/postmodern/ruby-install/archive/v${RUBY_INSTALL_VERSION}.tar.gz && \ +diff --git a/docker/build/Dockerfile.ubuntu b/docker/build/Dockerfile.ubuntu +index 50f4788a..7d29b66b 100644 +--- a/docker/build/Dockerfile.ubuntu ++++ b/docker/build/Dockerfile.ubuntu +@@ -81,7 +81,7 @@ done \ + && \ + apt-get -y clean' + +-RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1 pyelftools==0.30 ++RUN pip3 install pyroute2==0.5.18 netaddr==0.8.0 dnslib==0.9.14 cachetools==3.1.1 + + # FIXME this is faster than building from source, but it seems there is a bug + # in probing libruby.so rather than ruby binary +diff --git a/libbpf-tools/bashreadline.c b/libbpf-tools/bashreadline.c +index 41b6a600..b069f048 100644 +--- a/libbpf-tools/bashreadline.c ++++ b/libbpf-tools/bashreadline.c +@@ -90,41 +90,6 @@ static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt) + warn("lost %llu events on CPU #%d\n", lost_cnt, cpu); + } + +-static char *find_readline_function_name(const char *bash_path) +-{ +- bool found = false; +- int fd = -1; +- Elf *elf = NULL; +- Elf_Scn *scn = NULL; +- GElf_Shdr shdr; +- +- +- elf = open_elf(bash_path, &fd); +- +- while ((scn = elf_nextscn(elf, scn)) != NULL && !found) { +- gelf_getshdr(scn, &shdr); +- if (shdr.sh_type == SHT_SYMTAB || shdr.sh_type == SHT_DYNSYM) { +- Elf_Data *data = elf_getdata(scn, NULL); +- if (data != NULL) { +- GElf_Sym *symtab = (GElf_Sym *) data->d_buf; +- int sym_count = shdr.sh_size / shdr.sh_entsize; +- for (int i = 0; i < sym_count; ++i) { +- if(strcmp("readline_internal_teardown", elf_strptr(elf, shdr.sh_link, symtab[i].st_name)) == 0){ +- found = true; +- break; +- } +- } +- } +- } +- } +- +- close_elf(elf,fd); +- if (found) +- return "readline_internal_teardown"; +- else +- return "readline"; +-} +- + static char *find_readline_so() + { + const char *bash_path = "/bin/bash"; +@@ -135,7 +100,7 @@ static char *find_readline_so() + char path[128]; + char *result = NULL; + +- func_off = get_elf_func_offset(bash_path, find_readline_function_name(bash_path)); ++ func_off = get_elf_func_offset(bash_path, "readline"); + if (func_off >= 0) + return strdup(bash_path); + +@@ -194,6 +159,7 @@ int main(int argc, char **argv) + err = argp_parse(&argp, argc, argv, 0, NULL, NULL); + if (err) + return err; ++ + if (libreadline_path) { + readline_so_path = libreadline_path; + } else if ((readline_so_path = find_readline_so()) == NULL) { +@@ -221,7 +187,7 @@ int main(int argc, char **argv) + goto cleanup; + } + +- func_off = get_elf_func_offset(readline_so_path, find_readline_function_name(readline_so_path)); ++ func_off = get_elf_func_offset(readline_so_path, "readline"); + if (func_off < 0) { + warn("cound not find readline in %s\n", readline_so_path); + goto cleanup; +diff --git a/tools/bashreadline.py b/tools/bashreadline.py +index 7e8324a2..cfbf2364 100755 +--- a/tools/bashreadline.py ++++ b/tools/bashreadline.py +@@ -17,7 +17,6 @@ + # 12-Feb-2016 Allan McAleavy migrated to BPF_PERF_OUTPUT + + from __future__ import print_function +-from elftools.elf.elffile import ELFFile + from bcc import BPF + from time import strftime + import argparse +@@ -33,19 +32,6 @@ args = parser.parse_args() + + name = args.shared if args.shared else "/bin/bash" + +- +-def get_sym(filename): +- with open(filename, 'rb') as f: +- elf = ELFFile(f) +- symbol_table = elf.get_section_by_name(".dynsym") +- for symbol in symbol_table.iter_symbols(): +- if symbol.name == "readline_internal_teardown": +- return "readline_internal_teardown" +- return "readline" +- +- +-sym = get_sym(name) +- + # load BPF program + bpf_text = """ + #include +@@ -77,18 +63,16 @@ int printret(struct pt_regs *ctx) { + """ + + b = BPF(text=bpf_text) +-b.attach_uretprobe(name=name, sym=sym, fn_name="printret") ++b.attach_uretprobe(name=name, sym="readline", fn_name="printret") + + # header + print("%-9s %-7s %s" % ("TIME", "PID", "COMMAND")) + +- + def print_event(cpu, data, size): + event = b["events"].event(data) + print("%-9s %-7d %s" % (strftime("%H:%M:%S"), event.pid, + event.str.decode('utf-8', 'replace'))) + +- + b["events"].open_perf_buffer(print_event) + while 1: + try: +-- +2.46.0 + diff --git a/bcc.spec b/bcc.spec index f1763e8..db83fe8 100644 --- a/bcc.spec +++ b/bcc.spec @@ -25,12 +25,13 @@ Name: bcc Version: 0.30.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: BPF Compiler Collection (BCC) License: Apache-2.0 URL: https://github.com/iovisor/bcc Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Patch0: %%{name}-%%{version}-clang-fail-when-the-kheaders-ownership-is-wrong-4928.patch +Patch1: %%{name}-%%{version}-Revert-Fix-bashreadline-4903.patch # Arches will be included as upstream support is added and dependencies are # satisfied in the respective arches @@ -115,7 +116,6 @@ Summary: Command line tools for BPF Compiler Collection (BCC) Requires: bcc = %{version}-%{release} Requires: python3-%{name} = %{version}-%{release} Requires: python3-netaddr -Requires: python3-pyelftools %description tools Command line tools for BPF Compiler Collection (BCC) @@ -262,6 +262,9 @@ cp -a libbpf-tools/tmp-install/bin/* %{buildroot}/%{_sbindir}/ %endif %changelog +* Fri Oct 04 2024 Jerome Marchand - 0.30.0-3 +- Remove python3-pyelftools dependency (RHEL-60064) + * Mon Jun 24 2024 Troy Dawson - 0.30.0-2 - Bump release for June 2024 mass rebuild