From: Greg Kroah-Hartman Date: Sat, 29 May 2021 13:54:55 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.4.271~127 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bcdf840c476fc6d07b8a6b1acaaec02ef57e650a;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: alsa-hda-realtek-headphone-volume-is-controlled-by-front-mixer.patch alsa-usb-audio-scarlett2-fix-device-hang-with-ehci-pci.patch alsa-usb-audio-scarlett2-improve-driver-startup-messages.patch cifs-set-server-cipher_type-to-aes-128-ccm-for-smb3.0.patch iommu-vt-d-fix-sysfs-leak-in-alloc_iommu.patch nfsv4-fix-a-null-pointer-dereference-in-pnfs_mark_matching_lsegs_return.patch --- diff --git a/queue-5.4/alsa-hda-realtek-headphone-volume-is-controlled-by-front-mixer.patch b/queue-5.4/alsa-hda-realtek-headphone-volume-is-controlled-by-front-mixer.patch new file mode 100644 index 00000000000..0d37c8b569d --- /dev/null +++ b/queue-5.4/alsa-hda-realtek-headphone-volume-is-controlled-by-front-mixer.patch @@ -0,0 +1,70 @@ +From 119b75c150773425a89033215eab4d15d4198f8b Mon Sep 17 00:00:00 2001 +From: Hui Wang +Date: Sat, 22 May 2021 11:47:41 +0800 +Subject: ALSA: hda/realtek: Headphone volume is controlled by Front mixer + +From: Hui Wang + +commit 119b75c150773425a89033215eab4d15d4198f8b upstream. + +On some ASUS and MSI machines, the audio codec is alc1220 and the +Headphone is connected to audio mixer 0xf and DAC 0x5, in theory +the Headphone volume is controlled by DAC 0x5 (Heapdhone Playback +Volume), but somehow it is controlled by DAC 0x2 (Front Playback +Volume), maybe this is a defect on the codec alc1220. + +Because of this issue, the PA couldn't switch the headphone and +Lineout correctly, If we apply the quirk CLEVO_P950 to those machines, +the Lineout and Headphone will share the audio mixer 0xc and DAC 0x2, +and generate Headphone+LO mixer, then PA could handle them when +switching between them. + +BugLink: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1206 +Cc: +Signed-off-by: Hui Wang +Link: https://lore.kernel.org/r/20210522034741.13415-1-hui.wang@canonical.com +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman +--- + sound/pci/hda/patch_realtek.c | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -2593,6 +2593,28 @@ static const struct hda_model_fixup alc8 + {} + }; + ++static const struct snd_hda_pin_quirk alc882_pin_fixup_tbl[] = { ++ SND_HDA_PIN_QUIRK(0x10ec1220, 0x1043, "ASUS", ALC1220_FIXUP_CLEVO_P950, ++ {0x14, 0x01014010}, ++ {0x15, 0x01011012}, ++ {0x16, 0x01016011}, ++ {0x18, 0x01a19040}, ++ {0x19, 0x02a19050}, ++ {0x1a, 0x0181304f}, ++ {0x1b, 0x0221401f}, ++ {0x1e, 0x01456130}), ++ SND_HDA_PIN_QUIRK(0x10ec1220, 0x1462, "MS-7C35", ALC1220_FIXUP_CLEVO_P950, ++ {0x14, 0x01015010}, ++ {0x15, 0x01011012}, ++ {0x16, 0x01011011}, ++ {0x18, 0x01a11040}, ++ {0x19, 0x02a19050}, ++ {0x1a, 0x0181104f}, ++ {0x1b, 0x0221401f}, ++ {0x1e, 0x01451130}), ++ {} ++}; ++ + /* + * BIOS auto configuration + */ +@@ -2634,6 +2656,7 @@ static int patch_alc882(struct hda_codec + + snd_hda_pick_fixup(codec, alc882_fixup_models, alc882_fixup_tbl, + alc882_fixups); ++ snd_hda_pick_pin_fixup(codec, alc882_pin_fixup_tbl, alc882_fixups, true); + snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); + + alc_auto_parse_customize_define(codec); diff --git a/queue-5.4/alsa-usb-audio-scarlett2-fix-device-hang-with-ehci-pci.patch b/queue-5.4/alsa-usb-audio-scarlett2-fix-device-hang-with-ehci-pci.patch new file mode 100644 index 00000000000..aa5e418c4e9 --- /dev/null +++ b/queue-5.4/alsa-usb-audio-scarlett2-fix-device-hang-with-ehci-pci.patch @@ -0,0 +1,34 @@ +From 764fa6e686e0107c0357a988d193de04cf047583 Mon Sep 17 00:00:00 2001 +From: "Geoffrey D. Bennett" +Date: Fri, 21 May 2021 17:50:12 +0930 +Subject: ALSA: usb-audio: scarlett2: Fix device hang with ehci-pci + +From: Geoffrey D. Bennett + +commit 764fa6e686e0107c0357a988d193de04cf047583 upstream. + +Use usb_rcvctrlpipe() not usb_sndctrlpipe() for USB control input in +the Scarlett Gen 2 mixer driver. This fixes the device hang during +initialisation when used with the ehci-pci host driver. + +Fixes: 9e4d5c1be21f ("ALSA: usb-audio: Scarlett Gen 2 mixer interface") +Signed-off-by: Geoffrey D. Bennett +Cc: +Link: https://lore.kernel.org/r/66a3d05dac325d5b53e4930578e143cef1f50dbe.1621584566.git.g@b4.vu +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman +--- + sound/usb/mixer_scarlett_gen2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/usb/mixer_scarlett_gen2.c ++++ b/sound/usb/mixer_scarlett_gen2.c +@@ -635,7 +635,7 @@ static int scarlett2_usb( + /* send a second message to get the response */ + + err = snd_usb_ctl_msg(mixer->chip->dev, +- usb_sndctrlpipe(mixer->chip->dev, 0), ++ usb_rcvctrlpipe(mixer->chip->dev, 0), + SCARLETT2_USB_VENDOR_SPECIFIC_CMD_RESP, + USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, + 0, diff --git a/queue-5.4/alsa-usb-audio-scarlett2-improve-driver-startup-messages.patch b/queue-5.4/alsa-usb-audio-scarlett2-improve-driver-startup-messages.patch new file mode 100644 index 00000000000..f30aeb87982 --- /dev/null +++ b/queue-5.4/alsa-usb-audio-scarlett2-improve-driver-startup-messages.patch @@ -0,0 +1,145 @@ +From 265d1a90e4fb6d3264d8122fbd10760e5e733be6 Mon Sep 17 00:00:00 2001 +From: "Geoffrey D. Bennett" +Date: Fri, 21 May 2021 17:50:13 +0930 +Subject: ALSA: usb-audio: scarlett2: Improve driver startup messages + +From: Geoffrey D. Bennett + +commit 265d1a90e4fb6d3264d8122fbd10760e5e733be6 upstream. + +Add separate init function to call the existing controls_create +function so a custom error can be displayed if initialisation fails. + +Use info level instead of error for notifications. + +Display the VID/PID so device_setup is targeted to the right device. + +Display "enabled" message to easily confirm that the driver is loaded. + +Signed-off-by: Geoffrey D. Bennett +Cc: +Link: https://lore.kernel.org/r/b5d140c65f640faf2427e085fbbc0297b32e5fce.1621584566.git.g@b4.vu +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman +--- + sound/usb/mixer_quirks.c | 2 - + sound/usb/mixer_scarlett_gen2.c | 79 +++++++++++++++++++++++++--------------- + sound/usb/mixer_scarlett_gen2.h | 2 - + 3 files changed, 52 insertions(+), 31 deletions(-) + +--- a/sound/usb/mixer_quirks.c ++++ b/sound/usb/mixer_quirks.c +@@ -2268,7 +2268,7 @@ int snd_usb_mixer_apply_create_quirk(str + case USB_ID(0x1235, 0x8203): /* Focusrite Scarlett 6i6 2nd Gen */ + case USB_ID(0x1235, 0x8204): /* Focusrite Scarlett 18i8 2nd Gen */ + case USB_ID(0x1235, 0x8201): /* Focusrite Scarlett 18i20 2nd Gen */ +- err = snd_scarlett_gen2_controls_create(mixer); ++ err = snd_scarlett_gen2_init(mixer); + break; + + case USB_ID(0x041e, 0x323b): /* Creative Sound Blaster E1 */ +--- a/sound/usb/mixer_scarlett_gen2.c ++++ b/sound/usb/mixer_scarlett_gen2.c +@@ -1997,38 +1997,11 @@ static int scarlett2_mixer_status_create + return usb_submit_urb(mixer->urb, GFP_KERNEL); + } + +-/* Entry point */ +-int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer) ++int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer, ++ const struct scarlett2_device_info *info) + { +- const struct scarlett2_device_info *info; + int err; + +- /* only use UAC_VERSION_2 */ +- if (!mixer->protocol) +- return 0; +- +- switch (mixer->chip->usb_id) { +- case USB_ID(0x1235, 0x8203): +- info = &s6i6_gen2_info; +- break; +- case USB_ID(0x1235, 0x8204): +- info = &s18i8_gen2_info; +- break; +- case USB_ID(0x1235, 0x8201): +- info = &s18i20_gen2_info; +- break; +- default: /* device not (yet) supported */ +- return -EINVAL; +- } +- +- if (!(mixer->chip->setup & SCARLETT2_ENABLE)) { +- usb_audio_err(mixer->chip, +- "Focusrite Scarlett Gen 2 Mixer Driver disabled; " +- "use options snd_usb_audio device_setup=1 " +- "to enable and report any issues to g@b4.vu"); +- return 0; +- } +- + /* Initialise private data, routing, sequence number */ + err = scarlett2_init_private(mixer, info); + if (err < 0) +@@ -2073,3 +2046,51 @@ int snd_scarlett_gen2_controls_create(st + + return 0; + } ++ ++int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer) ++{ ++ struct snd_usb_audio *chip = mixer->chip; ++ const struct scarlett2_device_info *info; ++ int err; ++ ++ /* only use UAC_VERSION_2 */ ++ if (!mixer->protocol) ++ return 0; ++ ++ switch (chip->usb_id) { ++ case USB_ID(0x1235, 0x8203): ++ info = &s6i6_gen2_info; ++ break; ++ case USB_ID(0x1235, 0x8204): ++ info = &s18i8_gen2_info; ++ break; ++ case USB_ID(0x1235, 0x8201): ++ info = &s18i20_gen2_info; ++ break; ++ default: /* device not (yet) supported */ ++ return -EINVAL; ++ } ++ ++ if (!(chip->setup & SCARLETT2_ENABLE)) { ++ usb_audio_info(chip, ++ "Focusrite Scarlett Gen 2 Mixer Driver disabled; " ++ "use options snd_usb_audio vid=0x%04x pid=0x%04x " ++ "device_setup=1 to enable and report any issues " ++ "to g@b4.vu", ++ USB_ID_VENDOR(chip->usb_id), ++ USB_ID_PRODUCT(chip->usb_id)); ++ return 0; ++ } ++ ++ usb_audio_info(chip, ++ "Focusrite Scarlett Gen 2 Mixer Driver enabled pid=0x%04x", ++ USB_ID_PRODUCT(chip->usb_id)); ++ ++ err = snd_scarlett_gen2_controls_create(mixer, info); ++ if (err < 0) ++ usb_audio_err(mixer->chip, ++ "Error initialising Scarlett Mixer Driver: %d", ++ err); ++ ++ return err; ++} +--- a/sound/usb/mixer_scarlett_gen2.h ++++ b/sound/usb/mixer_scarlett_gen2.h +@@ -2,6 +2,6 @@ + #ifndef __USB_MIXER_SCARLETT_GEN2_H + #define __USB_MIXER_SCARLETT_GEN2_H + +-int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer); ++int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer); + + #endif /* __USB_MIXER_SCARLETT_GEN2_H */ diff --git a/queue-5.4/cifs-set-server-cipher_type-to-aes-128-ccm-for-smb3.0.patch b/queue-5.4/cifs-set-server-cipher_type-to-aes-128-ccm-for-smb3.0.patch new file mode 100644 index 00000000000..506fd737a1b --- /dev/null +++ b/queue-5.4/cifs-set-server-cipher_type-to-aes-128-ccm-for-smb3.0.patch @@ -0,0 +1,48 @@ +From 6d2fcfe6b517fe7cbf2687adfb0a16cdcd5d9243 Mon Sep 17 00:00:00 2001 +From: Aurelien Aptel +Date: Fri, 21 May 2021 17:19:27 +0200 +Subject: cifs: set server->cipher_type to AES-128-CCM for SMB3.0 + +From: Aurelien Aptel + +commit 6d2fcfe6b517fe7cbf2687adfb0a16cdcd5d9243 upstream. + +SMB3.0 doesn't have encryption negotiate context but simply uses +the SMB2_GLOBAL_CAP_ENCRYPTION flag. + +When that flag is present in the neg response cifs.ko uses AES-128-CCM +which is the only cipher available in this context. + +cipher_type was set to the server cipher only when parsing encryption +negotiate context (SMB3.1.1). + +For SMB3.0 it was set to 0. This means cipher_type value can be 0 or 1 +for AES-128-CCM. + +Fix this by checking for SMB3.0 and encryption capability and setting +cipher_type appropriately. + +Signed-off-by: Aurelien Aptel +Cc: +Signed-off-by: Steve French +Signed-off-by: Greg Kroah-Hartman +--- + fs/cifs/smb2pdu.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/fs/cifs/smb2pdu.c ++++ b/fs/cifs/smb2pdu.c +@@ -979,6 +979,13 @@ SMB2_negotiate(const unsigned int xid, s + /* Internal types */ + server->capabilities |= SMB2_NT_FIND | SMB2_LARGE_FILES; + ++ /* ++ * SMB3.0 supports only 1 cipher and doesn't have a encryption neg context ++ * Set the cipher type manually. ++ */ ++ if (server->dialect == SMB30_PROT_ID && (server->capabilities & SMB2_GLOBAL_CAP_ENCRYPTION)) ++ server->cipher_type = SMB2_ENCRYPTION_AES128_CCM; ++ + security_blob = smb2_get_data_area_len(&blob_offset, &blob_length, + (struct smb2_sync_hdr *)rsp); + /* diff --git a/queue-5.4/iommu-vt-d-fix-sysfs-leak-in-alloc_iommu.patch b/queue-5.4/iommu-vt-d-fix-sysfs-leak-in-alloc_iommu.patch new file mode 100644 index 00000000000..87c6e5139d0 --- /dev/null +++ b/queue-5.4/iommu-vt-d-fix-sysfs-leak-in-alloc_iommu.patch @@ -0,0 +1,44 @@ +From 0ee74d5a48635c848c20f152d0d488bf84641304 Mon Sep 17 00:00:00 2001 +From: Rolf Eike Beer +Date: Tue, 25 May 2021 15:08:02 +0800 +Subject: iommu/vt-d: Fix sysfs leak in alloc_iommu() + +From: Rolf Eike Beer + +commit 0ee74d5a48635c848c20f152d0d488bf84641304 upstream. + +iommu_device_sysfs_add() is called before, so is has to be cleaned on subsequent +errors. + +Fixes: 39ab9555c2411 ("iommu: Add sysfs bindings for struct iommu_device") +Cc: stable@vger.kernel.org # 4.11.x +Signed-off-by: Rolf Eike Beer +Acked-by: Lu Baolu +Link: https://lore.kernel.org/r/17411490.HIIP88n32C@mobilepool36.emlix.com +Link: https://lore.kernel.org/r/20210525070802.361755-2-baolu.lu@linux.intel.com +Signed-off-by: Joerg Roedel +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iommu/dmar.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/iommu/dmar.c ++++ b/drivers/iommu/dmar.c +@@ -1110,7 +1110,7 @@ static int alloc_iommu(struct dmar_drhd_ + + err = iommu_device_register(&iommu->iommu); + if (err) +- goto err_unmap; ++ goto err_sysfs; + } + + drhd->iommu = iommu; +@@ -1118,6 +1118,8 @@ static int alloc_iommu(struct dmar_drhd_ + + return 0; + ++err_sysfs: ++ iommu_device_sysfs_remove(&iommu->iommu); + err_unmap: + unmap_iommu(iommu); + error_free_seq_id: diff --git a/queue-5.4/nfsv4-fix-a-null-pointer-dereference-in-pnfs_mark_matching_lsegs_return.patch b/queue-5.4/nfsv4-fix-a-null-pointer-dereference-in-pnfs_mark_matching_lsegs_return.patch new file mode 100644 index 00000000000..c7de1a55f49 --- /dev/null +++ b/queue-5.4/nfsv4-fix-a-null-pointer-dereference-in-pnfs_mark_matching_lsegs_return.patch @@ -0,0 +1,60 @@ +From a421d218603ffa822a0b8045055c03eae394a7eb Mon Sep 17 00:00:00 2001 +From: Anna Schumaker +Date: Wed, 19 May 2021 12:54:51 -0400 +Subject: NFSv4: Fix a NULL pointer dereference in pnfs_mark_matching_lsegs_return() + +From: Anna Schumaker + +commit a421d218603ffa822a0b8045055c03eae394a7eb upstream. + +Commit de144ff4234f changes _pnfs_return_layout() to call +pnfs_mark_matching_lsegs_return() passing NULL as the struct +pnfs_layout_range argument. Unfortunately, +pnfs_mark_matching_lsegs_return() doesn't check if we have a value here +before dereferencing it, causing an oops. + +I'm able to hit this crash consistently when running connectathon basic +tests on NFS v4.1/v4.2 against Ontap. + +Fixes: de144ff4234f ("NFSv4: Don't discard segments marked for return in _pnfs_return_layout()") +Cc: stable@vger.kernel.org +Signed-off-by: Anna Schumaker +Signed-off-by: Trond Myklebust +Signed-off-by: Greg Kroah-Hartman +--- + fs/nfs/pnfs.c | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +--- a/fs/nfs/pnfs.c ++++ b/fs/nfs/pnfs.c +@@ -1285,6 +1285,11 @@ _pnfs_return_layout(struct inode *ino) + { + struct pnfs_layout_hdr *lo = NULL; + struct nfs_inode *nfsi = NFS_I(ino); ++ struct pnfs_layout_range range = { ++ .iomode = IOMODE_ANY, ++ .offset = 0, ++ .length = NFS4_MAX_UINT64, ++ }; + LIST_HEAD(tmp_list); + nfs4_stateid stateid; + int status = 0; +@@ -1311,16 +1316,10 @@ _pnfs_return_layout(struct inode *ino) + } + valid_layout = pnfs_layout_is_valid(lo); + pnfs_clear_layoutcommit(ino, &tmp_list); +- pnfs_mark_matching_lsegs_return(lo, &tmp_list, NULL, 0); ++ pnfs_mark_matching_lsegs_return(lo, &tmp_list, &range, 0); + +- if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) { +- struct pnfs_layout_range range = { +- .iomode = IOMODE_ANY, +- .offset = 0, +- .length = NFS4_MAX_UINT64, +- }; ++ if (NFS_SERVER(ino)->pnfs_curr_ld->return_range) + NFS_SERVER(ino)->pnfs_curr_ld->return_range(lo, &range); +- } + + /* Don't send a LAYOUTRETURN if list was initially empty */ + if (!test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags) || diff --git a/queue-5.4/series b/queue-5.4/series index 26cc816f71d..19ee762e76e 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -1,3 +1,9 @@ +alsa-hda-realtek-headphone-volume-is-controlled-by-front-mixer.patch +alsa-usb-audio-scarlett2-fix-device-hang-with-ehci-pci.patch +alsa-usb-audio-scarlett2-improve-driver-startup-messages.patch +cifs-set-server-cipher_type-to-aes-128-ccm-for-smb3.0.patch +nfsv4-fix-a-null-pointer-dereference-in-pnfs_mark_matching_lsegs_return.patch +iommu-vt-d-fix-sysfs-leak-in-alloc_iommu.patch selftests-gpio-use-test_gen_progs_extended.patch selftests-gpio-move-include-of-lib.mk-up.patch selftests-gpio-fix-build-when-source-tree-is-read-on.patch