[PATCH 5.15.y v2 0/2] Return EADDRNOTAVAIL when func matches several symbols during kprobe creation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxx/
[2]: https://lore.kernel.org/stable/2023120533-washtub-data-f661@gregkh/
[3]: https://lore.kernel.org/stable/06deae26-c59c-4746-867d-ab6f5852b0af@xxxxxxxxxxxx/
[4]: https://gitlab.com/eiffel/qemu-scripts
--
2.34.1





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux