1. 13 Oct, 2020 2 commits
    • Philippe Gerum's avatar
      cobalt/kernel: vfile_snapshot: fix seq_file leakage on race detection · fa8ad1a1
      Philippe Gerum authored
      vfile_snapshot_open() may re-run the data collection loop in case we
      detected a race by checking the revision tag of the data
      set. Unfortunately, the seq_file is already open at this point,
      causing a leakage as seq_open() will be called again.
      
      The bug triggers after a while running the following commands
      concurrently:
      
      $ while : ; do cat /proc/xenomai/sched/stat > /dev/null; done &
      $ while : ; do switchtest -T 5; done
      
      As the private_data field of the backing file is not NULL once
      seq_open() has run, this bug triggers the following warning splat when
      calling it anew for the same file:
      
      [   32.660548] WARNING: CPU: 0 PID: 446 at fs/seq_file.c:55 seq_open.cold+0xc/0x1a
      [   32.670934] CPU: 0 PID: 446 Comm: cat Not tainted 4.19.89+ #16
      [   32.686078] I-pipe domain: Linux
      [   32.689312] RIP: 0010:seq_open.cold+0xc/0x1a
      [   32.693592] Code: 48 8b 74 24 08 e8 1e 5e f9 ff 48 8b 5d 18 48 8b 55 08 4c 01 f3 48 89 5d 18 e9 25 fe ff ff 48 c7 c7 00 99 2b 82 e8 32 71 de ff <0f> 0b e9 d3 db ff ff 90 90 90 90 90 90 90 41 57 41 56 41 55 41 54
      [   32.712354] RSP: 0018:ffff88815476f9b0 EFLAGS: 00010246
      [   32.717588] RAX: 0000000000000024 RBX: ffff888153ec7400 RCX: 0000000000000000
      [   32.724728] RDX: 1ffff1102b944a01 RSI: 0000000000000008 RDI: ffffed102a8edf2d
      [   32.731873] RBP: ffffffff828c5560 R08: 0000000000000024 R09: ffffffff815d0644
      [   32.739016] R10: ffffed102b946f1c R11: ffff88815ca378e7 R12: ffff888153ec74c8
      [   32.746156] R13: ffffffff828c75a0 R14: ffff8881544ebb80 R15: ffff888155a2d9c8
      [   32.753299] FS:  00007ff225dc3740(0000) GS:ffff88815ca00000(0000) knlGS:0000000000000000
      [   32.761395] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   32.767152] CR2: 00007ff225eb8120 CR3: 0000000153d8c000 CR4: 00000000003406f0
      [   32.774289] Call Trace:
      [   32.776746]  vfile_snapshot_open+0x2a8/0x560
      [   32.781022]  proc_reg_open+0x124/0x270
      [   32.784782]  ? proc_i_callback+0x20/0x20
      [   32.788713]  do_dentry_open+0x2ac/0x750
      [   32.792558]  ? proc_i_callback+0x20/0x20
      [   32.796492]  ? __x64_sys_fchmod+0x70/0x70
      [   32.800507]  ? inode_permission.part.0+0x4f/0x180
      [   32.805219]  ? security_inode_permission+0x13/0x60
      [   32.810015]  path_openat+0x456/0x1b80
      [   32.813681]  ? kmem_cache_alloc+0xd2/0x1c0
      [   32.817783]  ? getname_flags+0x35/0x240
      [   32.821624]  ? do_syscall_64+0x8a/0x240
      [   32.825466]  ? __rcu_read_unlock+0x66/0x80
      [   32.829572]  ? path_lookupat+0x430/0x430
      [   32.833497]  ? find_get_pages_range_tag+0x3a0/0x3a0
      [   32.838381]  ? finish_mkwrite_fault+0x1f0/0x1f0
      [   32.842916]  do_filp_open+0x103/0x210
      [   32.846586]  ? may_open_dev+0x50/0x50
      [   32.850253]  ? __fdget+0xe0/0xe0
      [   32.853491]  ? __virt_addr_valid+0xa6/0x100
      [   32.857677]  ? check_stack_object+0x1f/0x60
      [   32.861864]  ? __check_object_size+0x10c/0x1ce
      [   32.866316]  ? _raw_spin_unlock+0x9/0x30
      [   32.870245]  ? __alloc_fd+0x115/0x220
      [   32.873910]  do_sys_open+0x1c3/0x290
      [   32.877489]  ? __do_page_fault+0x494/0x7b0
      [   32.881588]  ? file_open_name+0x180/0x180
      [   32.885604]  do_syscall_64+0x8a/0x240
      [   32.889270]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Fix this by deferring the call to seq_open() until after the data is
      fully collected without race, which prevents any seq_file leakage on
      race by design.
      Signed-off-by: Philippe Gerum's avatarPhilippe Gerum <rpm@xenomai.org>
      Signed-off-by: Jan Kiszka's avatarJan Kiszka <jan.kiszka@siemens.com>
      fa8ad1a1
    • Vitaly Chikunov's avatar
      Multi-library support with core suffix in soname · b409097e
      Vitaly Chikunov authored
      Enable soname suffix with --enable-so-suffix configure option (Mercury
      core only).
      
      This will allow (for users) installing both versions of libs into the
      same system and (for distributions) having them without conflicts in
      the same repository.
      
      Such script is used to change Makefile.am-s:
      
        for lib in copperplate alchemy psos smokey trank vxworks
        do
          find -name Makefile.am \
          | xargs -r \
            sed -i -e "s/lib${lib}\.la/lib${lib}@CORE@\.la/g" \
                   -e "s/lib${lib}\_la/lib${lib}@CORE@\_la/g"
        done
      Signed-off-by: Jan Kiszka's avatarJan Kiszka <jan.kiszka@siemens.com>
      b409097e
  2. 28 Sep, 2020 3 commits
  3. 21 Sep, 2020 1 commit
  4. 17 Sep, 2020 1 commit
  5. 15 Sep, 2020 1 commit
  6. 11 Sep, 2020 1 commit
    • Jan Leupold's avatar
      lib/cobalt: Wrap __open_2/__open64_2 to support _FORTIFY_SOURCE · 89f00a2e
      Jan Leupold authored
      __open_2() and __open64_2() from glibc add runtime precondition tests for the
      'oflag' parameter to the functionality of open()/open64(). They may be used when
      the macro _FORTIFY_SOURCE is defined when compiling the application code. Added
      these wrappers to cover those cases.
      
      If Xenomai itself is not compiled with FORTIFY_SOURCE then the function
      declarations for __open_2() and __open64_2() are not available.
      __STD(__open_2(...)) will not link in this case (would be a very special
      use case anyway?).
      Signed-off-by: default avatarJan Leupold <leupold@rsi-elektrotechnik.de>
      Signed-off-by: Jan Kiszka's avatarJan Kiszka <jan.kiszka@siemens.com>
      89f00a2e
  7. 04 Sep, 2020 1 commit
  8. 19 Aug, 2020 1 commit
  9. 12 Aug, 2020 1 commit
    • chensong's avatar
      testsuite: App of gpio loopback/react benchmark · 0bcfce8f
      chensong authored
      This a tool to benchmark the latency of GPIO driver,
      it's able to run 2 kinds of benchmark test:
      
      1, loopback mode
      1) apply 2 gpio pins by calling service in gpio RTDM driver
         like gpio-bcm2835 and gpio-core.c, one is as output,
         the other is as interrupt
      2) call write_rt to send a pulse from output
      3) call read_rt to get timestamps recorded in driver (inner loop)
      4) also record timespace in user space(outer_loop)
         outer_loop is inner_loop plus overhead of event wakeup
      5) ftrace enable/disable
      
      2, react mode
      1) apply 2 gpio pins by calling service in gpio RTDM driver
         like gpio-bcm2835 and gpio-core.c, one is as ourput,
         the other is as interrupt
      2) call read_rt to wait for a pulse from latency box
      3) call write_rt to send a signal back to latency box
         as a reaction
      4) latency box calculates the diff and makes the histogram
      
      e.g.:
      1) react mode:
         gpiobench -o 20 -i 21 -c pinctrl-bcm2835 -m 1 -l 1000
      2) loopback mode:
         gpiobench -o 20 -i 21 -c pinctrl-bcm2835 -m 0 -l 1000 -h 100 -b 50
      
      CC: Jan Kiszka <jan.kiszka@siemens.com>
      CC: Greg Gallagher <greg@embeddedgreg.com>
      Signed-off-by: default avatarchensong <chensong@tj.kylinos.cn>
      [Jan: fixed time delta calculation and output for 32-bit targets]
      Signed-off-by: Jan Kiszka's avatarJan Kiszka <jan.kiszka@siemens.com>
      0bcfce8f
  10. 02 Jun, 2020 1 commit
  11. 24 Apr, 2020 2 commits
  12. 19 Apr, 2020 1 commit
  13. 14 Apr, 2020 1 commit
  14. 06 Apr, 2020 1 commit
  15. 02 Mar, 2020 1 commit
  16. 20 Feb, 2020 1 commit
  17. 19 Feb, 2020 1 commit
  18. 17 Feb, 2020 1 commit
  19. 10 Feb, 2020 2 commits
  20. 04 Feb, 2020 1 commit
  21. 03 Feb, 2020 1 commit
  22. 31 Jan, 2020 10 commits
  23. 22 Jan, 2020 1 commit
  24. 21 Jan, 2020 1 commit
  25. 16 Jan, 2020 2 commits