Description of problem:
systemtap creates kernel modules that are not compatible with the latest kernel headers distributed
Version-Release number of selected component (if applicable):
4.4-0.20200805git82b8e1a07.fc33
How reproducible:
100%
Steps to Reproduce:
1. Set up a machine with current Fedora 33 software including systemtap. I used vagrant with a simple config file (comments and blank lines removed):
Vagrant.configure("2") do |config|
config.vm.box = "fedora/33-cloud-base"
config.vm.provider "libvirt" do |v|
v.memory = 2048
v.cpus = 4
end
config.vm.provision "shell", inline: <<-END
dnf install -y systemtap
dnf upgrade -y
END
end
"vagrant up" to set up the VM (I got box version v33.20201019.0 downloaded), then "vagrant reload" to restart using the newly updated kernel.
2. Run a simple stap test: "stap -e 'probe begin { print("hi\n"); exit(); }'"
Actual results:
In file included from /usr/share/systemtap/runtime/linux/runtime.h:234,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
/usr/share/systemtap/runtime/linux/access_process_vm.h: In function ‘__access_process_vm_’:
/usr/share/systemtap/runtime/linux/access_process_vm.h:52:36: error: passing argument 1 of ‘get_user_pages_remote’ from incompatible pointer type [-Werror=incompatible-pointer-types]
52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma);
| ^~~
| |
| struct task_struct *
In file included from ./include/linux/kallsyms.h:12,
from ./include/linux/ftrace.h:11,
from ./include/linux/kprobes.h:29,
from /usr/share/systemtap/runtime/linux/runtime.h:21,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
./include/linux/mm.h:1714:46: note: expected ‘struct mm_struct *’ but argument is of type ‘struct task_struct *’
1714 | long get_user_pages_remote(struct mm_struct *mm,
| ~~~~~~~~~~~~~~~~~~^~
In file included from /usr/share/systemtap/runtime/linux/runtime.h:234,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
/usr/share/systemtap/runtime/linux/access_process_vm.h:52:41: error: passing argument 2 of ‘get_user_pages_remote’ makes integer from pointer without a cast [-Werror=int-conversion]
52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma);
| ^~
| |
| struct mm_struct *
In file included from ./include/linux/kallsyms.h:12,
from ./include/linux/ftrace.h:11,
from ./include/linux/kprobes.h:29,
from /usr/share/systemtap/runtime/linux/runtime.h:21,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
./include/linux/mm.h:1715:22: note: expected ‘long unsigned int’ but argument is of type ‘struct mm_struct *’
1715 | unsigned long start, unsigned long nr_pages,
| ~~~~~~~~~~~~~~^~~~~
In file included from /usr/share/systemtap/runtime/linux/runtime.h:234,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
/usr/share/systemtap/runtime/linux/access_process_vm.h:52:54: error: passing argument 5 of ‘get_user_pages_remote’ makes pointer from integer without a cast [-Werror=int-conversion]
52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma);
| ^~~~~
| |
| int
In file included from ./include/linux/kallsyms.h:12,
from ./include/linux/ftrace.h:11,
from ./include/linux/kprobes.h:29,
from /usr/share/systemtap/runtime/linux/runtime.h:21,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
./include/linux/mm.h:1716:46: note: expected ‘struct page **’ but argument is of type ‘int’
1716 | unsigned int gup_flags, struct page **pages,
| ~~~~~~~~~~~~~~^~~~~
In file included from /usr/share/systemtap/runtime/linux/runtime.h:234,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
/usr/share/systemtap/runtime/linux/access_process_vm.h:52:61: error: passing argument 6 of ‘get_user_pages_remote’ makes pointer from integer without a cast [-Werror=int-conversion]
52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma);
| ^
| |
| int
In file included from ./include/linux/kallsyms.h:12,
from ./include/linux/ftrace.h:11,
from ./include/linux/kprobes.h:29,
from /usr/share/systemtap/runtime/linux/runtime.h:21,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
./include/linux/mm.h:1717:32: note: expected ‘struct vm_area_struct **’ but argument is of type ‘int’
1717 | struct vm_area_struct **vmas, int *locked);
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
In file included from /usr/share/systemtap/runtime/linux/runtime.h:234,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
/usr/share/systemtap/runtime/linux/access_process_vm.h:52:64: error: passing argument 7 of ‘get_user_pages_remote’ from incompatible pointer type [-Werror=incompatible-pointer-types]
52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma);
| ^~~~~
| |
| struct page **
In file included from ./include/linux/kallsyms.h:12,
from ./include/linux/ftrace.h:11,
from ./include/linux/kprobes.h:29,
from /usr/share/systemtap/runtime/linux/runtime.h:21,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
./include/linux/mm.h:1717:43: note: expected ‘int *’ but argument is of type ‘struct page **’
1717 | struct vm_area_struct **vmas, int *locked);
| ~~~~~^~~~~~
In file included from /usr/share/systemtap/runtime/linux/runtime.h:234,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
/usr/share/systemtap/runtime/linux/access_process_vm.h:52:13: error: too many arguments to function ‘get_user_pages_remote’
52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma);
| ^~~~~~~~~~~~~~~~~~~~~
In file included from ./include/linux/kallsyms.h:12,
from ./include/linux/ftrace.h:11,
from ./include/linux/kprobes.h:29,
from /usr/share/systemtap/runtime/linux/runtime.h:21,
from /usr/share/systemtap/runtime/runtime.h:26,
from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21:
./include/linux/mm.h:1714:6: note: declared here
1714 | long get_user_pages_remote(struct mm_struct *mm,
| ^~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [scripts/Makefile.build:283: /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.o] Error 1
make: *** [Makefile:1784: /tmp/stapa8JzLf] Error 2
WARNING: kbuild exited with status: 2
Pass 4: compilation failed. [man error::pass4]
Expected results:
Prints message "hi" and exits
Additional info:
[vagrant@localhost ~]$ stap --version
Systemtap translator/driver (version 4.4/0.182/0.180, rpm 4.4-0.20200805git82b8e1a07.fc33)
Copyright (C) 2005-2020 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
tested kernel versions: 2.6.32 ... 5.7.0
enabled features: AVAHI BOOST_STRING_REF DYNINST BPF JAVA PYTHON3 LIBRPM LIBSQLITE3 LIBVIRT LIBXML2 NLS NSS READLINE MONITOR_LIBS
[vagrant@localhost ~]$ uname -a
Linux localhost.localdomain 5.9.8-200.fc33.x86_64 #1 SMP Tue Nov 10 21:58:19 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[vagrant@localhost ~]$
I mentioned in the koji build [0], but will also report here that the updated build (4.4-1) works with Fedora 33 on kernel 5.9.8-200.fc33.
[vagrant@localhost ~]$ uname -r
5.9.8-200.fc33.x86_64
[vagrant@localhost ~]$ rpm -qa systemtap
systemtap-4.4-1.fc33.x86_64
[vagrant@localhost ~]$ sudo stap -e 'probe begin { print("hi\n"); exit(); }'
hi
[0] https://bodhi.fedoraproject.org/updates/FEDORA-2020-62d62d2302
Description of problem: systemtap creates kernel modules that are not compatible with the latest kernel headers distributed Version-Release number of selected component (if applicable): 4.4-0.20200805git82b8e1a07.fc33 How reproducible: 100% Steps to Reproduce: 1. Set up a machine with current Fedora 33 software including systemtap. I used vagrant with a simple config file (comments and blank lines removed): Vagrant.configure("2") do |config| config.vm.box = "fedora/33-cloud-base" config.vm.provider "libvirt" do |v| v.memory = 2048 v.cpus = 4 end config.vm.provision "shell", inline: <<-END dnf install -y systemtap dnf upgrade -y END end "vagrant up" to set up the VM (I got box version v33.20201019.0 downloaded), then "vagrant reload" to restart using the newly updated kernel. 2. Run a simple stap test: "stap -e 'probe begin { print("hi\n"); exit(); }'" Actual results: In file included from /usr/share/systemtap/runtime/linux/runtime.h:234, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: /usr/share/systemtap/runtime/linux/access_process_vm.h: In function ‘__access_process_vm_’: /usr/share/systemtap/runtime/linux/access_process_vm.h:52:36: error: passing argument 1 of ‘get_user_pages_remote’ from incompatible pointer type [-Werror=incompatible-pointer-types] 52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma); | ^~~ | | | struct task_struct * In file included from ./include/linux/kallsyms.h:12, from ./include/linux/ftrace.h:11, from ./include/linux/kprobes.h:29, from /usr/share/systemtap/runtime/linux/runtime.h:21, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: ./include/linux/mm.h:1714:46: note: expected ‘struct mm_struct *’ but argument is of type ‘struct task_struct *’ 1714 | long get_user_pages_remote(struct mm_struct *mm, | ~~~~~~~~~~~~~~~~~~^~ In file included from /usr/share/systemtap/runtime/linux/runtime.h:234, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: /usr/share/systemtap/runtime/linux/access_process_vm.h:52:41: error: passing argument 2 of ‘get_user_pages_remote’ makes integer from pointer without a cast [-Werror=int-conversion] 52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma); | ^~ | | | struct mm_struct * In file included from ./include/linux/kallsyms.h:12, from ./include/linux/ftrace.h:11, from ./include/linux/kprobes.h:29, from /usr/share/systemtap/runtime/linux/runtime.h:21, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: ./include/linux/mm.h:1715:22: note: expected ‘long unsigned int’ but argument is of type ‘struct mm_struct *’ 1715 | unsigned long start, unsigned long nr_pages, | ~~~~~~~~~~~~~~^~~~~ In file included from /usr/share/systemtap/runtime/linux/runtime.h:234, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: /usr/share/systemtap/runtime/linux/access_process_vm.h:52:54: error: passing argument 5 of ‘get_user_pages_remote’ makes pointer from integer without a cast [-Werror=int-conversion] 52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma); | ^~~~~ | | | int In file included from ./include/linux/kallsyms.h:12, from ./include/linux/ftrace.h:11, from ./include/linux/kprobes.h:29, from /usr/share/systemtap/runtime/linux/runtime.h:21, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: ./include/linux/mm.h:1716:46: note: expected ‘struct page **’ but argument is of type ‘int’ 1716 | unsigned int gup_flags, struct page **pages, | ~~~~~~~~~~~~~~^~~~~ In file included from /usr/share/systemtap/runtime/linux/runtime.h:234, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: /usr/share/systemtap/runtime/linux/access_process_vm.h:52:61: error: passing argument 6 of ‘get_user_pages_remote’ makes pointer from integer without a cast [-Werror=int-conversion] 52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma); | ^ | | | int In file included from ./include/linux/kallsyms.h:12, from ./include/linux/ftrace.h:11, from ./include/linux/kprobes.h:29, from /usr/share/systemtap/runtime/linux/runtime.h:21, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: ./include/linux/mm.h:1717:32: note: expected ‘struct vm_area_struct **’ but argument is of type ‘int’ 1717 | struct vm_area_struct **vmas, int *locked); | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~ In file included from /usr/share/systemtap/runtime/linux/runtime.h:234, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: /usr/share/systemtap/runtime/linux/access_process_vm.h:52:64: error: passing argument 7 of ‘get_user_pages_remote’ from incompatible pointer type [-Werror=incompatible-pointer-types] 52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma); | ^~~~~ | | | struct page ** In file included from ./include/linux/kallsyms.h:12, from ./include/linux/ftrace.h:11, from ./include/linux/kprobes.h:29, from /usr/share/systemtap/runtime/linux/runtime.h:21, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: ./include/linux/mm.h:1717:43: note: expected ‘int *’ but argument is of type ‘struct page **’ 1717 | struct vm_area_struct **vmas, int *locked); | ~~~~~^~~~~~ In file included from /usr/share/systemtap/runtime/linux/runtime.h:234, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: /usr/share/systemtap/runtime/linux/access_process_vm.h:52:13: error: too many arguments to function ‘get_user_pages_remote’ 52 | ret = get_user_pages_remote (tsk, mm, addr, 1, write, 1, &page, &vma); | ^~~~~~~~~~~~~~~~~~~~~ In file included from ./include/linux/kallsyms.h:12, from ./include/linux/ftrace.h:11, from ./include/linux/kprobes.h:29, from /usr/share/systemtap/runtime/linux/runtime.h:21, from /usr/share/systemtap/runtime/runtime.h:26, from /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.c:21: ./include/linux/mm.h:1714:6: note: declared here 1714 | long get_user_pages_remote(struct mm_struct *mm, | ^~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[1]: *** [scripts/Makefile.build:283: /tmp/stapa8JzLf/stap_94e89f92720b927faef3d2f94f2e4bc2_1002_src.o] Error 1 make: *** [Makefile:1784: /tmp/stapa8JzLf] Error 2 WARNING: kbuild exited with status: 2 Pass 4: compilation failed. [man error::pass4] Expected results: Prints message "hi" and exits Additional info: [vagrant@localhost ~]$ stap --version Systemtap translator/driver (version 4.4/0.182/0.180, rpm 4.4-0.20200805git82b8e1a07.fc33) Copyright (C) 2005-2020 Red Hat, Inc. and others This is free software; see the source for copying conditions. tested kernel versions: 2.6.32 ... 5.7.0 enabled features: AVAHI BOOST_STRING_REF DYNINST BPF JAVA PYTHON3 LIBRPM LIBSQLITE3 LIBVIRT LIBXML2 NLS NSS READLINE MONITOR_LIBS [vagrant@localhost ~]$ uname -a Linux localhost.localdomain 5.9.8-200.fc33.x86_64 #1 SMP Tue Nov 10 21:58:19 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [vagrant@localhost ~]$