From: Sasha Levin Date: Tue, 18 Mar 2025 00:58:37 +0000 (-0400) Subject: Fixes for 6.6 X-Git-Tag: v6.6.84~18 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1d09042b9924c51c360cb7c10f366bab8fa42733;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 6.6 Signed-off-by: Sasha Levin --- diff --git a/queue-6.6/i2c-ali1535-fix-an-error-handling-path-in-ali1535_pr.patch b/queue-6.6/i2c-ali1535-fix-an-error-handling-path-in-ali1535_pr.patch new file mode 100644 index 0000000000..8dbc83077b --- /dev/null +++ b/queue-6.6/i2c-ali1535-fix-an-error-handling-path-in-ali1535_pr.patch @@ -0,0 +1,55 @@ +From b7a0990464d7f2723a433b7fc4eb13c84e818a0f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 3 Mar 2025 20:53:08 +0100 +Subject: i2c: ali1535: Fix an error handling path in ali1535_probe() + +From: Christophe JAILLET + +[ Upstream commit 9b5463f349d019a261f1e80803447efca3126151 ] + +If i2c_add_adapter() fails, the request_region() call in ali1535_setup() +must be undone by a corresponding release_region() call, as done in the +remove function. + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Christophe JAILLET +Signed-off-by: Andi Shyti +Link: https://lore.kernel.org/r/0daf63d7a2ce74c02e2664ba805bbfadab7d25e5.1741031571.git.christophe.jaillet@wanadoo.fr +Signed-off-by: Sasha Levin +--- + drivers/i2c/busses/i2c-ali1535.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/drivers/i2c/busses/i2c-ali1535.c b/drivers/i2c/busses/i2c-ali1535.c +index ee83c4581bce0..cd2c8afebe798 100644 +--- a/drivers/i2c/busses/i2c-ali1535.c ++++ b/drivers/i2c/busses/i2c-ali1535.c +@@ -490,6 +490,8 @@ MODULE_DEVICE_TABLE(pci, ali1535_ids); + + static int ali1535_probe(struct pci_dev *dev, const struct pci_device_id *id) + { ++ int ret; ++ + if (ali1535_setup(dev)) { + dev_warn(&dev->dev, + "ALI1535 not detected, module not inserted.\n"); +@@ -501,7 +503,15 @@ static int ali1535_probe(struct pci_dev *dev, const struct pci_device_id *id) + + snprintf(ali1535_adapter.name, sizeof(ali1535_adapter.name), + "SMBus ALI1535 adapter at %04x", ali1535_offset); +- return i2c_add_adapter(&ali1535_adapter); ++ ret = i2c_add_adapter(&ali1535_adapter); ++ if (ret) ++ goto release_region; ++ ++ return 0; ++ ++release_region: ++ release_region(ali1535_smba, ALI1535_SMB_IOSIZE); ++ return ret; + } + + static void ali1535_remove(struct pci_dev *dev) +-- +2.39.5 + diff --git a/queue-6.6/i2c-ali15x3-fix-an-error-handling-path-in-ali15x3_pr.patch b/queue-6.6/i2c-ali15x3-fix-an-error-handling-path-in-ali15x3_pr.patch new file mode 100644 index 0000000000..05424a0568 --- /dev/null +++ b/queue-6.6/i2c-ali15x3-fix-an-error-handling-path-in-ali15x3_pr.patch @@ -0,0 +1,55 @@ +From e2cf6069d557f3a9025ff4ec63f2ff88862d5469 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 3 Mar 2025 20:58:06 +0100 +Subject: i2c: ali15x3: Fix an error handling path in ali15x3_probe() + +From: Christophe JAILLET + +[ Upstream commit 6e55caaf30c88209d097e575a169b1dface1ab69 ] + +If i2c_add_adapter() fails, the request_region() call in ali15x3_setup() +must be undone by a corresponding release_region() call, as done in the +remove function. + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Christophe JAILLET +Signed-off-by: Andi Shyti +Link: https://lore.kernel.org/r/9b2090cbcc02659f425188ea05f2e02745c4e67b.1741031878.git.christophe.jaillet@wanadoo.fr +Signed-off-by: Sasha Levin +--- + drivers/i2c/busses/i2c-ali15x3.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/drivers/i2c/busses/i2c-ali15x3.c b/drivers/i2c/busses/i2c-ali15x3.c +index 0231c5be6354f..c3f76b13a76f5 100644 +--- a/drivers/i2c/busses/i2c-ali15x3.c ++++ b/drivers/i2c/busses/i2c-ali15x3.c +@@ -474,6 +474,8 @@ MODULE_DEVICE_TABLE (pci, ali15x3_ids); + + static int ali15x3_probe(struct pci_dev *dev, const struct pci_device_id *id) + { ++ int ret; ++ + if (ali15x3_setup(dev)) { + dev_err(&dev->dev, + "ALI15X3 not detected, module not inserted.\n"); +@@ -485,7 +487,15 @@ static int ali15x3_probe(struct pci_dev *dev, const struct pci_device_id *id) + + snprintf(ali15x3_adapter.name, sizeof(ali15x3_adapter.name), + "SMBus ALI15X3 adapter at %04x", ali15x3_smba); +- return i2c_add_adapter(&ali15x3_adapter); ++ ret = i2c_add_adapter(&ali15x3_adapter); ++ if (ret) ++ goto release_region; ++ ++ return 0; ++ ++release_region: ++ release_region(ali15x3_smba, ALI15X3_SMB_IOSIZE); ++ return ret; + } + + static void ali15x3_remove(struct pci_dev *dev) +-- +2.39.5 + diff --git a/queue-6.6/i2c-sis630-fix-an-error-handling-path-in-sis630_prob.patch b/queue-6.6/i2c-sis630-fix-an-error-handling-path-in-sis630_prob.patch new file mode 100644 index 0000000000..fed766aa0a --- /dev/null +++ b/queue-6.6/i2c-sis630-fix-an-error-handling-path-in-sis630_prob.patch @@ -0,0 +1,55 @@ +From 795ba128d69da87ca824c11c31a29f39ff77cc68 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 3 Mar 2025 21:26:54 +0100 +Subject: i2c: sis630: Fix an error handling path in sis630_probe() + +From: Christophe JAILLET + +[ Upstream commit 2b22459792fcb4def9f0936d64575ac11a95a58d ] + +If i2c_add_adapter() fails, the request_region() call in sis630_setup() +must be undone by a corresponding release_region() call, as done in the +remove function. + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Christophe JAILLET +Link: https://lore.kernel.org/r/3d607601f2c38e896b10207963c6ab499ca5c307.1741033587.git.christophe.jaillet@wanadoo.fr +Signed-off-by: Andi Shyti +Signed-off-by: Sasha Levin +--- + drivers/i2c/busses/i2c-sis630.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/drivers/i2c/busses/i2c-sis630.c b/drivers/i2c/busses/i2c-sis630.c +index 87d56250d78a3..c42ecadac4f22 100644 +--- a/drivers/i2c/busses/i2c-sis630.c ++++ b/drivers/i2c/busses/i2c-sis630.c +@@ -509,6 +509,8 @@ MODULE_DEVICE_TABLE(pci, sis630_ids); + + static int sis630_probe(struct pci_dev *dev, const struct pci_device_id *id) + { ++ int ret; ++ + if (sis630_setup(dev)) { + dev_err(&dev->dev, + "SIS630 compatible bus not detected, " +@@ -522,7 +524,15 @@ static int sis630_probe(struct pci_dev *dev, const struct pci_device_id *id) + snprintf(sis630_adapter.name, sizeof(sis630_adapter.name), + "SMBus SIS630 adapter at %04x", smbus_base + SMB_STS); + +- return i2c_add_adapter(&sis630_adapter); ++ ret = i2c_add_adapter(&sis630_adapter); ++ if (ret) ++ goto release_region; ++ ++ return 0; ++ ++release_region: ++ release_region(smbus_base + SMB_STS, SIS630_SMB_IOREGION); ++ return ret; + } + + static void sis630_remove(struct pci_dev *dev) +-- +2.39.5 + diff --git a/queue-6.6/series b/queue-6.6/series index c389bade9c..48063afb3d 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -157,3 +157,9 @@ cifs-fix-integer-overflow-while-processing-actimeo-m.patch cifs-fix-integer-overflow-while-processing-closetime.patch cifs-validate-content-of-wsl-reparse-point-buffers.patch cifs-throw-eopnotsupp-error-on-unsupported-reparse-p.patch +i2c-ali1535-fix-an-error-handling-path-in-ali1535_pr.patch +i2c-ali15x3-fix-an-error-handling-path-in-ali15x3_pr.patch +i2c-sis630-fix-an-error-handling-path-in-sis630_prob.patch +stmmac-loongson-pass-correct-arg-to-pci-function.patch +smb3-add-support-for-iakerb.patch +smb-client-fix-match_session-bug-preventing-session-.patch diff --git a/queue-6.6/smb-client-fix-match_session-bug-preventing-session-.patch b/queue-6.6/smb-client-fix-match_session-bug-preventing-session-.patch new file mode 100644 index 0000000000..1deff3aab6 --- /dev/null +++ b/queue-6.6/smb-client-fix-match_session-bug-preventing-session-.patch @@ -0,0 +1,72 @@ +From 3fbc1e703fba8643d9d48f0b69c9f0d4645941f9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Mar 2025 15:23:59 -0300 +Subject: smb: client: Fix match_session bug preventing session reuse + +From: Henrique Carvalho + +[ Upstream commit 605b249ea96770ac4fac4b8510a99e0f8442be5e ] + +Fix a bug in match_session() that can causes the session to not be +reused in some cases. + +Reproduction steps: + +mount.cifs //server/share /mnt/a -o credentials=creds +mount.cifs //server/share /mnt/b -o credentials=creds,sec=ntlmssp +cat /proc/fs/cifs/DebugData | grep SessionId | wc -l + +mount.cifs //server/share /mnt/b -o credentials=creds,sec=ntlmssp +mount.cifs //server/share /mnt/a -o credentials=creds +cat /proc/fs/cifs/DebugData | grep SessionId | wc -l + +Cc: stable@vger.kernel.org +Reviewed-by: Enzo Matsumiya +Signed-off-by: Henrique Carvalho +Signed-off-by: Steve French +Signed-off-by: Sasha Levin +--- + fs/smb/client/connect.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c +index dbcaaa274abdb..198681d14153e 100644 +--- a/fs/smb/client/connect.c ++++ b/fs/smb/client/connect.c +@@ -1884,9 +1884,8 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx, + /* this function must be called with ses_lock and chan_lock held */ + static int match_session(struct cifs_ses *ses, struct smb3_fs_context *ctx) + { +- if (ctx->sectype != Unspecified && +- ctx->sectype != ses->sectype) +- return 0; ++ struct TCP_Server_Info *server = ses->server; ++ enum securityEnum ctx_sec, ses_sec; + + if (ctx->dfs_root_ses != ses->dfs_root_ses) + return 0; +@@ -1898,11 +1897,20 @@ static int match_session(struct cifs_ses *ses, struct smb3_fs_context *ctx) + if (ses->chan_max < ctx->max_channels) + return 0; + +- switch (ses->sectype) { ++ ctx_sec = server->ops->select_sectype(server, ctx->sectype); ++ ses_sec = server->ops->select_sectype(server, ses->sectype); ++ ++ if (ctx_sec != ses_sec) ++ return 0; ++ ++ switch (ctx_sec) { ++ case IAKerb: + case Kerberos: + if (!uid_eq(ctx->cred_uid, ses->cred_uid)) + return 0; + break; ++ case NTLMv2: ++ case RawNTLMSSP: + default: + /* NULL username means anonymous session */ + if (ses->user_name == NULL) { +-- +2.39.5 + diff --git a/queue-6.6/smb3-add-support-for-iakerb.patch b/queue-6.6/smb3-add-support-for-iakerb.patch new file mode 100644 index 0000000000..663becbe93 --- /dev/null +++ b/queue-6.6/smb3-add-support-for-iakerb.patch @@ -0,0 +1,124 @@ +From 624177d75c0a73c2235917339637443c5bcd38b3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 Jan 2025 01:04:23 -0600 +Subject: smb3: add support for IAKerb + +From: Steve French + +[ Upstream commit eea5119fa5979c350af5783a8148eacdd4219715 ] + +There are now more servers which advertise support for IAKerb (passthrough +Kerberos authentication via proxy). IAKerb is a public extension industry +standard Kerberos protocol that allows a client without line-of-sight +to a Domain Controller to authenticate. There can be cases where we +would fail to mount if the server only advertises the OID for IAKerb +in SPNEGO/GSSAPI. Add code to allow us to still upcall to userspace +in these cases to obtain the Kerberos ticket. + +Signed-off-by: Steve French +Stable-dep-of: 605b249ea967 ("smb: client: Fix match_session bug preventing session reuse") +Signed-off-by: Sasha Levin +--- + fs/smb/client/asn1.c | 2 ++ + fs/smb/client/cifs_spnego.c | 4 +++- + fs/smb/client/cifsglob.h | 4 ++++ + fs/smb/client/sess.c | 3 ++- + fs/smb/client/smb2pdu.c | 2 +- + 5 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/fs/smb/client/asn1.c b/fs/smb/client/asn1.c +index b5724ef9f182f..214a44509e7b9 100644 +--- a/fs/smb/client/asn1.c ++++ b/fs/smb/client/asn1.c +@@ -52,6 +52,8 @@ int cifs_neg_token_init_mech_type(void *context, size_t hdrlen, + server->sec_kerberos = true; + else if (oid == OID_ntlmssp) + server->sec_ntlmssp = true; ++ else if (oid == OID_IAKerb) ++ server->sec_iakerb = true; + else { + char buf[50]; + +diff --git a/fs/smb/client/cifs_spnego.c b/fs/smb/client/cifs_spnego.c +index af7849e5974ff..2ad067886ec3f 100644 +--- a/fs/smb/client/cifs_spnego.c ++++ b/fs/smb/client/cifs_spnego.c +@@ -130,11 +130,13 @@ cifs_get_spnego_key(struct cifs_ses *sesInfo, + + dp = description + strlen(description); + +- /* for now, only sec=krb5 and sec=mskrb5 are valid */ ++ /* for now, only sec=krb5 and sec=mskrb5 and iakerb are valid */ + if (server->sec_kerberos) + sprintf(dp, ";sec=krb5"); + else if (server->sec_mskerberos) + sprintf(dp, ";sec=mskrb5"); ++ else if (server->sec_iakerb) ++ sprintf(dp, ";sec=iakerb"); + else { + cifs_dbg(VFS, "unknown or missing server auth type, use krb5\n"); + sprintf(dp, ";sec=krb5"); +diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h +index 6992e1ec02e41..39117343b703f 100644 +--- a/fs/smb/client/cifsglob.h ++++ b/fs/smb/client/cifsglob.h +@@ -151,6 +151,7 @@ enum securityEnum { + NTLMv2, /* Legacy NTLM auth with NTLMv2 hash */ + RawNTLMSSP, /* NTLMSSP without SPNEGO, NTLMv2 hash */ + Kerberos, /* Kerberos via SPNEGO */ ++ IAKerb, /* Kerberos proxy */ + }; + + enum cifs_reparse_type { +@@ -749,6 +750,7 @@ struct TCP_Server_Info { + bool sec_kerberosu2u; /* supports U2U Kerberos */ + bool sec_kerberos; /* supports plain Kerberos */ + bool sec_mskerberos; /* supports legacy MS Kerberos */ ++ bool sec_iakerb; /* supports pass-through auth for Kerberos (krb5 proxy) */ + bool large_buf; /* is current buffer large? */ + /* use SMBD connection instead of socket */ + bool rdma; +@@ -2156,6 +2158,8 @@ static inline char *get_security_type_str(enum securityEnum sectype) + return "Kerberos"; + case NTLMv2: + return "NTLMv2"; ++ case IAKerb: ++ return "IAKerb"; + default: + return "Unknown"; + } +diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c +index 3216f786908fb..c2a98b2736645 100644 +--- a/fs/smb/client/sess.c ++++ b/fs/smb/client/sess.c +@@ -1295,12 +1295,13 @@ cifs_select_sectype(struct TCP_Server_Info *server, enum securityEnum requested) + switch (requested) { + case Kerberos: + case RawNTLMSSP: ++ case IAKerb: + return requested; + case Unspecified: + if (server->sec_ntlmssp && + (global_secflags & CIFSSEC_MAY_NTLMSSP)) + return RawNTLMSSP; +- if ((server->sec_kerberos || server->sec_mskerberos) && ++ if ((server->sec_kerberos || server->sec_mskerberos || server->sec_iakerb) && + (global_secflags & CIFSSEC_MAY_KRB5)) + return Kerberos; + fallthrough; +diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c +index 1b6cb533f5b87..0af3535e08f30 100644 +--- a/fs/smb/client/smb2pdu.c ++++ b/fs/smb/client/smb2pdu.c +@@ -1428,7 +1428,7 @@ smb2_select_sectype(struct TCP_Server_Info *server, enum securityEnum requested) + if (server->sec_ntlmssp && + (global_secflags & CIFSSEC_MAY_NTLMSSP)) + return RawNTLMSSP; +- if ((server->sec_kerberos || server->sec_mskerberos) && ++ if ((server->sec_kerberos || server->sec_mskerberos || server->sec_iakerb) && + (global_secflags & CIFSSEC_MAY_KRB5)) + return Kerberos; + fallthrough; +-- +2.39.5 + diff --git a/queue-6.6/stmmac-loongson-pass-correct-arg-to-pci-function.patch b/queue-6.6/stmmac-loongson-pass-correct-arg-to-pci-function.patch new file mode 100644 index 0000000000..1145a17591 --- /dev/null +++ b/queue-6.6/stmmac-loongson-pass-correct-arg-to-pci-function.patch @@ -0,0 +1,64 @@ +From 024a6956e9fd667fe6f30ff48ac1461fd0434ee0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 26 Feb 2025 09:52:05 +0100 +Subject: stmmac: loongson: Pass correct arg to PCI function + +From: Philipp Stanner + +[ Upstream commit 00371a3f48775967950c2fe3ec97b7c786ca956d ] + +pcim_iomap_regions() should receive the driver's name as its third +parameter, not the PCI device's name. + +Define the driver name with a macro and use it at the appropriate +places, including pcim_iomap_regions(). + +Cc: stable@vger.kernel.org # v5.14+ +Fixes: 30bba69d7db4 ("stmmac: pci: Add dwmac support for Loongson") +Signed-off-by: Philipp Stanner +Reviewed-by: Andrew Lunn +Reviewed-by: Yanteng Si +Tested-by: Henry Chen +Link: https://patch.msgid.link/20250226085208.97891-2-phasta@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +index ee3604f58def5..bdeec098309ab 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +@@ -9,7 +9,10 @@ + #include + #include "stmmac.h" + ++#define DRIVER_NAME "dwmac-loongson-pci" ++ + static int loongson_default_data(struct plat_stmmacenet_data *plat) ++ + { + plat->clk_csr = 2; /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */ + plat->has_gmac = 1; +@@ -95,7 +98,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id + for (i = 0; i < PCI_STD_NUM_BARS; i++) { + if (pci_resource_len(pdev, i) == 0) + continue; +- ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev)); ++ ret = pcim_iomap_regions(pdev, BIT(0), DRIVER_NAME); + if (ret) + goto err_disable_device; + break; +@@ -222,7 +225,7 @@ static const struct pci_device_id loongson_dwmac_id_table[] = { + MODULE_DEVICE_TABLE(pci, loongson_dwmac_id_table); + + static struct pci_driver loongson_dwmac_driver = { +- .name = "dwmac-loongson-pci", ++ .name = DRIVER_NAME, + .id_table = loongson_dwmac_id_table, + .probe = loongson_dwmac_probe, + .remove = loongson_dwmac_remove, +-- +2.39.5 +