Magellan Linux

Annotation 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 - (hide annotations) (download)
Mon Oct 24 14:08:23 2022 UTC (19 months, 3 weeks ago) by niro
File size: 16018 byte(s)
-linux-4.9.309
1 niro 3710 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;