Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0408-4.9.309-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3710 - (show annotations) (download)
Mon Oct 24 14:08:23 2022 UTC (18 months, 1 week ago) by niro
File size: 16018 byte(s)
-linux-4.9.309
1 diff --git a/Makefile b/Makefile
2 index ecf06e17c3c88..c1d4ddadbcb51 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 308
9 +SUBLEVEL = 309
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
14 index c3fba8b527530..28e241e635675 100644
15 --- a/arch/x86/kernel/acpi/boot.c
16 +++ b/arch/x86/kernel/acpi/boot.c
17 @@ -1324,6 +1324,17 @@ static int __init disable_acpi_pci(const struct dmi_system_id *d)
18 return 0;
19 }
20
21 +static int __init disable_acpi_xsdt(const struct dmi_system_id *d)
22 +{
23 + if (!acpi_force) {
24 + pr_notice("%s detected: force use of acpi=rsdt\n", d->ident);
25 + acpi_gbl_do_not_use_xsdt = TRUE;
26 + } else {
27 + pr_notice("Warning: DMI blacklist says broken, but acpi XSDT forced\n");
28 + }
29 + return 0;
30 +}
31 +
32 static int __init dmi_disable_acpi(const struct dmi_system_id *d)
33 {
34 if (!acpi_force) {
35 @@ -1444,6 +1455,19 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
36 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
37 },
38 },
39 + /*
40 + * Boxes that need ACPI XSDT use disabled due to corrupted tables
41 + */
42 + {
43 + .callback = disable_acpi_xsdt,
44 + .ident = "Advantech DAC-BJ01",
45 + .matches = {
46 + DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
47 + DMI_MATCH(DMI_PRODUCT_NAME, "Bearlake CRB Board"),
48 + DMI_MATCH(DMI_BIOS_VERSION, "V1.12"),
49 + DMI_MATCH(DMI_BIOS_DATE, "02/01/2011"),
50 + },
51 + },
52 {}
53 };
54
55 diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
56 index 69c6f02f16b5b..ee300bbe88310 100644
57 --- a/drivers/acpi/battery.c
58 +++ b/drivers/acpi/battery.c
59 @@ -88,6 +88,10 @@ enum acpi_battery_files {
60
61 static const struct acpi_device_id battery_device_ids[] = {
62 {"PNP0C0A", 0},
63 +
64 + /* Microsoft Surface Go 3 */
65 + {"MSHW0146", 0},
66 +
67 {"", 0},
68 };
69
70 @@ -1153,6 +1157,14 @@ static const struct dmi_system_id bat_dmi_table[] __initconst = {
71 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"),
72 },
73 },
74 + {
75 + /* Microsoft Surface Go 3 */
76 + .callback = battery_notification_delay_quirk,
77 + .matches = {
78 + DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
79 + DMI_MATCH(DMI_PRODUCT_NAME, "Surface Go 3"),
80 + },
81 + },
82 {},
83 };
84
85 diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
86 index ec2f77a471501..2837b2f982135 100644
87 --- a/drivers/acpi/video_detect.c
88 +++ b/drivers/acpi/video_detect.c
89 @@ -135,6 +135,81 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
90 DMI_MATCH(DMI_PRODUCT_NAME, "UL30A"),
91 },
92 },
93 + /*
94 + * Clevo NL5xRU and NL5xNU/TUXEDO Aura 15 Gen1 and Gen2 have both a
95 + * working native and video interface. However the default detection
96 + * mechanism first registers the video interface before unregistering
97 + * it again and switching to the native interface during boot. This
98 + * results in a dangling SBIOS request for backlight change for some
99 + * reason, causing the backlight to switch to ~2% once per boot on the
100 + * first power cord connect or disconnect event. Setting the native
101 + * interface explicitly circumvents this buggy behaviour, by avoiding
102 + * the unregistering process.
103 + */
104 + {
105 + .callback = video_detect_force_native,
106 + .ident = "Clevo NL5xRU",
107 + .matches = {
108 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
109 + DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
110 + },
111 + },
112 + {
113 + .callback = video_detect_force_native,
114 + .ident = "Clevo NL5xRU",
115 + .matches = {
116 + DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"),
117 + DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
118 + },
119 + },
120 + {
121 + .callback = video_detect_force_native,
122 + .ident = "Clevo NL5xRU",
123 + .matches = {
124 + DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
125 + DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
126 + },
127 + },
128 + {
129 + .callback = video_detect_force_native,
130 + .ident = "Clevo NL5xRU",
131 + .matches = {
132 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
133 + DMI_MATCH(DMI_BOARD_NAME, "AURA1501"),
134 + },
135 + },
136 + {
137 + .callback = video_detect_force_native,
138 + .ident = "Clevo NL5xRU",
139 + .matches = {
140 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
141 + DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"),
142 + },
143 + },
144 + {
145 + .callback = video_detect_force_native,
146 + .ident = "Clevo NL5xNU",
147 + .matches = {
148 + DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
149 + DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
150 + },
151 + },
152 + {
153 + .callback = video_detect_force_native,
154 + .ident = "Clevo NL5xNU",
155 + .matches = {
156 + DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"),
157 + DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
158 + },
159 + },
160 + {
161 + .callback = video_detect_force_native,
162 + .ident = "Clevo NL5xNU",
163 + .matches = {
164 + DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
165 + DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
166 + },
167 + },
168
169 /*
170 * These models have a working acpi_video backlight control, and using
171 diff --git a/drivers/crypto/qat/qat_common/qat_crypto.c b/drivers/crypto/qat/qat_common/qat_crypto.c
172 index 3852d31ce0a4b..37a9f969c59cd 100644
173 --- a/drivers/crypto/qat/qat_common/qat_crypto.c
174 +++ b/drivers/crypto/qat/qat_common/qat_crypto.c
175 @@ -170,6 +170,14 @@ int qat_crypto_dev_config(struct adf_accel_dev *accel_dev)
176 goto err;
177 if (adf_cfg_section_add(accel_dev, "Accelerator0"))
178 goto err;
179 +
180 + /* Temporarily set the number of crypto instances to zero to avoid
181 + * registering the crypto algorithms.
182 + * This will be removed when the algorithms will support the
183 + * CRYPTO_TFM_REQ_MAY_BACKLOG flag
184 + */
185 + instances = 0;
186 +
187 for (i = 0; i < instances; i++) {
188 val = i;
189 snprintf(key, sizeof(key), ADF_CY "%d" ADF_RING_BANK_NUM, i);
190 diff --git a/drivers/nfc/st21nfca/se.c b/drivers/nfc/st21nfca/se.c
191 index eac608a457f03..475f8a67856d0 100644
192 --- a/drivers/nfc/st21nfca/se.c
193 +++ b/drivers/nfc/st21nfca/se.c
194 @@ -330,6 +330,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host,
195 return -ENOMEM;
196
197 transaction->aid_len = skb->data[1];
198 +
199 + /* Checking if the length of the AID is valid */
200 + if (transaction->aid_len > sizeof(transaction->aid))
201 + return -EINVAL;
202 +
203 memcpy(transaction->aid, &skb->data[2],
204 transaction->aid_len);
205
206 @@ -339,6 +344,11 @@ int st21nfca_connectivity_event_received(struct nfc_hci_dev *hdev, u8 host,
207 return -EPROTO;
208
209 transaction->params_len = skb->data[transaction->aid_len + 3];
210 +
211 + /* Total size is allocated (skb->len - 2) minus fixed array members */
212 + if (transaction->params_len > ((skb->len - 2) - sizeof(struct nfc_evt_transaction)))
213 + return -EINVAL;
214 +
215 memcpy(transaction->params, skb->data +
216 transaction->aid_len + 4, transaction->params_len);
217
218 diff --git a/drivers/staging/fbtft/fb_st7789v.c b/drivers/staging/fbtft/fb_st7789v.c
219 index 085e9872c46d4..93bfde68f5452 100644
220 --- a/drivers/staging/fbtft/fb_st7789v.c
221 +++ b/drivers/staging/fbtft/fb_st7789v.c
222 @@ -85,6 +85,8 @@ enum st7789v_command {
223 */
224 static int init_display(struct fbtft_par *par)
225 {
226 + par->fbtftops.reset(par);
227 +
228 /* turn off sleep mode */
229 write_reg(par, MIPI_DCS_EXIT_SLEEP_MODE);
230 mdelay(120);
231 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
232 index 55be18cae35ba..775901abe678f 100644
233 --- a/net/ipv6/ip6_output.c
234 +++ b/net/ipv6/ip6_output.c
235 @@ -1329,8 +1329,8 @@ static int __ip6_append_data(struct sock *sk,
236 sizeof(struct frag_hdr) : 0) +
237 rt->rt6i_nfheader_len;
238
239 - if (mtu < fragheaderlen ||
240 - ((mtu - fragheaderlen) & ~7) + fragheaderlen < sizeof(struct frag_hdr))
241 + if (mtu <= fragheaderlen ||
242 + ((mtu - fragheaderlen) & ~7) + fragheaderlen <= sizeof(struct frag_hdr))
243 goto emsgsize;
244
245 maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen -
246 diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
247 index a8866455e8b2a..b6dbec793ebbd 100644
248 --- a/net/llc/af_llc.c
249 +++ b/net/llc/af_llc.c
250 @@ -274,6 +274,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
251 {
252 struct sock *sk = sock->sk;
253 struct llc_sock *llc = llc_sk(sk);
254 + struct net_device *dev = NULL;
255 struct llc_sap *sap;
256 int rc = -EINVAL;
257
258 @@ -285,14 +286,14 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
259 goto out;
260 rc = -ENODEV;
261 if (sk->sk_bound_dev_if) {
262 - llc->dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if);
263 - if (llc->dev && addr->sllc_arphrd != llc->dev->type) {
264 - dev_put(llc->dev);
265 - llc->dev = NULL;
266 + dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if);
267 + if (dev && addr->sllc_arphrd != dev->type) {
268 + dev_put(dev);
269 + dev = NULL;
270 }
271 } else
272 - llc->dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd);
273 - if (!llc->dev)
274 + dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd);
275 + if (!dev)
276 goto out;
277 rc = -EUSERS;
278 llc->laddr.lsap = llc_ui_autoport();
279 @@ -302,6 +303,11 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
280 sap = llc_sap_open(llc->laddr.lsap, NULL);
281 if (!sap)
282 goto out;
283 +
284 + /* Note: We do not expect errors from this point. */
285 + llc->dev = dev;
286 + dev = NULL;
287 +
288 memcpy(llc->laddr.mac, llc->dev->dev_addr, IFHWADDRLEN);
289 memcpy(&llc->addr, addr, sizeof(llc->addr));
290 /* assign new connection to its SAP */
291 @@ -309,6 +315,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
292 sock_reset_flag(sk, SOCK_ZAPPED);
293 rc = 0;
294 out:
295 + dev_put(dev);
296 return rc;
297 }
298
299 @@ -331,6 +338,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
300 struct sockaddr_llc *addr = (struct sockaddr_llc *)uaddr;
301 struct sock *sk = sock->sk;
302 struct llc_sock *llc = llc_sk(sk);
303 + struct net_device *dev = NULL;
304 struct llc_sap *sap;
305 int rc = -EINVAL;
306
307 @@ -347,25 +355,26 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
308 rc = -ENODEV;
309 rcu_read_lock();
310 if (sk->sk_bound_dev_if) {
311 - llc->dev = dev_get_by_index_rcu(&init_net, sk->sk_bound_dev_if);
312 - if (llc->dev) {
313 + dev = dev_get_by_index_rcu(&init_net, sk->sk_bound_dev_if);
314 + if (dev) {
315 if (is_zero_ether_addr(addr->sllc_mac))
316 - memcpy(addr->sllc_mac, llc->dev->dev_addr,
317 + memcpy(addr->sllc_mac, dev->dev_addr,
318 IFHWADDRLEN);
319 - if (addr->sllc_arphrd != llc->dev->type ||
320 + if (addr->sllc_arphrd != dev->type ||
321 !ether_addr_equal(addr->sllc_mac,
322 - llc->dev->dev_addr)) {
323 + dev->dev_addr)) {
324 rc = -EINVAL;
325 - llc->dev = NULL;
326 + dev = NULL;
327 }
328 }
329 - } else
330 - llc->dev = dev_getbyhwaddr_rcu(&init_net, addr->sllc_arphrd,
331 + } else {
332 + dev = dev_getbyhwaddr_rcu(&init_net, addr->sllc_arphrd,
333 addr->sllc_mac);
334 - if (llc->dev)
335 - dev_hold(llc->dev);
336 + }
337 + if (dev)
338 + dev_hold(dev);
339 rcu_read_unlock();
340 - if (!llc->dev)
341 + if (!dev)
342 goto out;
343 if (!addr->sllc_sap) {
344 rc = -EUSERS;
345 @@ -398,6 +407,11 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
346 goto out_put;
347 }
348 }
349 +
350 + /* Note: We do not expect errors from this point. */
351 + llc->dev = dev;
352 + dev = NULL;
353 +
354 llc->laddr.lsap = addr->sllc_sap;
355 memcpy(llc->laddr.mac, addr->sllc_mac, IFHWADDRLEN);
356 memcpy(&llc->addr, addr, sizeof(llc->addr));
357 @@ -408,6 +422,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
358 out_put:
359 llc_sap_put(sap);
360 out:
361 + dev_put(dev);
362 release_sock(sk);
363 return rc;
364 }
365 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
366 index f37fbc71fc1db..091ac3a7b186f 100644
367 --- a/net/mac80211/cfg.c
368 +++ b/net/mac80211/cfg.c
369 @@ -1776,13 +1776,11 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
370 const struct mesh_setup *setup)
371 {
372 u8 *new_ie;
373 - const u8 *old_ie;
374 struct ieee80211_sub_if_data *sdata = container_of(ifmsh,
375 struct ieee80211_sub_if_data, u.mesh);
376
377 /* allocate information elements */
378 new_ie = NULL;
379 - old_ie = ifmsh->ie;
380
381 if (setup->ie_len) {
382 new_ie = kmemdup(setup->ie, setup->ie_len,
383 @@ -1792,7 +1790,6 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
384 }
385 ifmsh->ie_len = setup->ie_len;
386 ifmsh->ie = new_ie;
387 - kfree(old_ie);
388
389 /* now copy the rest of the setup parameters */
390 ifmsh->mesh_id_len = setup->mesh_id_len;
391 diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c
392 index 9d593ecd8e870..fb14082151ce8 100644
393 --- a/net/netfilter/nf_tables_core.c
394 +++ b/net/netfilter/nf_tables_core.c
395 @@ -127,7 +127,7 @@ nft_do_chain(struct nft_pktinfo *pkt, void *priv)
396 const struct net *net = pkt->net;
397 const struct nft_rule *rule;
398 const struct nft_expr *expr, *last;
399 - struct nft_regs regs;
400 + struct nft_regs regs = {};
401 unsigned int stackptr = 0;
402 struct nft_jumpstack jumpstack[NFT_JUMP_STACK_SIZE];
403 struct nft_stats *stats;
404 diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
405 index 5c07c5be31423..a70026f42a316 100644
406 --- a/sound/core/pcm_native.c
407 +++ b/sound/core/pcm_native.c
408 @@ -1489,21 +1489,25 @@ static int snd_pcm_do_reset(struct snd_pcm_substream *substream, int state)
409 int err = substream->ops->ioctl(substream, SNDRV_PCM_IOCTL1_RESET, NULL);
410 if (err < 0)
411 return err;
412 + snd_pcm_stream_lock_irq(substream);
413 runtime->hw_ptr_base = 0;
414 runtime->hw_ptr_interrupt = runtime->status->hw_ptr -
415 runtime->status->hw_ptr % runtime->period_size;
416 runtime->silence_start = runtime->status->hw_ptr;
417 runtime->silence_filled = 0;
418 + snd_pcm_stream_unlock_irq(substream);
419 return 0;
420 }
421
422 static void snd_pcm_post_reset(struct snd_pcm_substream *substream, int state)
423 {
424 struct snd_pcm_runtime *runtime = substream->runtime;
425 + snd_pcm_stream_lock_irq(substream);
426 runtime->control->appl_ptr = runtime->status->hw_ptr;
427 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
428 runtime->silence_size > 0)
429 snd_pcm_playback_silence(substream, ULONG_MAX);
430 + snd_pcm_stream_unlock_irq(substream);
431 }
432
433 static const struct action_ops snd_pcm_action_reset = {
434 diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
435 index c4840fda44b40..a7f1e4ef3f887 100644
436 --- a/sound/pci/ac97/ac97_codec.c
437 +++ b/sound/pci/ac97/ac97_codec.c
438 @@ -958,8 +958,8 @@ static int snd_ac97_ad18xx_pcm_get_volume(struct snd_kcontrol *kcontrol, struct
439 int codec = kcontrol->private_value & 3;
440
441 mutex_lock(&ac97->page_mutex);
442 - ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31);
443 - ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31);
444 + ucontrol->value.integer.value[0] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 8) & 31);
445 + ucontrol->value.integer.value[1] = 31 - ((ac97->spec.ad18xx.pcmreg[codec] >> 0) & 31);
446 mutex_unlock(&ac97->page_mutex);
447 return 0;
448 }
449 diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
450 index 73f593526b2d7..0024145a7b5be 100644
451 --- a/sound/pci/cmipci.c
452 +++ b/sound/pci/cmipci.c
453 @@ -315,7 +315,6 @@ MODULE_PARM_DESC(joystick_port, "Joystick port address.");
454 #define CM_MICGAINZ 0x01 /* mic boost */
455 #define CM_MICGAINZ_SHIFT 0
456
457 -#define CM_REG_MIXER3 0x24
458 #define CM_REG_AUX_VOL 0x26
459 #define CM_VAUXL_MASK 0xf0
460 #define CM_VAUXR_MASK 0x0f
461 @@ -3323,7 +3322,7 @@ static void snd_cmipci_remove(struct pci_dev *pci)
462 */
463 static unsigned char saved_regs[] = {
464 CM_REG_FUNCTRL1, CM_REG_CHFORMAT, CM_REG_LEGACY_CTRL, CM_REG_MISC_CTRL,
465 - CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_MIXER3, CM_REG_PLL,
466 + CM_REG_MIXER0, CM_REG_MIXER1, CM_REG_MIXER2, CM_REG_AUX_VOL, CM_REG_PLL,
467 CM_REG_CH0_FRAME1, CM_REG_CH0_FRAME2,
468 CM_REG_CH1_FRAME1, CM_REG_CH1_FRAME2, CM_REG_EXT_MISC,
469 CM_REG_INT_STATUS, CM_REG_INT_HLDCLR, CM_REG_FUNCTRL0,
470 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
471 index 1f2c69e599d9c..c94068874ea84 100644
472 --- a/sound/usb/mixer_quirks.c
473 +++ b/sound/usb/mixer_quirks.c
474 @@ -1879,9 +1879,10 @@ void snd_usb_mixer_fu_apply_quirk(struct usb_mixer_interface *mixer,
475 if (unitid == 7 && cval->control == UAC_FU_VOLUME)
476 snd_dragonfly_quirk_db_scale(mixer, cval, kctl);
477 break;
478 - /* lowest playback value is muted on C-Media devices */
479 - case USB_ID(0x0d8c, 0x000c):
480 - case USB_ID(0x0d8c, 0x0014):
481 + /* lowest playback value is muted on some devices */
482 + case USB_ID(0x0d8c, 0x000c): /* C-Media */
483 + case USB_ID(0x0d8c, 0x0014): /* C-Media */
484 + case USB_ID(0x19f7, 0x0003): /* RODE NT-USB */
485 if (strstr(kctl->id.name, "Playback"))
486 cval->min_mute = 1;
487 break;