From: Francis Laniel <flaniel@linux.microsoft.com>
To: stable@vger.kernel.org
Cc: Greg KH <gregkh@linuxfoundation.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Francis Laniel <flaniel@linux.microsoft.com>
Subject: [PATCH 5.15.y v2 0/2] Return EADDRNOTAVAIL when func matches several symbols during kprobe creation
Date: Tue, 5 Dec 2023 19:57:47 +0100 [thread overview]
Message-ID: <20231205185749.130183-1-flaniel@linux.microsoft.com> (raw)
Hi!
The second patch of this series caused some troubles on 5.15.y, I apologize
about it [1].
As a consequence, I was asked to build and test all the stable kernels with this
patch for several architectures [2].
I would nonetheless like to emphasize this is the first time I sent a patch to
the stable kernel and the problem is the result of lack of experience
(Do I need to change the config? Do I need to change the patch? Do I need to
find another patch solving the CONFIG_LIVEPATCH dependencies? were the type of
questions I had in mind before sending it) rather than a desire to harm.
Regarding the series, the first patch is only needed on kernel 5.15.
Indeed the dependencies on CONFIG_LIVEPATCH
for kallsyms_on_each_symbol() was added in 3e3552056ab4
("kallsyms: only build {,module_}kallsyms_on_each_symbol when required").
This commit was first added to kernel 5.12, as git indicates it:
$ git name-rev --tags --name-only 3e3552056ab4
v5.12-rc1~67^2~8
Moreover, the first patch of this series, i.e. d721def7392a
("kallsyms: Make kallsyms_on_each_symbol generally available") was first added
in:
$ git name-rev --tags --name-only d721def7392a
v5.19-rc1~159^2~4^2~38^2~4
So, my patch only needs the first patch for the 5.15 kernel.
Using this patch as a solution for mine was pointed by Guenter Roeck [3].
So, I decided to build and test the stable kernels with this patch for several
architectures.
Regarding building, I did so using the following script:
------------------------------------------
for release in 4.14 4.19 5.4 5.10 5.15; do
git checkout "linux-${release}.y"
for arch in $(tuxmake build -A -r docker); do
outdir="$(git rev-parse --abbrev-ref HEAD)/${arch}"
mkdir -p $outdir
tuxmake -q -r docker -a $arch --kconfig-add kvm_guest.config --kconfig-add CONFIG_KPROBES=y -o $outdir
done
done
------------------------------------------
Note that, the branches were prepared before running the script with the patch
applied.
I obtained the following, i.e. there were no build errors:
------------------------------------------
../stable:
linux-4.14.y linux-4.19.y linux-5.10.y linux-5.15.y linux-5.4.y
../stable/linux-4.14.y:
arc arm arm64 armv5 hexagon i386 loongarch m68k mips openrisc parisc powerpc riscv s390 sh sparc um x86_64
../stable/linux-4.14.y/arc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-4.14.y/arm:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.14.y/arm64:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.14.y/armv5:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.14.y/hexagon:
../stable/linux-4.14.y/i386:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.14.y/loongarch:
../stable/linux-4.14.y/m68k:
../stable/linux-4.14.y/mips:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-4.14.y/openrisc:
../stable/linux-4.14.y/parisc:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.14.y/powerpc:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.14.y/riscv:
build-debug.log build.log metadata.json
../stable/linux-4.14.y/s390:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz
../stable/linux-4.14.y/sh:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.14.y/sparc:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.14.y/um:
build-debug.log build.log config linux metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.14.y/x86_64:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.19.y:
arc arm arm64 armv5 hexagon i386 loongarch m68k mips openrisc parisc powerpc riscv s390 sh sparc um x86_64
../stable/linux-4.19.y/arc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-4.19.y/arm:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.19.y/arm64:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.19.y/armv5:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.19.y/hexagon:
../stable/linux-4.19.y/i386:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.19.y/loongarch:
../stable/linux-4.19.y/m68k:
../stable/linux-4.19.y/mips:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-4.19.y/openrisc:
../stable/linux-4.19.y/parisc:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.19.y/powerpc:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.19.y/riscv:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.19.y/s390:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.19.y/sh:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.19.y/sparc:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-4.19.y/um:
build-debug.log build.log config linux metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-4.19.y/x86_64:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.10.y:
arc arm arm64 armv5 hexagon i386 loongarch m68k mips openrisc parisc powerpc riscv s390 sh sparc um x86_64
../stable/linux-5.10.y/arc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-5.10.y/arm:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.10.y/arm64:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.10.y/armv5:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.10.y/hexagon:
../stable/linux-5.10.y/i386:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.10.y/loongarch:
../stable/linux-5.10.y/m68k:
../stable/linux-5.10.y/mips:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-5.10.y/openrisc:
../stable/linux-5.10.y/parisc:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.10.y/powerpc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.10.y/riscv:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.10.y/s390:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.10.y/sh:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.10.y/sparc:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.10.y/um:
build-debug.log build.log config linux metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.10.y/x86_64:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.15.y:
arc arm arm64 armv5 hexagon i386 loongarch m68k mips openrisc parisc powerpc riscv s390 sh sparc um x86_64
../stable/linux-5.15.y/arc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-5.15.y/arm:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.15.y/arm64:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.15.y/armv5:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.15.y/hexagon:
../stable/linux-5.15.y/i386:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.15.y/loongarch:
../stable/linux-5.15.y/m68k:
../stable/linux-5.15.y/mips:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-5.15.y/openrisc:
../stable/linux-5.15.y/parisc:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.15.y/powerpc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.15.y/riscv:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.15.y/s390:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.15.y/sh:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.15.y/sparc:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.15.y/um:
build-debug.log build.log config linux metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.15.y/x86_64:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.4.y:
arc arm arm64 armv5 hexagon i386 loongarch m68k mips openrisc parisc powerpc riscv s390 sh sparc um x86_64
../stable/linux-5.4.y/arc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-5.4.y/arm:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.4.y/arm64:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.4.y/armv5:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.4.y/hexagon:
../stable/linux-5.4.y/i386:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.4.y/loongarch:
../stable/linux-5.4.y/m68k:
../stable/linux-5.4.y/mips:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map uImage.gz vmlinux.xz
../stable/linux-5.4.y/openrisc:
../stable/linux-5.4.y/parisc:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.4.y/powerpc:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.4.y/riscv:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz Image.gz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.4.y/s390:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.4.y/sh:
build-debug.log build.log config dtbs.tar.xz headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.4.y/sparc:
build-debug.log build.log config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz zImage
../stable/linux-5.4.y/um:
build-debug.log build.log config linux metadata.json modules.tar.xz System.map vmlinux.xz
../stable/linux-5.4.y/x86_64:
build-debug.log build.log bzImage config headers.tar.xz metadata.json modules.tar.xz System.map vmlinux.xz
------------------------------------------
Some directories, like hexagon, are empty. This is perfectly normal as there is
no gcc toolchain for these architectures.
Regarding testing, I only tested for arm and x86_64 for several reasons:
1. My script supports a few architectures (e.g. sparc is not supported) [4].
2. Some of the supported architecture does not handle correctly ssh (I still
need to polish this).
3. For arm64, I did not have the /sys/kernel/tracing available despite having
CONFIG_KPROBES. I may have forgotten a CONFIG_ for this kernel, thus I did not
test it.
The following script was used to test:
------------------------------------------
declare -A kernel_arches=( ['armel']='arm' ['amd64']='x86_64')
declare -A kernel_images=( ['armel']='zImage' ['amd64']='bzImage')
for release in 4.14 4.19 5.4 5.10 5.15; do
for qemu_arch in "${!kernel_arches[@]}"; do
kernel_arch=${kernel_arches[${qemu_arch}]}
kernel_image=${kernel_images[${qemu_arch}]}
bash run_extern_kernel.sh $qemu_arch ../stable/linux-${release}.y/$kernel_arch/$kernel_image
sleep 30
ssh -p 10022 root@localhost uname -mr
ssh -p 10022 root@localhost bash -c "echo 'p:myprobe name_show' > /sys/kernel/tracing/kprobe_events"
ssh -p 10022 root@localhost poweroff
sleep 30
done
done
------------------------------------------
And it gave the corresponding output, which proves everything works as expected:
------------------------------------------
4.14.331-00002-g7aa12df051fa armv7l
bash: line 1: echo: write error: Cannot assign requested address
4.14.331+ x86_64
bash: line 1: echo: write error: Cannot assign requested address
4.19.300-00001-g7cac16479cd7 armv7l
bash: line 1: echo: write error: Cannot assign requested address
4.19.300+ x86_64
bash: line 1: echo: write error: Cannot assign requested address
5.4.262-00001-g74ca00e4af8f armv7l
bash: line 1: echo: write error: Cannot assign requested address
5.4.262+ x86_64
bash: line 1: echo: write error: Cannot assign requested address
5.10.202-00001-gfff8e5c3be26 armv7l
bash: line 1: echo: write error: Cannot assign requested address
5.10.202+ x86_64
bash: line 1: echo: write error: Cannot assign requested address
5.15.141-00002-gfe40e56ab1f0 armv7l
bash: line 1: echo: write error: Cannot assign requested address
5.15.141+ x86_64
bash: line 1: echo: write error: Cannot assign requested address
------------------------------------------
I hope the proof given here would lead this patch to be merged in the stable
kernel.
If this is not enough, I will do my best to provide more.
Francis Laniel (1):
tracing/kprobes: Return EADDRNOTAVAIL when func matches several
symbols
Jiri Olsa (1):
kallsyms: Make kallsyms_on_each_symbol generally available
include/linux/kallsyms.h | 7 +++-
kernel/kallsyms.c | 2 -
kernel/trace/trace_kprobe.c | 74 +++++++++++++++++++++++++++++++++++++
kernel/trace/trace_probe.h | 1 +
4 files changed, 81 insertions(+), 3 deletions(-)
Best regards and thank you in advance.
---
[1]: https://lore.kernel.org/stable/CAEUSe78tYPTFuauB7cxZzvAeMhzB_25Q8DqLUfF7Nro9WsUhNw@mail.gmail.com/
[2]: https://lore.kernel.org/stable/2023120533-washtub-data-f661@gregkh/
[3]: https://lore.kernel.org/stable/06deae26-c59c-4746-867d-ab6f5852b0af@roeck-us.net/
[4]: https://gitlab.com/eiffel/qemu-scripts
--
2.34.1
next reply other threads:[~2023-12-05 18:58 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-05 18:57 Francis Laniel [this message]
2023-12-05 18:57 ` [PATCH 5.15.y v2 1/2] kallsyms: Make kallsyms_on_each_symbol generally available Francis Laniel
2023-12-20 14:47 ` Greg KH
2023-12-05 18:57 ` [PATCH 5.15.y v2 2/2] tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols Francis Laniel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231205185749.130183-1-flaniel@linux.microsoft.com \
--to=flaniel@linux.microsoft.com \
--cc=gregkh@linuxfoundation.org \
--cc=mhiramat@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox