proc: additional checks parsing g structs (#4140)

The fields of the sched structure could be unreadable if what we are
parsing isn't a real G struct.

Fixes #4138
This commit is contained in:
Alessandro Arzilli
2025-09-10 17:26:58 +02:00
committed by GitHub
parent d390fc62a2
commit 992c46c1b3

View File

@ -898,9 +898,18 @@ func (v *Variable) parseG() (*G, error) {
if schedVar == nil { if schedVar == nil {
return nil, ErrUnreadableG return nil, ErrUnreadableG
} }
pc, _ := constant.Int64Val(schedVar.fieldVariable("pc").Value) // +rtype uintptr
sp, _ := constant.Int64Val(schedVar.fieldVariable("sp").Value) // +rtype uintptr var pc, sp, bp, lr int64
var bp, lr int64 if pcvar := schedVar.fieldVariable("pc"); /* +rtype uintptr */ pcvar != nil && pcvar.Value != nil {
pc, _ = constant.Int64Val(pcvar.Value)
} else {
return nil, ErrUnreadableG
}
if spvar := schedVar.fieldVariable("sp"); /* +rtype uintptr */ spvar != nil && spvar.Value != nil {
sp, _ = constant.Int64Val(spvar.Value)
} else {
return nil, ErrUnreadableG
}
if bpvar := schedVar.fieldVariable("bp"); /* +rtype -opt uintptr */ bpvar != nil && bpvar.Value != nil { if bpvar := schedVar.fieldVariable("bp"); /* +rtype -opt uintptr */ bpvar != nil && bpvar.Value != nil {
bp, _ = constant.Int64Val(bpvar.Value) bp, _ = constant.Int64Val(bpvar.Value)
} }