Skip to content

smalinux dynamic columns merge#2

Merged
smalinux merged 19 commits intosmalinux:masterfrom
natoscott:smalinux-dynamic-columns
Aug 3, 2021
Merged

smalinux dynamic columns merge#2
smalinux merged 19 commits intosmalinux:masterfrom
natoscott:smalinux-dynamic-columns

Conversation

@natoscott
Copy link
Copy Markdown

No description provided.

cgzones and others added 19 commits July 18, 2021 07:44
Currently htop does not support offline CPUs and hot-swapping, e.g. via
    echo 0 > /sys/devices/system/cpu/cpu2/online

Split the current single cpuCount variable into activeCPUs and
existingCPUs.

Supersedes: htop-dev#650
Related: htop-dev#580
Bogus uptime measurements can result in wrap-arounds, leading to
negative garbage values printed.
Kernel threads do not have an executable and the check can result in
garbage values as unprivileged user.
Wait until it has been decided what kind of task the entry actually is.
sched_getaffinity() and sched_setaffinity() are also available on BSDs.
Remove the Linux restraint.
Wait until it has been decided what kind of task the entry actually is.
Example hot-swapping:
    psradm -F -f 2
openbsd/OpenBSDProcessList.c:176:56: error: no member named 'ki_pid' in 'struct kinfo_proc'; did you mean 'p_pid'?
   const int mib[] = { CTL_KERN, KERN_PROC_CWD, kproc->ki_pid };
                                                       ^~~~~~
                                                       p_pid
/usr/include/sys/sysctl.h:375:10: note: 'p_pid' declared here
        int32_t p_pid;                  /* PID_T: Process identifier. */
                ^
openbsd/OpenBSDProcessList.c:458:33: error: comparison of integers of different signs: 'int' and 'unsigned int' [-Werror,-Wsign-compare]
      if (opl->cpus[i].cpuIndex == id)
          ~~~~~~~~~~~~~~~~~~~~~ ^  ~~
This makes the behaviour consistent with other platforms where AC is
marked as present if at least one power source is marked as AC_PRESENT.

Fixes: htop-dev#711
Implements support for arbitrary Performance Co-Pilot
metrics with per-process instance domains to form new
htop columns.  The column-to-metric mappings are setup
using configuration files which will be documented via
man pages as part of a follow-up commit.

We provide an initial set of column configurations so
as to provide new capabilities to pcp-htop: including
configs for containers, open fd counts, scheduler run
queue time, tcp/udp bytes/calls sent/recv, delay acct,
virtual machine guests, detailed virtual memory, swap.

Note there is a change to the configuration file path
resolution algorithm introduced for 'dynamic meters'.
First, look in any custom PCP_HTOP_DIR location.  Then
iterate, in priority order, users home directory, then
local sysadmins files in /etc/pcp/htop, then readonly
configuration files below /usr/share/pcp/htop.  This
final location becomes the preferred place for our own
shipped meter and column files.

The Settings file (htoprc) writing code is updated to
not using the numeric identifier for dynamic columns.
The same strategy used for dynamic meters is used here
where we write Dynamic(name) so the name can be setup
once more at start.  Regular (static) columns writing
to htoprc - i.e. numerically indexed - is unchanged.
@smalinux smalinux merged commit ae34653 into smalinux:master Aug 3, 2021
Comment thread DynamicColumn.c
Comment on lines +12 to +14
#include <stddef.h>

#include "DynamicColumn.h"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Order should be switched …

smalinux pushed a commit that referenced this pull request Aug 17, 2021
The signal handler will access the Settings struct, which gets freed at
normal program finalization.

When using leak sanitizers with ASAN_OPTIONS=abort_on_error=1, which
runs after program termination, any leak causes SIGABRT to be raised,
calling the crash handler, which will derefernce the freed Settings.

    ==44741==ERROR: AddressSanitizer: heap-use-after-free on address 0x60d000000080 at pc 0x0000005680df bp 0x7fffe335e960 sp 0x7fffe335e958
    READ of size 8 at 0x60d000000080 thread T0
        #0 0x5680de in Settings_write /home/christian/Coding/workspaces/htop/Settings.c:329:26
        #1 0x4f77b7 in CRT_handleSIGSEGV /home/christian/Coding/workspaces/htop/CRT.c:1020:4
        #2 0x7f8a1120c13f  (/lib/x86_64-linux-gnu/libpthread.so.0+0x1413f)
        #3 0x7f8a11042ce0 in __libc_signal_restore_set signal/../sysdeps/unix/sysv/linux/internal-signals.h:86:3
        htop-dev#4 0x7f8a11042ce0 in raise signal/../sysdeps/unix/sysv/linux/raise.c:48:3
        htop-dev#5 0x7f8a1102c536 in abort stdlib/abort.c:79:7
        htop-dev#6 0x4c3db6 in __sanitizer::Abort() (/home/christian/Coding/workspaces/htop/htop+0x4c3db6)
        htop-dev#7 0x4c2090 in __sanitizer::Die() (/home/christian/Coding/workspaces/htop/htop+0x4c2090)
        htop-dev#8 0x4d0a17 in __lsan::HandleLeaks() (/home/christian/Coding/workspaces/htop/htop+0x4d0a17)
        htop-dev#9 0x4cd950 in __lsan::DoLeakCheck() (/home/christian/Coding/workspaces/htop/htop+0x4cd950)
        htop-dev#10 0x7f8a110454d6 in __run_exit_handlers stdlib/exit.c:108:8
        htop-dev#11 0x7f8a11045679 in exit stdlib/exit.c:139:3
        htop-dev#12 0x7f8a1102dd10 in __libc_start_main csu/../csu/libc-start.c:342:3
        htop-dev#13 0x428a19 in _start (/home/christian/Coding/workspaces/htop/htop+0x428a19)

    0x60d000000080 is located 64 bytes inside of 144-byte region [0x60d000000040,0x60d0000000d0)
    freed by thread T0 here:
        #0 0x4a4f72 in free (/home/christian/Coding/workspaces/htop/htop+0x4a4f72)
        #1 0x566693 in Settings_delete /home/christian/Coding/workspaces/htop/Settings.c:32:4
        #2 0x4ede10 in CommandLine_run /home/christian/Coding/workspaces/htop/CommandLine.c:393:4
        #3 0x4d6f32 in main /home/christian/Coding/workspaces/htop/htop.c:15:11
        htop-dev#4 0x7f8a1102dd09 in __libc_start_main csu/../csu/libc-start.c:308:16

    previously allocated by thread T0 here:
        #0 0x4a5372 in __interceptor_calloc (/home/christian/Coding/workspaces/htop/htop+0x4a5372)
        #1 0x57f61a in xCalloc /home/christian/Coding/workspaces/htop/XUtils.c:55:17
        #2 0x5688a6 in Settings_new /home/christian/Coding/workspaces/htop/Settings.c:392:21
        #3 0x4ecb57 in CommandLine_run /home/christian/Coding/workspaces/htop/CommandLine.c:303:25
        htop-dev#4 0x4d6f32 in main /home/christian/Coding/workspaces/htop/htop.c:15:11
        htop-dev#5 0x7f8a1102dd09 in __libc_start_main csu/../csu/libc-start.c:308:16

