@@ -2910,9 +2910,19 @@ static inline void skb_reset_inner_headers(struct sk_buff *skb)
29102910 skb -> inner_transport_header = skb -> transport_header ;
29112911}
29122912
2913+ static inline int skb_mac_header_was_set (const struct sk_buff * skb )
2914+ {
2915+ return skb -> mac_header != (typeof (skb -> mac_header ))~0U ;
2916+ }
2917+
29132918static inline void skb_reset_mac_len (struct sk_buff * skb )
29142919{
2915- skb -> mac_len = skb -> network_header - skb -> mac_header ;
2920+ if (!skb_mac_header_was_set (skb )) {
2921+ DEBUG_NET_WARN_ON_ONCE (1 );
2922+ skb -> mac_len = 0 ;
2923+ } else {
2924+ skb -> mac_len = skb -> network_header - skb -> mac_header ;
2925+ }
29162926}
29172927
29182928static inline unsigned char * skb_inner_transport_header (const struct sk_buff
@@ -3015,11 +3025,6 @@ static inline void skb_set_network_header(struct sk_buff *skb, const int offset)
30153025 skb -> network_header += offset ;
30163026}
30173027
3018- static inline int skb_mac_header_was_set (const struct sk_buff * skb )
3019- {
3020- return skb -> mac_header != (typeof (skb -> mac_header ))~0U ;
3021- }
3022-
30233028static inline unsigned char * skb_mac_header (const struct sk_buff * skb )
30243029{
30253030 DEBUG_NET_WARN_ON_ONCE (!skb_mac_header_was_set (skb ));
@@ -3044,7 +3049,10 @@ static inline void skb_unset_mac_header(struct sk_buff *skb)
30443049
30453050static inline void skb_reset_mac_header (struct sk_buff * skb )
30463051{
3047- skb -> mac_header = skb -> data - skb -> head ;
3052+ long offset = skb -> data - skb -> head ;
3053+
3054+ DEBUG_NET_WARN_ON_ONCE (offset != (typeof (skb -> mac_header ))offset );
3055+ skb -> mac_header = offset ;
30483056}
30493057
30503058static inline void skb_set_mac_header (struct sk_buff * skb , const int offset )
0 commit comments