diff --git a/expr/range.go b/expr/range.go index e699663..fd03704 100644 --- a/expr/range.go +++ b/expr/range.go @@ -77,9 +77,35 @@ func (e *Range) unmarshal(data []byte) error { case unix.NFTA_RANGE_SREG: e.Register = ad.Uint32() case unix.NFTA_RANGE_FROM_DATA: - e.FromData = ad.Bytes() + ad.Do(func(b []byte) error { + ad, err := netlink.NewAttributeDecoder(b) + if err != nil { + return err + } + ad.ByteOrder = binary.BigEndian + if ad.Next() && ad.Type() == unix.NFTA_DATA_VALUE { + ad.Do(func(b []byte) error { + e.FromData = b + return nil + }) + } + return ad.Err() + }) case unix.NFTA_RANGE_TO_DATA: - e.ToData = ad.Bytes() + ad.Do(func(b []byte) error { + ad, err := netlink.NewAttributeDecoder(b) + if err != nil { + return err + } + ad.ByteOrder = binary.BigEndian + if ad.Next() && ad.Type() == unix.NFTA_DATA_VALUE { + ad.Do(func(b []byte) error { + e.ToData = b + return nil + }) + } + return ad.Err() + }) } } return ad.Err()