Annotation of /trunk/kernel-magellan/patches-4.16/0101-4.16.2-all-fixes.patch
Parent Directory | Revision Log
Revision 3102 -
(hide annotations)
(download)
Mon Apr 23 10:15:11 2018 UTC (6 years, 5 months ago) by niro
File size: 11630 byte(s)
Mon Apr 23 10:15:11 2018 UTC (6 years, 5 months 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); |