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()