Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.9 commit in: /
Date: Mon, 16 Sep 2019 12:22:11
Message-Id: 1568636513.bec52827cf3c1f86493edb9c70f3fce11cc81512.mpagano@gentoo
1 commit: bec52827cf3c1f86493edb9c70f3fce11cc81512
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Mon Sep 16 12:21:53 2019 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Mon Sep 16 12:21:53 2019 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=bec52827
7
8 Linux patch 4.9.193
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1192_linux-4.9.193.patch | 399 +++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 403 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 9e9b006..5442280 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -811,6 +811,10 @@ Patch: 1191_linux-4.9.192.patch
21 From: http://www.kernel.org
22 Desc: Linux 4.9.192
23
24 +Patch: 1192_linux-4.9.193.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 4.9.193
27 +
28 Patch: 1500_XATTR_USER_PREFIX.patch
29 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
30 Desc: Support for namespace user.pax.* on tmpfs.
31
32 diff --git a/1192_linux-4.9.193.patch b/1192_linux-4.9.193.patch
33 new file mode 100644
34 index 0000000..3a1c1b1
35 --- /dev/null
36 +++ b/1192_linux-4.9.193.patch
37 @@ -0,0 +1,399 @@
38 +diff --git a/Makefile b/Makefile
39 +index 946951930f62..48f79c6729ad 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,6 +1,6 @@
43 + VERSION = 4
44 + PATCHLEVEL = 9
45 +-SUBLEVEL = 192
46 ++SUBLEVEL = 193
47 + EXTRAVERSION =
48 + NAME = Roaring Lionus
49 +
50 +diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
51 +index 609f0e87ced7..47c6c0401b3a 100644
52 +--- a/arch/powerpc/kernel/process.c
53 ++++ b/arch/powerpc/kernel/process.c
54 +@@ -476,13 +476,14 @@ void giveup_all(struct task_struct *tsk)
55 + if (!tsk->thread.regs)
56 + return;
57 +
58 ++ check_if_tm_restore_required(tsk);
59 ++
60 + usermsr = tsk->thread.regs->msr;
61 +
62 + if ((usermsr & msr_all_available) == 0)
63 + return;
64 +
65 + msr_check_and_set(msr_all_available);
66 +- check_if_tm_restore_required(tsk);
67 +
68 + #ifdef CONFIG_PPC_FPU
69 + if (usermsr & MSR_FP)
70 +diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c
71 +index 14071a57c926..f5d74e8db432 100644
72 +--- a/drivers/clk/clk-s2mps11.c
73 ++++ b/drivers/clk/clk-s2mps11.c
74 +@@ -255,7 +255,7 @@ MODULE_DEVICE_TABLE(platform, s2mps11_clk_id);
75 + * This requires of_device_id table. In the same time this will not change the
76 + * actual *device* matching so do not add .of_match_table.
77 + */
78 +-static const struct of_device_id s2mps11_dt_match[] = {
79 ++static const struct of_device_id s2mps11_dt_match[] __used = {
80 + {
81 + .compatible = "samsung,s2mps11-clk",
82 + .data = (void *)S2MPS11X,
83 +diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
84 +index 77df50dd6d30..123d85de80d6 100644
85 +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
86 ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
87 +@@ -264,7 +264,7 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
88 +
89 + if ((HIGH_WORD(ebx) & MESSAGE_STATUS_SUCCESS) == 0) {
90 + kfree(reply);
91 +-
92 ++ reply = NULL;
93 + if ((HIGH_WORD(ebx) & MESSAGE_STATUS_CPT) != 0) {
94 + /* A checkpoint occurred. Retry. */
95 + continue;
96 +@@ -288,7 +288,7 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
97 +
98 + if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0) {
99 + kfree(reply);
100 +-
101 ++ reply = NULL;
102 + if ((HIGH_WORD(ecx) & MESSAGE_STATUS_CPT) != 0) {
103 + /* A checkpoint occurred. Retry. */
104 + continue;
105 +@@ -300,10 +300,8 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
106 + break;
107 + }
108 +
109 +- if (retries == RETRIES) {
110 +- kfree(reply);
111 ++ if (!reply)
112 + return -EINVAL;
113 +- }
114 +
115 + *msg_len = reply_len;
116 + *msg = reply;
117 +diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c
118 +index 3cc98c07dcd3..682fc58e1f75 100644
119 +--- a/drivers/vhost/test.c
120 ++++ b/drivers/vhost/test.c
121 +@@ -23,6 +23,12 @@
122 + * Using this limit prevents one virtqueue from starving others. */
123 + #define VHOST_TEST_WEIGHT 0x80000
124 +
125 ++/* Max number of packets transferred before requeueing the job.
126 ++ * Using this limit prevents one virtqueue from starving others with
127 ++ * pkts.
128 ++ */
129 ++#define VHOST_TEST_PKT_WEIGHT 256
130 ++
131 + enum {
132 + VHOST_TEST_VQ = 0,
133 + VHOST_TEST_VQ_MAX = 1,
134 +@@ -81,10 +87,8 @@ static void handle_vq(struct vhost_test *n)
135 + }
136 + vhost_add_used_and_signal(&n->dev, vq, head, 0);
137 + total_len += len;
138 +- if (unlikely(total_len >= VHOST_TEST_WEIGHT)) {
139 +- vhost_poll_queue(&vq->poll);
140 ++ if (unlikely(vhost_exceeds_weight(vq, 0, total_len)))
141 + break;
142 +- }
143 + }
144 +
145 + mutex_unlock(&vq->mutex);
146 +@@ -116,7 +120,8 @@ static int vhost_test_open(struct inode *inode, struct file *f)
147 + dev = &n->dev;
148 + vqs[VHOST_TEST_VQ] = &n->vqs[VHOST_TEST_VQ];
149 + n->vqs[VHOST_TEST_VQ].handle_kick = handle_vq_kick;
150 +- vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX);
151 ++ vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX,
152 ++ VHOST_TEST_PKT_WEIGHT, VHOST_TEST_WEIGHT);
153 +
154 + f->private_data = n;
155 +
156 +diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
157 +index 8da95d4ac4b7..b14e62f11075 100644
158 +--- a/drivers/vhost/vhost.c
159 ++++ b/drivers/vhost/vhost.c
160 +@@ -1987,7 +1987,7 @@ static int get_indirect(struct vhost_virtqueue *vq,
161 + /* If this is an input descriptor, increment that count. */
162 + if (access == VHOST_ACCESS_WO) {
163 + *in_num += ret;
164 +- if (unlikely(log)) {
165 ++ if (unlikely(log && ret)) {
166 + log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
167 + log[*log_num].len = vhost32_to_cpu(vq, desc.len);
168 + ++*log_num;
169 +@@ -2123,7 +2123,7 @@ int vhost_get_vq_desc(struct vhost_virtqueue *vq,
170 + /* If this is an input descriptor,
171 + * increment that count. */
172 + *in_num += ret;
173 +- if (unlikely(log)) {
174 ++ if (unlikely(log && ret)) {
175 + log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
176 + log[*log_num].len = vhost32_to_cpu(vq, desc.len);
177 + ++*log_num;
178 +diff --git a/include/net/ipv6_frag.h b/include/net/ipv6_frag.h
179 +index 28aa9b30aece..1f77fb4dc79d 100644
180 +--- a/include/net/ipv6_frag.h
181 ++++ b/include/net/ipv6_frag.h
182 +@@ -94,7 +94,6 @@ ip6frag_expire_frag_queue(struct net *net, struct frag_queue *fq)
183 + goto out;
184 +
185 + head->dev = dev;
186 +- skb_get(head);
187 + spin_unlock(&fq->q.lock);
188 +
189 + icmpv6_send(head, ICMPV6_TIME_EXCEED, ICMPV6_EXC_FRAGTIME, 0);
190 +diff --git a/include/net/xfrm.h b/include/net/xfrm.h
191 +index 835c30e491c8..9e2f260cbb51 100644
192 +--- a/include/net/xfrm.h
193 ++++ b/include/net/xfrm.h
194 +@@ -1297,6 +1297,23 @@ static inline int xfrm_state_kern(const struct xfrm_state *x)
195 + return atomic_read(&x->tunnel_users);
196 + }
197 +
198 ++static inline bool xfrm_id_proto_valid(u8 proto)
199 ++{
200 ++ switch (proto) {
201 ++ case IPPROTO_AH:
202 ++ case IPPROTO_ESP:
203 ++ case IPPROTO_COMP:
204 ++#if IS_ENABLED(CONFIG_IPV6)
205 ++ case IPPROTO_ROUTING:
206 ++ case IPPROTO_DSTOPTS:
207 ++#endif
208 ++ return true;
209 ++ default:
210 ++ return false;
211 ++ }
212 ++}
213 ++
214 ++/* IPSEC_PROTO_ANY only matches 3 IPsec protocols, 0 could match all. */
215 + static inline int xfrm_id_proto_match(u8 proto, u8 userproto)
216 + {
217 + return (!userproto || proto == userproto ||
218 +diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
219 +index 924bb307c0fa..b314feaf91f4 100644
220 +--- a/kernel/sched/fair.c
221 ++++ b/kernel/sched/fair.c
222 +@@ -3882,6 +3882,8 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec)
223 + if (likely(cfs_rq->runtime_remaining > 0))
224 + return;
225 +
226 ++ if (cfs_rq->throttled)
227 ++ return;
228 + /*
229 + * if we're unable to extend our runtime we resched so that the active
230 + * hierarchy can be throttled
231 +@@ -4077,6 +4079,9 @@ static u64 distribute_cfs_runtime(struct cfs_bandwidth *cfs_b,
232 + if (!cfs_rq_throttled(cfs_rq))
233 + goto next;
234 +
235 ++ /* By the above check, this should never be true */
236 ++ SCHED_WARN_ON(cfs_rq->runtime_remaining > 0);
237 ++
238 + runtime = -cfs_rq->runtime_remaining + 1;
239 + if (runtime > remaining)
240 + runtime = remaining;
241 +diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
242 +index 1ae8c59fcb2d..780700fcbe63 100644
243 +--- a/net/batman-adv/bat_iv_ogm.c
244 ++++ b/net/batman-adv/bat_iv_ogm.c
245 +@@ -450,17 +450,23 @@ static u8 batadv_hop_penalty(u8 tq, const struct batadv_priv *bat_priv)
246 + * batadv_iv_ogm_aggr_packet - checks if there is another OGM attached
247 + * @buff_pos: current position in the skb
248 + * @packet_len: total length of the skb
249 +- * @tvlv_len: tvlv length of the previously considered OGM
250 ++ * @ogm_packet: potential OGM in buffer
251 + *
252 + * Return: true if there is enough space for another OGM, false otherwise.
253 + */
254 +-static bool batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
255 +- __be16 tvlv_len)
256 ++static bool
257 ++batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
258 ++ const struct batadv_ogm_packet *ogm_packet)
259 + {
260 + int next_buff_pos = 0;
261 +
262 +- next_buff_pos += buff_pos + BATADV_OGM_HLEN;
263 +- next_buff_pos += ntohs(tvlv_len);
264 ++ /* check if there is enough space for the header */
265 ++ next_buff_pos += buff_pos + sizeof(*ogm_packet);
266 ++ if (next_buff_pos > packet_len)
267 ++ return false;
268 ++
269 ++ /* check if there is enough space for the optional TVLV */
270 ++ next_buff_pos += ntohs(ogm_packet->tvlv_len);
271 +
272 + return (next_buff_pos <= packet_len) &&
273 + (next_buff_pos <= BATADV_MAX_AGGREGATION_BYTES);
274 +@@ -488,7 +494,7 @@ static void batadv_iv_ogm_send_to_if(struct batadv_forw_packet *forw_packet,
275 +
276 + /* adjust all flags and log packets */
277 + while (batadv_iv_ogm_aggr_packet(buff_pos, forw_packet->packet_len,
278 +- batadv_ogm_packet->tvlv_len)) {
279 ++ batadv_ogm_packet)) {
280 + /* we might have aggregated direct link packets with an
281 + * ordinary base packet
282 + */
283 +@@ -1841,7 +1847,7 @@ static int batadv_iv_ogm_receive(struct sk_buff *skb,
284 +
285 + /* unpack the aggregated packets and process them one by one */
286 + while (batadv_iv_ogm_aggr_packet(ogm_offset, skb_headlen(skb),
287 +- ogm_packet->tvlv_len)) {
288 ++ ogm_packet)) {
289 + batadv_iv_ogm_process(skb, ogm_offset, if_incoming);
290 +
291 + ogm_offset += BATADV_OGM_HLEN;
292 +diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c
293 +index 64cb6acbe0a6..d7ba4fd24e3d 100644
294 +--- a/net/batman-adv/netlink.c
295 ++++ b/net/batman-adv/netlink.c
296 +@@ -114,7 +114,7 @@ batadv_netlink_get_ifindex(const struct nlmsghdr *nlh, int attrtype)
297 + {
298 + struct nlattr *attr = nlmsg_find_attr(nlh, GENL_HDRLEN, attrtype);
299 +
300 +- return attr ? nla_get_u32(attr) : 0;
301 ++ return (attr && nla_len(attr) == sizeof(u32)) ? nla_get_u32(attr) : 0;
302 + }
303 +
304 + /**
305 +diff --git a/net/key/af_key.c b/net/key/af_key.c
306 +index 36db179d848e..d2ec620319d7 100644
307 +--- a/net/key/af_key.c
308 ++++ b/net/key/af_key.c
309 +@@ -1969,8 +1969,10 @@ parse_ipsecrequest(struct xfrm_policy *xp, struct sadb_x_ipsecrequest *rq)
310 +
311 + if (rq->sadb_x_ipsecrequest_mode == 0)
312 + return -EINVAL;
313 ++ if (!xfrm_id_proto_valid(rq->sadb_x_ipsecrequest_proto))
314 ++ return -EINVAL;
315 +
316 +- t->id.proto = rq->sadb_x_ipsecrequest_proto; /* XXX check proto */
317 ++ t->id.proto = rq->sadb_x_ipsecrequest_proto;
318 + if ((mode = pfkey_mode_to_xfrm(rq->sadb_x_ipsecrequest_mode)) < 0)
319 + return -EINVAL;
320 + t->mode = mode;
321 +diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
322 +index 884f2136b34b..3734ad56b456 100644
323 +--- a/net/xfrm/xfrm_state.c
324 ++++ b/net/xfrm/xfrm_state.c
325 +@@ -2168,7 +2168,7 @@ void xfrm_state_fini(struct net *net)
326 + unsigned int sz;
327 +
328 + flush_work(&net->xfrm.state_hash_work);
329 +- xfrm_state_flush(net, IPSEC_PROTO_ANY, false);
330 ++ xfrm_state_flush(net, 0, false);
331 + flush_work(&xfrm_state_gc_work);
332 +
333 + WARN_ON(!list_empty(&net->xfrm.state_all));
334 +diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
335 +index f3e9d500fa5a..ff641b2e1577 100644
336 +--- a/net/xfrm/xfrm_user.c
337 ++++ b/net/xfrm/xfrm_user.c
338 +@@ -1452,20 +1452,8 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
339 + return -EINVAL;
340 + }
341 +
342 +- switch (ut[i].id.proto) {
343 +- case IPPROTO_AH:
344 +- case IPPROTO_ESP:
345 +- case IPPROTO_COMP:
346 +-#if IS_ENABLED(CONFIG_IPV6)
347 +- case IPPROTO_ROUTING:
348 +- case IPPROTO_DSTOPTS:
349 +-#endif
350 +- case IPSEC_PROTO_ANY:
351 +- break;
352 +- default:
353 ++ if (!xfrm_id_proto_valid(ut[i].id.proto))
354 + return -EINVAL;
355 +- }
356 +-
357 + }
358 +
359 + return 0;
360 +diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh
361 +index 381acfc4c59d..98cf6343afcd 100755
362 +--- a/scripts/decode_stacktrace.sh
363 ++++ b/scripts/decode_stacktrace.sh
364 +@@ -77,7 +77,7 @@ parse_symbol() {
365 + fi
366 +
367 + # Strip out the base of the path
368 +- code=${code//^$basepath/""}
369 ++ code=${code#$basepath/}
370 +
371 + # In the case of inlines, move everything to same line
372 + code=${code//$'\n'/' '}
373 +diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c
374 +index a03cf68d0bcd..12d87204e373 100644
375 +--- a/sound/pci/hda/hda_auto_parser.c
376 ++++ b/sound/pci/hda/hda_auto_parser.c
377 +@@ -827,6 +827,8 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
378 + while (id >= 0) {
379 + const struct hda_fixup *fix = codec->fixup_list + id;
380 +
381 ++ if (++depth > 10)
382 ++ break;
383 + if (fix->chained_before)
384 + apply_fixup(codec, fix->chain_id, action, depth + 1);
385 +
386 +@@ -866,8 +868,6 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
387 + }
388 + if (!fix->chained || fix->chained_before)
389 + break;
390 +- if (++depth > 10)
391 +- break;
392 + id = fix->chain_id;
393 + }
394 + }
395 +diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
396 +index 98594cbe34c8..949c90a859fa 100644
397 +--- a/sound/pci/hda/hda_generic.c
398 ++++ b/sound/pci/hda/hda_generic.c
399 +@@ -5807,7 +5807,8 @@ int snd_hda_gen_init(struct hda_codec *codec)
400 + if (spec->init_hook)
401 + spec->init_hook(codec);
402 +
403 +- snd_hda_apply_verbs(codec);
404 ++ if (!spec->skip_verbs)
405 ++ snd_hda_apply_verbs(codec);
406 +
407 + init_multi_out(codec);
408 + init_extra_out(codec);
409 +diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h
410 +index 932b533feb48..6d1cb2fb447d 100644
411 +--- a/sound/pci/hda/hda_generic.h
412 ++++ b/sound/pci/hda/hda_generic.h
413 +@@ -236,6 +236,7 @@ struct hda_gen_spec {
414 + unsigned int indep_hp_enabled:1; /* independent HP enabled */
415 + unsigned int have_aamix_ctl:1;
416 + unsigned int hp_mic_jack_modes:1;
417 ++ unsigned int skip_verbs:1; /* don't apply verbs at snd_hda_gen_init() */
418 +
419 + /* additional mute flags (only effective with auto_mute_via_amp=1) */
420 + u64 mute_bits;
421 +diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
422 +index 8e995fb27312..31322aeebcff 100644
423 +--- a/sound/pci/hda/patch_realtek.c
424 ++++ b/sound/pci/hda/patch_realtek.c
425 +@@ -773,9 +773,11 @@ static int alc_init(struct hda_codec *codec)
426 + if (spec->init_hook)
427 + spec->init_hook(codec);
428 +
429 ++ spec->gen.skip_verbs = 1; /* applied in below */
430 + snd_hda_gen_init(codec);
431 + alc_fix_pll(codec);
432 + alc_auto_init_amp(codec, spec->init_amp);
433 ++ snd_hda_apply_verbs(codec); /* apply verbs here after own init */
434 +
435 + snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT);
436 +