mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2026-03-10 16:20:53 +02:00
fix unknown flags throwing key error (#681)
This commit is contained in:
@@ -168,7 +168,7 @@ import jc.utils
|
||||
|
||||
class info():
|
||||
"""Provides parser metadata (version, author, etc.)"""
|
||||
version = '1.0'
|
||||
version = '1.1'
|
||||
description = '`/proc/<pid>/smaps` file parser'
|
||||
author = 'Kelly Brazil'
|
||||
author_email = 'kellyjonbrazil@gmail.com'
|
||||
@@ -205,33 +205,46 @@ def _process(proc_data: List[Dict]) -> List[Dict]:
|
||||
|
||||
vmflags_map = {
|
||||
'rd': 'readable',
|
||||
'wr': 'writeable',
|
||||
'ex': 'executable',
|
||||
'sh': 'shared',
|
||||
'mr': 'may read',
|
||||
'mw': 'may write',
|
||||
'me': 'may execute',
|
||||
'ms': 'may share',
|
||||
'mp': 'MPX-specific VMA',
|
||||
'gd': 'stack segment growns down',
|
||||
'pf': 'pure PFN range',
|
||||
'dw': 'disabled write to the mapped file',
|
||||
'lo': 'pages are locked in memory',
|
||||
'io': 'memory mapped I/O area',
|
||||
'sr': 'sequential read advise provided',
|
||||
'rr': 'random read advise provided',
|
||||
'dc': 'do not copy area on fork',
|
||||
'de': 'do not expand area on remapping',
|
||||
'ac': 'area is accountable',
|
||||
'nr': 'swap space is not reserved for the area',
|
||||
'ht': 'area uses huge tlb pages',
|
||||
'ar': 'architecture specific flag',
|
||||
'dd': 'do not include area into core dump',
|
||||
'sd': 'soft-dirty flag',
|
||||
'mm': 'mixed map area',
|
||||
'hg': 'huge page advise flag',
|
||||
'nh': 'no-huge page advise flag',
|
||||
'mg': 'mergable advise flag'
|
||||
'wr': 'writeable',
|
||||
'ex': 'executable',
|
||||
'sh': 'shared',
|
||||
'mr': 'may read',
|
||||
'mw': 'may write',
|
||||
'me': 'may execute',
|
||||
'ms': 'may share',
|
||||
'mp': 'MPX-specific VMA',
|
||||
'gd': 'stack segment growns down',
|
||||
'pf': 'pure PFN range',
|
||||
'dw': 'disabled write to the mapped file',
|
||||
'lo': 'pages are locked in memory',
|
||||
'io': 'memory mapped I/O area',
|
||||
'sr': 'sequential read advise provided',
|
||||
'rr': 'random read advise provided',
|
||||
'dc': 'do not copy area on fork',
|
||||
'de': 'do not expand area on remapping',
|
||||
'ac': 'area is accountable',
|
||||
'nr': 'swap space is not reserved for the area',
|
||||
'ht': 'area uses huge tlb pages',
|
||||
'sf': 'perform synchronous page faults',
|
||||
'nl': 'non-linear mapping',
|
||||
'ar': 'architecture specific flag',
|
||||
'wf': 'wipe on fork',
|
||||
'dd': 'do not include area into core dump',
|
||||
'sd': 'soft-dirty flag',
|
||||
'mm': 'mixed map area',
|
||||
'hg': 'huge page advise flag',
|
||||
'nh': 'no-huge page advise flag',
|
||||
'mg': 'mergable advise flag',
|
||||
'bt': 'arm64 BTI guarded page',
|
||||
'mt': 'arm64 MTE allocation tags are enabled',
|
||||
'um': 'userfaultfd missing pages tracking',
|
||||
'uw': 'userfaultfd wprotect pages tracking',
|
||||
'ui': 'userfaultfd minor fault',
|
||||
'ss': 'shadow/guarded control stack page',
|
||||
'sl': 'sealed',
|
||||
'lf': 'lock on fault pages',
|
||||
'dp': 'always lazily freeable mapping',
|
||||
'gu': 'maybe contains guard regions'
|
||||
}
|
||||
|
||||
for entry in proc_data:
|
||||
@@ -245,7 +258,7 @@ def _process(proc_data: List[Dict]) -> List[Dict]:
|
||||
|
||||
if 'VmFlags' in entry:
|
||||
entry['VmFlags'] = entry['VmFlags'].split()
|
||||
entry['VmFlags_pretty'] = [vmflags_map[x] for x in entry['VmFlags']]
|
||||
entry['VmFlags_pretty'] = [vmflags_map.get(x, x) for x in entry['VmFlags']]
|
||||
|
||||
return proc_data
|
||||
|
||||
|
||||
46
tests/fixtures/linux-proc/pid_smaps_unknown_flag
vendored
Normal file
46
tests/fixtures/linux-proc/pid_smaps_unknown_flag
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
55a9e753c000-55a9e7570000 r--p 00000000 fd:00 798126 /usr/lib/systemd/systemd
|
||||
Size: 208 kB
|
||||
KernelPageSize: 4 kB
|
||||
MMUPageSize: 4 kB
|
||||
Rss: 208 kB
|
||||
Pss: 104 kB
|
||||
Shared_Clean: 208 kB
|
||||
Shared_Dirty: 0 kB
|
||||
Private_Clean: 0 kB
|
||||
Private_Dirty: 0 kB
|
||||
Referenced: 208 kB
|
||||
Anonymous: 0 kB
|
||||
LazyFree: 0 kB
|
||||
AnonHugePages: 0 kB
|
||||
ShmemPmdMapped: 0 kB
|
||||
FilePmdMapped: 0 kB
|
||||
Shared_Hugetlb: 0 kB
|
||||
Private_Hugetlb: 0 kB
|
||||
Swap: 0 kB
|
||||
SwapPss: 0 kB
|
||||
Locked: 0 kB
|
||||
THPeligible: 0
|
||||
VmFlags: rd mr mw me dw sd zz
|
||||
55a9e7570000-55a9e763a000 r-xp 00034000 fd:00 798126 /usr/lib/systemd/systemd
|
||||
Size: 808 kB
|
||||
KernelPageSize: 4 kB
|
||||
MMUPageSize: 4 kB
|
||||
Rss: 800 kB
|
||||
Pss: 378 kB
|
||||
Shared_Clean: 800 kB
|
||||
Shared_Dirty: 0 kB
|
||||
Private_Clean: 0 kB
|
||||
Private_Dirty: 0 kB
|
||||
Referenced: 800 kB
|
||||
Anonymous: 0 kB
|
||||
LazyFree: 0 kB
|
||||
AnonHugePages: 0 kB
|
||||
ShmemPmdMapped: 0 kB
|
||||
FilePmdMapped: 0 kB
|
||||
Shared_Hugetlb: 0 kB
|
||||
Private_Hugetlb: 0 kB
|
||||
Swap: 0 kB
|
||||
SwapPss: 0 kB
|
||||
Locked: 0 kB
|
||||
THPeligible: 0
|
||||
VmFlags: rd ex mr mw me dw sd yy
|
||||
1
tests/fixtures/linux-proc/pid_smaps_unknown_flag.json
vendored
Normal file
1
tests/fixtures/linux-proc/pid_smaps_unknown_flag.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
[{"start":"55a9e753c000","end":"55a9e7570000","perms":["read","private"],"offset":"00000000","maj":"fd","min":"00","inode":798126,"pathname":"/usr/lib/systemd/systemd","Size":208,"KernelPageSize":4,"MMUPageSize":4,"Rss":208,"Pss":104,"Shared_Clean":208,"Shared_Dirty":0,"Private_Clean":0,"Private_Dirty":0,"Referenced":208,"Anonymous":0,"LazyFree":0,"AnonHugePages":0,"ShmemPmdMapped":0,"FilePmdMapped":0,"Shared_Hugetlb":0,"Private_Hugetlb":0,"Swap":0,"SwapPss":0,"Locked":0,"THPeligible":0,"VmFlags":["rd","mr","mw","me","dw","sd","zz"],"VmFlags_pretty":["readable","may read","may write","may execute","disabled write to the mapped file","soft-dirty flag","zz"]},{"start":"55a9e7570000","end":"55a9e763a000","perms":["read","execute","private"],"offset":"00034000","maj":"fd","min":"00","inode":798126,"pathname":"/usr/lib/systemd/systemd","Size":808,"KernelPageSize":4,"MMUPageSize":4,"Rss":800,"Pss":378,"Shared_Clean":800,"Shared_Dirty":0,"Private_Clean":0,"Private_Dirty":0,"Referenced":800,"Anonymous":0,"LazyFree":0,"AnonHugePages":0,"ShmemPmdMapped":0,"FilePmdMapped":0,"Shared_Hugetlb":0,"Private_Hugetlb":0,"Swap":0,"SwapPss":0,"Locked":0,"THPeligible":0,"VmFlags":["rd","ex","mr","mw","me","dw","sd","yy"],"VmFlags_pretty":["readable","executable","may read","may write","may execute","disabled write to the mapped file","soft-dirty flag","yy"]}]
|
||||
@@ -16,7 +16,10 @@ class MyTests(unittest.TestCase):
|
||||
fixtures = {
|
||||
'proc_pid_smaps': (
|
||||
'fixtures/linux-proc/pid_smaps',
|
||||
'fixtures/linux-proc/pid_smaps.json')
|
||||
'fixtures/linux-proc/pid_smaps.json'),
|
||||
'proc_pid_smaps_unknown_flag': (
|
||||
'fixtures/linux-proc/pid_smaps_unknown_flag',
|
||||
'fixtures/linux-proc/pid_smaps_unknown_flag.json')
|
||||
}
|
||||
|
||||
for file, filepaths in fixtures.items():
|
||||
@@ -39,6 +42,13 @@ class MyTests(unittest.TestCase):
|
||||
self.assertEqual(jc.parsers.proc_pid_smaps.parse(self.f_in['proc_pid_smaps'], quiet=True),
|
||||
self.f_json['proc_pid_smaps'])
|
||||
|
||||
def test_proc_pid_smaps_unknown_flag(self):
|
||||
"""
|
||||
Test '/proc/<pid>/smaps' with an unknown flag
|
||||
"""
|
||||
self.assertEqual(jc.parsers.proc_pid_smaps.parse(self.f_in['proc_pid_smaps_unknown_flag'], quiet=True),
|
||||
self.f_json['proc_pid_smaps_unknown_flag'])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user