SUMMARY: AddressSanitizer: heap-use-after-free /home/christian/Coding/workspaces/htop/Settings.c:329:26 in Settings_write
smalinux pushed a commit that referenced this pull request Oct 26, 2021
The names array is terminated by a NULL entry, thus allocate space for
one more than entries.

Fixes: htop-dev#844

==6708==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6060000045b8 at pc 0x000000589ee1 bp 0x7ffcd1dee220 sp 0x7ffcd1dee218
READ of size 8 at 0x6060000045b8 thread T0
    #0 0x589ee0 in String_freeArray ./XUtils.c:157:23
    #1 0x56c9af in Settings_delete ./Settings.c:31:7
    #2 0x4ee44b in CommandLine_run ./CommandLine.c:395:4
    #3 0x4d6fb2 in main ./htop.c:15:11
    htop-dev#4 0x7ff3b8154e49 in __libc_start_main csu/../csu/libc-start.c:314:16
    htop-dev#5 0x428aa9 in _start (./htop+0x428aa9)

0x6060000045b8 is located 0 bytes to the right of 56-byte region [0x606000004580,0x6060000045b8)
allocated by thread T0 here:
    #0 0x4a53f2 in __interceptor_calloc (./htop+0x4a53f2)
    #1 0x5890ba in xCalloc ./XUtils.c:55:17
    #2 0x50a044 in Header_writeBackToSettings ./Header.c:148:34
    #3 0x4de861 in Action_runSetup ./Action.c:91:7
    htop-dev#4 0x4de861 in actionSetup ./Action.c:386:4
    htop-dev#5 0x515caf in MainPanel_eventHandler ./MainPanel.c:106:19
    htop-dev#6 0x56a5c1 in ScreenManager_run ./ScreenManager.c:235:19
    htop-dev#7 0x4ee13b in CommandLine_run ./CommandLine.c:364:4
    htop-dev#8 0x4d6fb2 in main ./htop.c:15:11
    htop-dev#9 0x7ff3b8154e49 in __libc_start_main csu/../csu/libc-start.c:314:16
smalinux pushed a commit that referenced this pull request Aug 4, 2022
Also increase the limit for nesting by using 64 bit integers.

ProcessList.c:242:36: runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
    #0 0x561cfec000a8 in ProcessList_buildTreeBranch ProcessList.c:242:36
    #1 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    #2 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    #3 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#4 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#5 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#6 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#7 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#8 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#9 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#10 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#11 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#12 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#13 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#14 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#15 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#16 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#17 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#18 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#19 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#20 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#21 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#22 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#23 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#24 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#25 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#26 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#27 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#28 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#29 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#30 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#31 0x561cfebffec2 in ProcessList_buildTreeBranch ProcessList.c:243:7
    htop-dev#32 0x561cfebfb734 in ProcessList_buildTree ProcessList.c:312:10
    htop-dev#33 0x561cfebfb050 in ProcessList_updateDisplayList ProcessList.c:326:10
    htop-dev#34 0x561cfebfc58b in ProcessList_rebuildPanel ProcessList.c:374:4
    htop-dev#35 0x561cfec07953 in checkRecalculation ScreenManager.c:139:7
    htop-dev#36 0x561cfec07953 in ScreenManager_run ScreenManager.c:226:10
    htop-dev#37 0x561cfeb8899a in CommandLine_run CommandLine.c:378:4
    htop-dev#38 0x561cfeb6d6d4 in main htop.c:15:11
    htop-dev#39 0x7f14860291e9 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    htop-dev#40 0x7f148602929b in __libc_start_main csu/../csu/libc-start.c:392:3
    htop-dev#41 0x561cfeaafb20 in _start (htop+0x105b20) (BuildId: fc4b9e52ffc111ca8b4cd53136a238414120a858)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants