Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.16/0101-4.16.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3102 - (hide annotations) (download)
Mon Apr 23 10:15:11 2018 UTC (6 years, 1 month ago) by niro
File size: 11630 byte(s)
-added patches up to linux-4.16.3
1 niro 3102 diff --git a/Makefile b/Makefile
2     index 1773c718074e..f0040b05df30 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 16
9     -SUBLEVEL = 1
10     +SUBLEVEL = 2
11     EXTRAVERSION =
12     NAME = Fearless Coyote
13    
14     diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
15     index 9fe85300e7b6..5754116a6a4d 100644
16     --- a/drivers/net/ethernet/marvell/sky2.c
17     +++ b/drivers/net/ethernet/marvell/sky2.c
18     @@ -5087,7 +5087,7 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
19     INIT_WORK(&hw->restart_work, sky2_restart);
20    
21     pci_set_drvdata(pdev, hw);
22     - pdev->d3_delay = 150;
23     + pdev->d3_delay = 200;
24    
25     return 0;
26    
27     diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c
28     index 39abac678b71..99bb679a9801 100644
29     --- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c
30     +++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp.c
31     @@ -71,10 +71,11 @@
32     /* CPP address to retrieve the data from */
33     #define NSP_BUFFER 0x10
34     #define NSP_BUFFER_CPP GENMASK_ULL(63, 40)
35     -#define NSP_BUFFER_PCIE GENMASK_ULL(39, 38)
36     -#define NSP_BUFFER_ADDRESS GENMASK_ULL(37, 0)
37     +#define NSP_BUFFER_ADDRESS GENMASK_ULL(39, 0)
38    
39     #define NSP_DFLT_BUFFER 0x18
40     +#define NSP_DFLT_BUFFER_CPP GENMASK_ULL(63, 40)
41     +#define NSP_DFLT_BUFFER_ADDRESS GENMASK_ULL(39, 0)
42    
43     #define NSP_DFLT_BUFFER_CONFIG 0x20
44     #define NSP_DFLT_BUFFER_SIZE_MB GENMASK_ULL(7, 0)
45     @@ -427,8 +428,8 @@ __nfp_nsp_command_buf(struct nfp_nsp *nsp, u16 code, u32 option,
46     if (err < 0)
47     return err;
48    
49     - cpp_id = FIELD_GET(NSP_BUFFER_CPP, reg) << 8;
50     - cpp_buf = FIELD_GET(NSP_BUFFER_ADDRESS, reg);
51     + cpp_id = FIELD_GET(NSP_DFLT_BUFFER_CPP, reg) << 8;
52     + cpp_buf = FIELD_GET(NSP_DFLT_BUFFER_ADDRESS, reg);
53    
54     if (in_buf && in_size) {
55     err = nfp_cpp_write(cpp, cpp_id, cpp_buf, in_buf, in_size);
56     diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c
57     index 6dde9a0cfe76..9b70a3af678e 100644
58     --- a/drivers/net/ppp/pptp.c
59     +++ b/drivers/net/ppp/pptp.c
60     @@ -464,7 +464,6 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
61     po->chan.mtu = dst_mtu(&rt->dst);
62     if (!po->chan.mtu)
63     po->chan.mtu = PPP_MRU;
64     - ip_rt_put(rt);
65     po->chan.mtu -= PPTP_HEADER_OVERHEAD;
66    
67     po->chan.hdrlen = 2 + sizeof(struct pptp_gre_header);
68     diff --git a/drivers/sbus/char/Kconfig b/drivers/sbus/char/Kconfig
69     index a785aa7660c3..bf3c5f735614 100644
70     --- a/drivers/sbus/char/Kconfig
71     +++ b/drivers/sbus/char/Kconfig
72     @@ -72,7 +72,8 @@ config DISPLAY7SEG
73    
74     config ORACLE_DAX
75     tristate "Oracle Data Analytics Accelerator"
76     - default m if SPARC64
77     + depends on SPARC64
78     + default m
79     help
80     Driver for Oracle Data Analytics Accelerator, which is
81     a coprocessor that performs database operations in hardware.
82     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
83     index f7e83f6d2e64..236452ebbd9e 100644
84     --- a/net/8021q/vlan_dev.c
85     +++ b/net/8021q/vlan_dev.c
86     @@ -29,6 +29,7 @@
87     #include <linux/net_tstamp.h>
88     #include <linux/etherdevice.h>
89     #include <linux/ethtool.h>
90     +#include <linux/phy.h>
91     #include <net/arp.h>
92     #include <net/switchdev.h>
93    
94     @@ -665,8 +666,11 @@ static int vlan_ethtool_get_ts_info(struct net_device *dev,
95     {
96     const struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
97     const struct ethtool_ops *ops = vlan->real_dev->ethtool_ops;
98     + struct phy_device *phydev = vlan->real_dev->phydev;
99    
100     - if (ops->get_ts_info) {
101     + if (phydev && phydev->drv && phydev->drv->ts_info) {
102     + return phydev->drv->ts_info(phydev, info);
103     + } else if (ops->get_ts_info) {
104     return ops->get_ts_info(vlan->real_dev, info);
105     } else {
106     info->so_timestamping = SOF_TIMESTAMPING_RX_SOFTWARE |
107     diff --git a/net/core/dev.c b/net/core/dev.c
108     index ef0cc6ea5f8d..c4aa2941dbfd 100644
109     --- a/net/core/dev.c
110     +++ b/net/core/dev.c
111     @@ -1027,7 +1027,7 @@ bool dev_valid_name(const char *name)
112     {
113     if (*name == '\0')
114     return false;
115     - if (strlen(name) >= IFNAMSIZ)
116     + if (strnlen(name, IFNAMSIZ) == IFNAMSIZ)
117     return false;
118     if (!strcmp(name, ".") || !strcmp(name, ".."))
119     return false;
120     diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h
121     index 70de7895e5b8..053731473c99 100644
122     --- a/net/dsa/dsa_priv.h
123     +++ b/net/dsa/dsa_priv.h
124     @@ -126,6 +126,7 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev,
125     struct dsa_port *cpu_dp = dev->dsa_ptr;
126     struct dsa_switch_tree *dst = cpu_dp->dst;
127     struct dsa_switch *ds;
128     + struct dsa_port *slave_port;
129    
130     if (device < 0 || device >= DSA_MAX_SWITCHES)
131     return NULL;
132     @@ -137,7 +138,12 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev,
133     if (port < 0 || port >= ds->num_ports)
134     return NULL;
135    
136     - return ds->ports[port].slave;
137     + slave_port = &ds->ports[port];
138     +
139     + if (unlikely(slave_port->type != DSA_PORT_TYPE_USER))
140     + return NULL;
141     +
142     + return slave_port->slave;
143     }
144    
145     /* port.c */
146     diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
147     index f28f06c91ead..7333db17c581 100644
148     --- a/net/ipv4/arp.c
149     +++ b/net/ipv4/arp.c
150     @@ -437,7 +437,7 @@ static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev)
151     /*unsigned long now; */
152     struct net *net = dev_net(dev);
153    
154     - rt = ip_route_output(net, sip, tip, 0, 0);
155     + rt = ip_route_output(net, sip, tip, 0, l3mdev_master_ifindex_rcu(dev));
156     if (IS_ERR(rt))
157     return 1;
158     if (rt->dst.dev != dev) {
159     diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
160     index a7fd1c5a2a14..57478d68248d 100644
161     --- a/net/ipv4/ip_tunnel.c
162     +++ b/net/ipv4/ip_tunnel.c
163     @@ -253,13 +253,14 @@ static struct net_device *__ip_tunnel_create(struct net *net,
164     struct net_device *dev;
165     char name[IFNAMSIZ];
166    
167     - if (parms->name[0])
168     + err = -E2BIG;
169     + if (parms->name[0]) {
170     + if (!dev_valid_name(parms->name))
171     + goto failed;
172     strlcpy(name, parms->name, IFNAMSIZ);
173     - else {
174     - if (strlen(ops->kind) > (IFNAMSIZ - 3)) {
175     - err = -E2BIG;
176     + } else {
177     + if (strlen(ops->kind) > (IFNAMSIZ - 3))
178     goto failed;
179     - }
180     strlcpy(name, ops->kind, IFNAMSIZ);
181     strncat(name, "%d", 2);
182     }
183     diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
184     index 1bbd0930063e..197fcae855ca 100644
185     --- a/net/ipv6/ip6_gre.c
186     +++ b/net/ipv6/ip6_gre.c
187     @@ -335,11 +335,13 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,
188     if (t || !create)
189     return t;
190    
191     - if (parms->name[0])
192     + if (parms->name[0]) {
193     + if (!dev_valid_name(parms->name))
194     + return NULL;
195     strlcpy(name, parms->name, IFNAMSIZ);
196     - else
197     + } else {
198     strcpy(name, "ip6gre%d");
199     -
200     + }
201     dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
202     ip6gre_tunnel_setup);
203     if (!dev)
204     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
205     index 5cb18c8ba9b2..4065ae0c32a0 100644
206     --- a/net/ipv6/ip6_output.c
207     +++ b/net/ipv6/ip6_output.c
208     @@ -375,6 +375,11 @@ static int ip6_forward_proxy_check(struct sk_buff *skb)
209     static inline int ip6_forward_finish(struct net *net, struct sock *sk,
210     struct sk_buff *skb)
211     {
212     + struct dst_entry *dst = skb_dst(skb);
213     +
214     + __IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
215     + __IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
216     +
217     return dst_output(net, sk, skb);
218     }
219    
220     @@ -569,8 +574,6 @@ int ip6_forward(struct sk_buff *skb)
221    
222     hdr->hop_limit--;
223    
224     - __IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
225     - __IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
226     return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD,
227     net, NULL, skb, skb->dev, dst->dev,
228     ip6_forward_finish);
229     diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
230     index 6e0f21eed88a..179313b0926c 100644
231     --- a/net/ipv6/ip6_tunnel.c
232     +++ b/net/ipv6/ip6_tunnel.c
233     @@ -297,13 +297,16 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct __ip6_tnl_parm *p)
234     struct net_device *dev;
235     struct ip6_tnl *t;
236     char name[IFNAMSIZ];
237     - int err = -ENOMEM;
238     + int err = -E2BIG;
239    
240     - if (p->name[0])
241     + if (p->name[0]) {
242     + if (!dev_valid_name(p->name))
243     + goto failed;
244     strlcpy(name, p->name, IFNAMSIZ);
245     - else
246     + } else {
247     sprintf(name, "ip6tnl%%d");
248     -
249     + }
250     + err = -ENOMEM;
251     dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
252     ip6_tnl_dev_setup);
253     if (!dev)
254     diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
255     index ce18cd20389d..3726dc797847 100644
256     --- a/net/ipv6/ip6_vti.c
257     +++ b/net/ipv6/ip6_vti.c
258     @@ -212,10 +212,13 @@ static struct ip6_tnl *vti6_tnl_create(struct net *net, struct __ip6_tnl_parm *p
259     char name[IFNAMSIZ];
260     int err;
261    
262     - if (p->name[0])
263     + if (p->name[0]) {
264     + if (!dev_valid_name(p->name))
265     + goto failed;
266     strlcpy(name, p->name, IFNAMSIZ);
267     - else
268     + } else {
269     sprintf(name, "ip6_vti%%d");
270     + }
271    
272     dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, vti6_dev_setup);
273     if (!dev)
274     diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
275     index 0195598f7bb5..e85791854c87 100644
276     --- a/net/ipv6/sit.c
277     +++ b/net/ipv6/sit.c
278     @@ -250,11 +250,13 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
279     if (!create)
280     goto failed;
281    
282     - if (parms->name[0])
283     + if (parms->name[0]) {
284     + if (!dev_valid_name(parms->name))
285     + goto failed;
286     strlcpy(name, parms->name, IFNAMSIZ);
287     - else
288     + } else {
289     strcpy(name, "sit%d");
290     -
291     + }
292     dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
293     ipip6_tunnel_setup);
294     if (!dev)
295     diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c
296     index 9d2cabf1dc7e..f3eee5326307 100644
297     --- a/net/sched/act_bpf.c
298     +++ b/net/sched/act_bpf.c
299     @@ -248,10 +248,14 @@ static int tcf_bpf_init_from_efd(struct nlattr **tb, struct tcf_bpf_cfg *cfg)
300    
301     static void tcf_bpf_cfg_cleanup(const struct tcf_bpf_cfg *cfg)
302     {
303     - if (cfg->is_ebpf)
304     - bpf_prog_put(cfg->filter);
305     - else
306     - bpf_prog_destroy(cfg->filter);
307     + struct bpf_prog *filter = cfg->filter;
308     +
309     + if (filter) {
310     + if (cfg->is_ebpf)
311     + bpf_prog_put(filter);
312     + else
313     + bpf_prog_destroy(filter);
314     + }
315    
316     kfree(cfg->bpf_ops);
317     kfree(cfg->bpf_name);
318     diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
319     index ed8b6a24b9e9..bac47b5d18fd 100644
320     --- a/net/sched/cls_u32.c
321     +++ b/net/sched/cls_u32.c
322     @@ -489,6 +489,7 @@ static int u32_delete_key(struct tcf_proto *tp, struct tc_u_knode *key)
323     RCU_INIT_POINTER(*kp, key->next);
324    
325     tcf_unbind_filter(tp, &key->res);
326     + idr_remove(&ht->handle_idr, key->handle);
327     tcf_exts_get_net(&key->exts);
328     call_rcu(&key->rcu, u32_delete_key_freepf_rcu);
329     return 0;
330     diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
331     index e35d4f73d2df..f6d3d0c1e133 100644
332     --- a/net/sctp/ipv6.c
333     +++ b/net/sctp/ipv6.c
334     @@ -728,8 +728,10 @@ static int sctp_v6_addr_to_user(struct sctp_sock *sp, union sctp_addr *addr)
335     sctp_v6_map_v4(addr);
336     }
337    
338     - if (addr->sa.sa_family == AF_INET)
339     + if (addr->sa.sa_family == AF_INET) {
340     + memset(addr->v4.sin_zero, 0, sizeof(addr->v4.sin_zero));
341     return sizeof(struct sockaddr_in);
342     + }
343     return sizeof(struct sockaddr_in6);
344     }
345    
346     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
347     index bf271f8c2dc9..7160c2e9b768 100644
348     --- a/net/sctp/socket.c
349     +++ b/net/sctp/socket.c
350     @@ -354,11 +354,14 @@ static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
351     if (!opt->pf->af_supported(addr->sa.sa_family, opt))
352     return NULL;
353    
354     - /* V4 mapped address are really of AF_INET family */
355     - if (addr->sa.sa_family == AF_INET6 &&
356     - ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
357     - !opt->pf->af_supported(AF_INET, opt))
358     - return NULL;
359     + if (addr->sa.sa_family == AF_INET6) {
360     + if (len < SIN6_LEN_RFC2133)
361     + return NULL;
362     + /* V4 mapped address are really of AF_INET family */
363     + if (ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
364     + !opt->pf->af_supported(AF_INET, opt))
365     + return NULL;
366     + }
367    
368     /* If we get this far, af is valid. */
369     af = sctp_get_af_specific(addr->sa.sa_family);