Thanks to visit codestin.com
Credit goes to github.com

Skip to content

crash attempting to parse perf sched recording #8

@jasonk000

Description

@jasonk000

Crashes due to some header parsing issue when attempting to read a perf sched recording.

Specifically, it looks to attempt to call skip() over a buffer of much shorter length during parseSample.

To reproduce:

$ sudo perf sched record -- sleep 3
$ sudo chmod 644 perf.data
$ ./perfdump -i ./perf.data 
events:
  0xc0000ca000={Event:317 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca080={Event:305 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca100={Event:311 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca180={Event:318 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca200={Event:316 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca280={Event:320 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca300={Event:309 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca380={Event:308 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca400={Event:307 SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Period|Raw|TID|Time ReadFormat:ID Flags:Disabled|ExcludeGuest|Inherit|SampleIDAll Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
  0xc0000ca480={Event:EventSoftwareDummy SamplePeriod:1 SampleFreq:0 SampleFormat:CPU|IP|Identifier|Raw|TID|Time ReadFormat:ID Flags:AuxOutput|Comm|CommExec|Inherit|Ksymbol|Mmap|MmapInodeData|SampleIDAll|Task Precise:EventPrecisionArbitrarySkid WakeupEvents:0 WakeupWatermark:0 BranchSampleType:0 SampleRegsUser:0 SampleStackUser:0 SampleRegsIntr:0 AuxWatermark:0 SampleMaxStack:0}
build IDs:
  {CPUModeKernel -1 77ab8542b6540fae3367bbb18a7aeede3c3b6f7b [kernel.kallsyms]}
  {CPUModeUser -1 f33b8f26bed889157b75129711599f9ca5ec9d0e [vdso]}
hostname: jkoch
OS release: 5.19.0-35-generic
version: 
arch: x86_64
CPUs online: 32
CPUs available: 32
CPU desc: AMD Ryzen 9 5950X 16-Core Processor
CPUID: AuthenticAMD,25,33,0
total memory: 134984663040
cmdline: [/usr/lib/linux-hwe-5.19-tools-5.19.0-35/perf sched record -- sleep 3]
core groups: [0-31]
thread groups: [0,16 1,17 2,18 3,19 4,20 5,21 6,22 7,23 8,24 9,25 10,26 11,27 12,28 13,29 14,30 15,31]
NUMA nodes: [{0 134984663040 118821437440 0-31}]
PMU mappings: map[1:software 2:tracepoint 4:cpu 5:breakpoint 6:kprobe 7:uprobe 8:ibs_fetch 9:ibs_op 10:amd_iommu_0 11:msr 12:power]
groups: []

panic: runtime error: slice bounds out of range [38803:60]

goroutine 1 [running]:
github.com/aclements/go-perf/perffile.(*bufDecoder).skip(...)
	/home/jkoch/code/go-perf/perffile/bufdecoder.go:15
github.com/aclements/go-perf/perffile.(*Records).parseSample(0xc0000ca500, 0xc0000939b0, 0xc000340168, 0x68?)
	/home/jkoch/code/go-perf/perffile/records.go:538 +0x164b
github.com/aclements/go-perf/perffile.(*Records).Next(0xc0000ca500)
	/home/jkoch/code/go-perf/perffile/records.go:148 +0x525
github.com/aclements/go-perf/perffile.(*File).Records(0xc0000c8000, 0xc00000e018?)
	/home/jkoch/code/go-perf/perffile/reader.go:350 +0x2f5
main.main()
	/home/jkoch/code/go-perf/cmd/perfdump/main.go:77 +0x84b

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions