[Bug 1830226] Re: systemtap currently broken in xenial

Robie Basak 1830226 at bugs.launchpad.net
Wed Jul 10 22:19:43 UTC 2019


Please could you also add testing against the release pocket Bionic
kernel in your SRU verification steps?

** Changed in: systemtap (Ubuntu Xenial)
       Status: Confirmed => Fix Committed

** Tags added: verification-needed verification-needed-xenial

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

Title:
  systemtap currently broken in xenial

Status in systemtap package in Ubuntu:
  Confirmed
Status in systemtap source package in Xenial:
  Fix Committed

Bug description:
  [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.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemtap/+bug/1830226/+subscriptions



More information about the foundations-bugs mailing list