diff options
| author | Kukjin Kim <kgene.kim@samsung.com> | 2014-05-30 13:36:49 -0400 |
|---|---|---|
| committer | Kukjin Kim <kgene.kim@samsung.com> | 2014-05-30 13:36:49 -0400 |
| commit | fced6dee29f6fb143fe16ea90331176ff77e6120 (patch) | |
| tree | 5b6e57e7a757adc2a6518ce291a4d2914397b917 /net/core | |
| parent | bfed1074f213051e94648bfad0d0611a16d81366 (diff) | |
| parent | be1f7c8d7e2bc8b8c76846aa6f276e8d2ef8975a (diff) | |
Merge branch 'v3.16-next/cleanup-samsung' into v3.16-next/platform-exynos
Diffstat (limited to 'net/core')
| -rw-r--r-- | net/core/dev.c | 3 | ||||
| -rw-r--r-- | net/core/dst.c | 15 | ||||
| -rw-r--r-- | net/core/filter.c | 9 |
3 files changed, 18 insertions, 9 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 14dac0654f28..d2c8a06b3a98 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -2284,7 +2284,7 @@ EXPORT_SYMBOL(skb_checksum_help); | |||
| 2284 | __be16 skb_network_protocol(struct sk_buff *skb, int *depth) | 2284 | __be16 skb_network_protocol(struct sk_buff *skb, int *depth) |
| 2285 | { | 2285 | { |
| 2286 | __be16 type = skb->protocol; | 2286 | __be16 type = skb->protocol; |
| 2287 | int vlan_depth = ETH_HLEN; | 2287 | int vlan_depth = skb->mac_len; |
| 2288 | 2288 | ||
| 2289 | /* Tunnel gso handlers can set protocol to ethernet. */ | 2289 | /* Tunnel gso handlers can set protocol to ethernet. */ |
| 2290 | if (type == htons(ETH_P_TEB)) { | 2290 | if (type == htons(ETH_P_TEB)) { |
| @@ -5238,6 +5238,7 @@ void __dev_set_rx_mode(struct net_device *dev) | |||
| 5238 | if (ops->ndo_set_rx_mode) | 5238 | if (ops->ndo_set_rx_mode) |
| 5239 | ops->ndo_set_rx_mode(dev); | 5239 | ops->ndo_set_rx_mode(dev); |
| 5240 | } | 5240 | } |
| 5241 | EXPORT_SYMBOL(__dev_set_rx_mode); | ||
| 5241 | 5242 | ||
| 5242 | void dev_set_rx_mode(struct net_device *dev) | 5243 | void dev_set_rx_mode(struct net_device *dev) |
| 5243 | { | 5244 | { |
diff --git a/net/core/dst.c b/net/core/dst.c index ca4231ec7347..80d6286c8b62 100644 --- a/net/core/dst.c +++ b/net/core/dst.c | |||
| @@ -142,12 +142,12 @@ loop: | |||
| 142 | mutex_unlock(&dst_gc_mutex); | 142 | mutex_unlock(&dst_gc_mutex); |
| 143 | } | 143 | } |
| 144 | 144 | ||
| 145 | int dst_discard(struct sk_buff *skb) | 145 | int dst_discard_sk(struct sock *sk, struct sk_buff *skb) |
| 146 | { | 146 | { |
| 147 | kfree_skb(skb); | 147 | kfree_skb(skb); |
| 148 | return 0; | 148 | return 0; |
| 149 | } | 149 | } |
| 150 | EXPORT_SYMBOL(dst_discard); | 150 | EXPORT_SYMBOL(dst_discard_sk); |
| 151 | 151 | ||
| 152 | const u32 dst_default_metrics[RTAX_MAX + 1] = { | 152 | const u32 dst_default_metrics[RTAX_MAX + 1] = { |
| 153 | /* This initializer is needed to force linker to place this variable | 153 | /* This initializer is needed to force linker to place this variable |
| @@ -184,7 +184,7 @@ void *dst_alloc(struct dst_ops *ops, struct net_device *dev, | |||
| 184 | dst->xfrm = NULL; | 184 | dst->xfrm = NULL; |
| 185 | #endif | 185 | #endif |
| 186 | dst->input = dst_discard; | 186 | dst->input = dst_discard; |
| 187 | dst->output = dst_discard; | 187 | dst->output = dst_discard_sk; |
| 188 | dst->error = 0; | 188 | dst->error = 0; |
| 189 | dst->obsolete = initial_obsolete; | 189 | dst->obsolete = initial_obsolete; |
| 190 | dst->header_len = 0; | 190 | dst->header_len = 0; |
| @@ -209,8 +209,10 @@ static void ___dst_free(struct dst_entry *dst) | |||
| 209 | /* The first case (dev==NULL) is required, when | 209 | /* The first case (dev==NULL) is required, when |
| 210 | protocol module is unloaded. | 210 | protocol module is unloaded. |
| 211 | */ | 211 | */ |
| 212 | if (dst->dev == NULL || !(dst->dev->flags&IFF_UP)) | 212 | if (dst->dev == NULL || !(dst->dev->flags&IFF_UP)) { |
| 213 | dst->input = dst->output = dst_discard; | 213 | dst->input = dst_discard; |
| 214 | dst->output = dst_discard_sk; | ||
| 215 | } | ||
| 214 | dst->obsolete = DST_OBSOLETE_DEAD; | 216 | dst->obsolete = DST_OBSOLETE_DEAD; |
| 215 | } | 217 | } |
| 216 | 218 | ||
| @@ -361,7 +363,8 @@ static void dst_ifdown(struct dst_entry *dst, struct net_device *dev, | |||
| 361 | return; | 363 | return; |
| 362 | 364 | ||
| 363 | if (!unregister) { | 365 | if (!unregister) { |
| 364 | dst->input = dst->output = dst_discard; | 366 | dst->input = dst_discard; |
| 367 | dst->output = dst_discard_sk; | ||
| 365 | } else { | 368 | } else { |
| 366 | dst->dev = dev_net(dst->dev)->loopback_dev; | 369 | dst->dev = dev_net(dst->dev)->loopback_dev; |
| 367 | dev_hold(dst->dev); | 370 | dev_hold(dst->dev); |
diff --git a/net/core/filter.c b/net/core/filter.c index e08b3822c72a..cd58614660cf 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
| @@ -600,6 +600,9 @@ static u64 __skb_get_nlattr(u64 ctx, u64 A, u64 X, u64 r4, u64 r5) | |||
| 600 | if (skb_is_nonlinear(skb)) | 600 | if (skb_is_nonlinear(skb)) |
| 601 | return 0; | 601 | return 0; |
| 602 | 602 | ||
| 603 | if (skb->len < sizeof(struct nlattr)) | ||
| 604 | return 0; | ||
| 605 | |||
| 603 | if (A > skb->len - sizeof(struct nlattr)) | 606 | if (A > skb->len - sizeof(struct nlattr)) |
| 604 | return 0; | 607 | return 0; |
| 605 | 608 | ||
| @@ -618,11 +621,14 @@ static u64 __skb_get_nlattr_nest(u64 ctx, u64 A, u64 X, u64 r4, u64 r5) | |||
| 618 | if (skb_is_nonlinear(skb)) | 621 | if (skb_is_nonlinear(skb)) |
| 619 | return 0; | 622 | return 0; |
| 620 | 623 | ||
| 624 | if (skb->len < sizeof(struct nlattr)) | ||
| 625 | return 0; | ||
| 626 | |||
| 621 | if (A > skb->len - sizeof(struct nlattr)) | 627 | if (A > skb->len - sizeof(struct nlattr)) |
| 622 | return 0; | 628 | return 0; |
| 623 | 629 | ||
| 624 | nla = (struct nlattr *) &skb->data[A]; | 630 | nla = (struct nlattr *) &skb->data[A]; |
| 625 | if (nla->nla_len > A - skb->len) | 631 | if (nla->nla_len > skb->len - A) |
| 626 | return 0; | 632 | return 0; |
| 627 | 633 | ||
| 628 | nla = nla_find_nested(nla, X); | 634 | nla = nla_find_nested(nla, X); |
| @@ -1737,7 +1743,6 @@ void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) | |||
| 1737 | [BPF_S_ANC_RXHASH] = BPF_LD|BPF_B|BPF_ABS, | 1743 | [BPF_S_ANC_RXHASH] = BPF_LD|BPF_B|BPF_ABS, |
| 1738 | [BPF_S_ANC_CPU] = BPF_LD|BPF_B|BPF_ABS, | 1744 | [BPF_S_ANC_CPU] = BPF_LD|BPF_B|BPF_ABS, |
| 1739 | [BPF_S_ANC_ALU_XOR_X] = BPF_LD|BPF_B|BPF_ABS, | 1745 | [BPF_S_ANC_ALU_XOR_X] = BPF_LD|BPF_B|BPF_ABS, |
| 1740 | [BPF_S_ANC_SECCOMP_LD_W] = BPF_LD|BPF_B|BPF_ABS, | ||
| 1741 | [BPF_S_ANC_VLAN_TAG] = BPF_LD|BPF_B|BPF_ABS, | 1746 | [BPF_S_ANC_VLAN_TAG] = BPF_LD|BPF_B|BPF_ABS, |
| 1742 | [BPF_S_ANC_VLAN_TAG_PRESENT] = BPF_LD|BPF_B|BPF_ABS, | 1747 | [BPF_S_ANC_VLAN_TAG_PRESENT] = BPF_LD|BPF_B|BPF_ABS, |
| 1743 | [BPF_S_ANC_PAY_OFFSET] = BPF_LD|BPF_B|BPF_ABS, | 1748 | [BPF_S_ANC_PAY_OFFSET] = BPF_LD|BPF_B|BPF_ABS, |
