From dbfde45901ecc299256ec66c43df838ccca7134b Mon Sep 17 00:00:00 2001 From: mohammadmseet-hue Date: Sat, 11 Apr 2026 18:57:02 +0200 Subject: [PATCH] Fix panic on malformed PrismHeader packets Add minimum data length check and validate PrismHeader.Length against actual data length before using it for slicing. Malformed packets with short data or inflated Length fields caused slice bounds panics. --- layers/prism.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/layers/prism.go b/layers/prism.go index e1711e7f5..f53479075 100644 --- a/layers/prism.go +++ b/layers/prism.go @@ -11,6 +11,7 @@ package layers import ( "encoding/binary" "errors" + "fmt" "github.com/google/gopacket" ) @@ -113,8 +114,16 @@ type PrismHeader struct { func (m *PrismHeader) LayerType() gopacket.LayerType { return LayerTypePrismHeader } func (m *PrismHeader) DecodeFromBytes(data []byte, df gopacket.DecodeFeedback) error { + if len(data) < 24 { + df.SetTruncated() + return errors.New("PrismHeader too short") + } m.Code = binary.LittleEndian.Uint16(data[0:4]) m.Length = binary.LittleEndian.Uint16(data[4:8]) + if int(m.Length) > len(data) { + df.SetTruncated() + return fmt.Errorf("PrismHeader length %d exceeds data length %d", m.Length, len(data)) + } m.DeviceName = string(data[8:24]) m.BaseLayer = BaseLayer{Contents: data[:m.Length], Payload: data[m.Length:len(data)]}