[Bug 1830226] [NEW] systemtap currently broken in xenial

Launchpad Bug Tracker 1830226 at bugs.launchpad.net
Tue May 28 08:14:48 UTC 2019


You have been subscribed to a public bug:

[Impact]

Kernel commit 768ae309a96103ed02eb1e111e838c87854d8b51 changed the
prototype of get_user_pages() removing 'write' and 'force' arguments,
merging them into 'gup_flags'.

This breaks systemtap that makes use of get_user_pages() in its kernel
runtime interface.

Fix the usage of get_user_pages() checking if it requires the old or the
new signature.

[Test Case]

ubuntu at ubuntu:~$ cat hello.stp
#!/usr/bin/env stap
probe oneshot { println("hello world") }

[Regression Potential]

A similar change is already present in bionic+. This is a backported
change for xenial. Moreover the fix adds a runtime check (done every
time a stap script is executed) to verify if the running kernel is using
the old or the new signature of get_user_pages(), so this change does
not break the old stap scripts. Therefore regression potential is
minimal.

[Original bug report]

Running a simple systemtap hello world example on a fresh installed
Xenial VM produces the following errors:

ubuntu at ubuntu:~$ uname -r
4.4.0-148-generic

ubuntu at ubuntu:~$ dpkg -l | grep systemtap
ii  systemtap                        2.9-2ubuntu2                               amd64        instrumentation system for Linux
ii  systemtap-common                 2.9-2ubuntu2                               all          instrumentation system for Linux (common component)
ii  systemtap-runtime                2.9-2ubuntu2                               amd64        instrumentation system for Linux (runtime component)

ubuntu at ubuntu:~$ cat hello.stp
#!/usr/bin/env stap
probe oneshot { println("hello world") }

ubuntu at ubuntu:~$ sudo ./hello.stp
In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                 from /usr/share/systemtap/runtime/runtime.h:24,
                 from /tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.c:25:
/usr/share/systemtap/runtime/linux/access_process_vm.h: In function ‘__access_process_vm_’:
/usr/share/systemtap/runtime/linux/access_process_vm.h:35:54: error: passing argument 6 of ‘get_user_pages’ makes pointer from integer without a cast [-Werror=int-conversion]
       ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma);
                                                      ^
In file included from include/linux/pid_namespace.h:6:0,
                 from include/linux/ptrace.h:8,
                 from include/linux/ftrace.h:13,
                 from include/linux/kprobes.h:42,
                 from /usr/share/systemtap/runtime/linux/runtime.h:21,
                 from /usr/share/systemtap/runtime/runtime.h:24,
                 from /tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.c:25:
include/linux/mm.h:1222:6: note: expected ‘struct page **’ but argument is of type ‘int’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                 from /usr/share/systemtap/runtime/runtime.h:24,
                 from /tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.c:25:
/usr/share/systemtap/runtime/linux/access_process_vm.h:35:57: error: passing argument 7 of ‘get_user_pages’ from incompatible pointer type [-Werror=incompatible-pointer-types]
       ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma);
                                                         ^
In file included from include/linux/pid_namespace.h:6:0,
                 from include/linux/ptrace.h:8,
                 from include/linux/ftrace.h:13,
                 from include/linux/kprobes.h:42,
                 from /usr/share/systemtap/runtime/linux/runtime.h:21,
                 from /usr/share/systemtap/runtime/runtime.h:24,
                 from /tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.c:25:
include/linux/mm.h:1222:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘struct page **’
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                 from /usr/share/systemtap/runtime/runtime.h:24,
                 from /tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.c:25:
/usr/share/systemtap/runtime/linux/access_process_vm.h:35:13: error: too many arguments to function ‘get_user_pages’
       ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma);
             ^
In file included from include/linux/pid_namespace.h:6:0,
                 from include/linux/ptrace.h:8,
                 from include/linux/ftrace.h:13,
                 from include/linux/kprobes.h:42,
                 from /usr/share/systemtap/runtime/linux/runtime.h:21,
                 from /usr/share/systemtap/runtime/runtime.h:24,
                 from /tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.c:25:
include/linux/mm.h:1222:6: note: declared here
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
cc1: all warnings being treated as errors
scripts/Makefile.build:285: recipe for target '/tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.o' failed
make[1]: *** [/tmp/stapCrPm1y/stap_9bc2f1adeaead87a69b1ab80b0f14480_967_src.o] Error 1
Makefile:1454: recipe for target '_module_/tmp/stapCrPm1y' failed
make: *** [_module_/tmp/stapCrPm1y] Error 2
WARNING: kbuild exited with status: 2
Pass 4: compilation failed.  [man error::pass4]
Tip: /usr/share/doc/systemtap/README.Debian should help you get started.

** Affects: systemtap (Ubuntu)
     Importance: Undecided
     Assignee: Andrea Righi (arighi)
         Status: Confirmed

-- 
systemtap currently broken in xenial
https://bugs.launchpad.net/bugs/1830226
You received this bug notification because you are a member of Ubuntu Foundations Bugs, which is subscribed to systemtap in Ubuntu.



More information about the foundations-bugs mailing list