diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 4 | ||||
-rw-r--r-- | net/core/filter.c | 12 | ||||
-rw-r--r-- | net/core/skbuff.c | 4 |
3 files changed, 10 insertions, 10 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index ecbe419e05ab..a3d13f5e2bfc 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -8215,7 +8215,7 @@ static netdev_features_t netdev_sync_upper_features(struct net_device *lower, | |||
8215 | netdev_features_t feature; | 8215 | netdev_features_t feature; |
8216 | int feature_bit; | 8216 | int feature_bit; |
8217 | 8217 | ||
8218 | for_each_netdev_feature(&upper_disables, feature_bit) { | 8218 | for_each_netdev_feature(upper_disables, feature_bit) { |
8219 | feature = __NETIF_F_BIT(feature_bit); | 8219 | feature = __NETIF_F_BIT(feature_bit); |
8220 | if (!(upper->wanted_features & feature) | 8220 | if (!(upper->wanted_features & feature) |
8221 | && (features & feature)) { | 8221 | && (features & feature)) { |
@@ -8235,7 +8235,7 @@ static void netdev_sync_lower_features(struct net_device *upper, | |||
8235 | netdev_features_t feature; | 8235 | netdev_features_t feature; |
8236 | int feature_bit; | 8236 | int feature_bit; |
8237 | 8237 | ||
8238 | for_each_netdev_feature(&upper_disables, feature_bit) { | 8238 | for_each_netdev_feature(upper_disables, feature_bit) { |
8239 | feature = __NETIF_F_BIT(feature_bit); | 8239 | feature = __NETIF_F_BIT(feature_bit); |
8240 | if (!(features & feature) && (lower->features & feature)) { | 8240 | if (!(features & feature) && (lower->features & feature)) { |
8241 | netdev_dbg(upper, "Disabling feature %pNF on lower dev %s.\n", | 8241 | netdev_dbg(upper, "Disabling feature %pNF on lower dev %s.\n", |
diff --git a/net/core/filter.c b/net/core/filter.c index b584cb42a803..5132c054c981 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -2804,8 +2804,7 @@ static int bpf_skb_proto_4_to_6(struct sk_buff *skb) | |||
2804 | u32 off = skb_mac_header_len(skb); | 2804 | u32 off = skb_mac_header_len(skb); |
2805 | int ret; | 2805 | int ret; |
2806 | 2806 | ||
2807 | /* SCTP uses GSO_BY_FRAGS, thus cannot adjust it. */ | 2807 | if (!skb_is_gso_tcp(skb)) |
2808 | if (skb_is_gso(skb) && unlikely(skb_is_gso_sctp(skb))) | ||
2809 | return -ENOTSUPP; | 2808 | return -ENOTSUPP; |
2810 | 2809 | ||
2811 | ret = skb_cow(skb, len_diff); | 2810 | ret = skb_cow(skb, len_diff); |
@@ -2846,8 +2845,7 @@ static int bpf_skb_proto_6_to_4(struct sk_buff *skb) | |||
2846 | u32 off = skb_mac_header_len(skb); | 2845 | u32 off = skb_mac_header_len(skb); |
2847 | int ret; | 2846 | int ret; |
2848 | 2847 | ||
2849 | /* SCTP uses GSO_BY_FRAGS, thus cannot adjust it. */ | 2848 | if (!skb_is_gso_tcp(skb)) |
2850 | if (skb_is_gso(skb) && unlikely(skb_is_gso_sctp(skb))) | ||
2851 | return -ENOTSUPP; | 2849 | return -ENOTSUPP; |
2852 | 2850 | ||
2853 | ret = skb_unclone(skb, GFP_ATOMIC); | 2851 | ret = skb_unclone(skb, GFP_ATOMIC); |
@@ -2972,8 +2970,7 @@ static int bpf_skb_net_grow(struct sk_buff *skb, u32 len_diff) | |||
2972 | u32 off = skb_mac_header_len(skb) + bpf_skb_net_base_len(skb); | 2970 | u32 off = skb_mac_header_len(skb) + bpf_skb_net_base_len(skb); |
2973 | int ret; | 2971 | int ret; |
2974 | 2972 | ||
2975 | /* SCTP uses GSO_BY_FRAGS, thus cannot adjust it. */ | 2973 | if (!skb_is_gso_tcp(skb)) |
2976 | if (skb_is_gso(skb) && unlikely(skb_is_gso_sctp(skb))) | ||
2977 | return -ENOTSUPP; | 2974 | return -ENOTSUPP; |
2978 | 2975 | ||
2979 | ret = skb_cow(skb, len_diff); | 2976 | ret = skb_cow(skb, len_diff); |
@@ -3002,8 +2999,7 @@ static int bpf_skb_net_shrink(struct sk_buff *skb, u32 len_diff) | |||
3002 | u32 off = skb_mac_header_len(skb) + bpf_skb_net_base_len(skb); | 2999 | u32 off = skb_mac_header_len(skb) + bpf_skb_net_base_len(skb); |
3003 | int ret; | 3000 | int ret; |
3004 | 3001 | ||
3005 | /* SCTP uses GSO_BY_FRAGS, thus cannot adjust it. */ | 3002 | if (!skb_is_gso_tcp(skb)) |
3006 | if (skb_is_gso(skb) && unlikely(skb_is_gso_sctp(skb))) | ||
3007 | return -ENOTSUPP; | 3003 | return -ENOTSUPP; |
3008 | 3004 | ||
3009 | ret = skb_unclone(skb, GFP_ATOMIC); | 3005 | ret = skb_unclone(skb, GFP_ATOMIC); |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 26d848484912..2415d9cb9b89 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -356,6 +356,8 @@ static void *__netdev_alloc_frag(unsigned int fragsz, gfp_t gfp_mask) | |||
356 | */ | 356 | */ |
357 | void *netdev_alloc_frag(unsigned int fragsz) | 357 | void *netdev_alloc_frag(unsigned int fragsz) |
358 | { | 358 | { |
359 | fragsz = SKB_DATA_ALIGN(fragsz); | ||
360 | |||
359 | return __netdev_alloc_frag(fragsz, GFP_ATOMIC); | 361 | return __netdev_alloc_frag(fragsz, GFP_ATOMIC); |
360 | } | 362 | } |
361 | EXPORT_SYMBOL(netdev_alloc_frag); | 363 | EXPORT_SYMBOL(netdev_alloc_frag); |
@@ -369,6 +371,8 @@ static void *__napi_alloc_frag(unsigned int fragsz, gfp_t gfp_mask) | |||
369 | 371 | ||
370 | void *napi_alloc_frag(unsigned int fragsz) | 372 | void *napi_alloc_frag(unsigned int fragsz) |
371 | { | 373 | { |
374 | fragsz = SKB_DATA_ALIGN(fragsz); | ||
375 | |||
372 | return __napi_alloc_frag(fragsz, GFP_ATOMIC); | 376 | return __napi_alloc_frag(fragsz, GFP_ATOMIC); |
373 | } | 377 | } |
374 | EXPORT_SYMBOL(napi_alloc_frag); | 378 | EXPORT_SYMBOL(napi_alloc_frag); |