From: Sasha Levin Date: Sat, 12 Feb 2022 05:44:13 +0000 (-0500) Subject: Fixes for 4.19 X-Git-Tag: v4.9.302~49 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c7fa88baf731c025aa91ca8655326295adc229ef;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/net-sched-clarify-error-message-when-qdisc-kind-is-u.patch b/queue-4.19/net-sched-clarify-error-message-when-qdisc-kind-is-u.patch new file mode 100644 index 00000000000..7b3435746e9 --- /dev/null +++ b/queue-4.19/net-sched-clarify-error-message-when-qdisc-kind-is-u.patch @@ -0,0 +1,41 @@ +From f6315dedcf3b6de57c088b583b0af0cc31b44293 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Jan 2022 14:19:09 -0300 +Subject: net: sched: Clarify error message when qdisc kind is unknown + +From: Victor Nogueira + +[ Upstream commit 973bf8fdd12f0e70ea351c018e68edd377a836d1 ] + +When adding a tc rule with a qdisc kind that is not supported or not +compiled into the kernel, the kernel emits the following error: "Error: +Specified qdisc not found.". Found via tdc testing when ETS qdisc was not +compiled in and it was not obvious right away what the message meant +without looking at the kernel code. + +Change the error message to be more explicit and say the qdisc kind is +unknown. + +Signed-off-by: Victor Nogueira +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + net/sched/sch_api.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c +index af035431bec60..424e70907b967 100644 +--- a/net/sched/sch_api.c ++++ b/net/sched/sch_api.c +@@ -1131,7 +1131,7 @@ static struct Qdisc *qdisc_create(struct net_device *dev, + + err = -ENOENT; + if (!ops) { +- NL_SET_ERR_MSG(extack, "Specified qdisc not found"); ++ NL_SET_ERR_MSG(extack, "Specified qdisc kind is unknown"); + goto err_out; + } + +-- +2.34.1 + diff --git a/queue-4.19/net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch b/queue-4.19/net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch new file mode 100644 index 00000000000..534d7eb7df1 --- /dev/null +++ b/queue-4.19/net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch @@ -0,0 +1,42 @@ +From 9b85083d69a740a147e73804a64eeef482542a36 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 27 Jan 2022 00:52:15 +0800 +Subject: net: stmmac: dwmac-sun8i: use return val of readl_poll_timeout() + +From: Jisheng Zhang + +[ Upstream commit 9e0db41e7a0b6f1271cbcfb16dbf5b8641b4e440 ] + +When readl_poll_timeout() timeout, we'd better directly use its return +value. + +Before this patch: +[ 2.145528] dwmac-sun8i: probe of 4500000.ethernet failed with error -14 + +After this patch: +[ 2.138520] dwmac-sun8i: probe of 4500000.ethernet failed with error -110 + +Signed-off-by: Jisheng Zhang +Acked-by: Jernej Skrabec +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +index 4382deaeb570d..0137cba2cb54b 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +@@ -712,7 +712,7 @@ static int sun8i_dwmac_reset(struct stmmac_priv *priv) + + if (err) { + dev_err(priv->device, "EMAC reset timeout\n"); +- return -EFAULT; ++ return err; + } + return 0; + } +-- +2.34.1 + diff --git a/queue-4.19/nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch b/queue-4.19/nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch new file mode 100644 index 00000000000..d1d4d0291f9 --- /dev/null +++ b/queue-4.19/nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch @@ -0,0 +1,40 @@ +From 3e77d4909f5c9669e8d3f6a1c34b1c66a5273c3d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 17 Dec 2021 01:01:33 +0800 +Subject: nfs: nfs4clinet: check the return value of kstrdup() + +From: Xiaoke Wang + +[ Upstream commit fbd2057e5329d3502a27491190237b6be52a1cb6 ] + +kstrdup() returns NULL when some internal memory errors happen, it is +better to check the return value of it so to catch the memory error in +time. + +Signed-off-by: Xiaoke Wang +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4client.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c +index 43659326b5191..c97ec2fa0bbcd 100644 +--- a/fs/nfs/nfs4client.c ++++ b/fs/nfs/nfs4client.c +@@ -1273,8 +1273,11 @@ int nfs4_update_server(struct nfs_server *server, const char *hostname, + } + nfs_put_client(clp); + +- if (server->nfs_client->cl_hostname == NULL) ++ if (server->nfs_client->cl_hostname == NULL) { + server->nfs_client->cl_hostname = kstrdup(hostname, GFP_KERNEL); ++ if (server->nfs_client->cl_hostname == NULL) ++ return -ENOMEM; ++ } + nfs_server_insert_lists(server); + + return nfs_probe_destination(server); +-- +2.34.1 + diff --git a/queue-4.19/nfsv4-expose-nfs_parse_server_name-function.patch b/queue-4.19/nfsv4-expose-nfs_parse_server_name-function.patch new file mode 100644 index 00000000000..cbc7f512df3 --- /dev/null +++ b/queue-4.19/nfsv4-expose-nfs_parse_server_name-function.patch @@ -0,0 +1,51 @@ +From a2ed7a395c8f352c41cd7a01906ac08eaaaf3af9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 9 Dec 2021 14:53:32 -0500 +Subject: NFSv4 expose nfs_parse_server_name function + +From: Olga Kornievskaia + +[ Upstream commit f5b27cc6761e27ee6387a24df1a99ca77b360fea ] + +Make nfs_parse_server_name available outside of nfs4namespace.c. + +Signed-off-by: Olga Kornievskaia +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4_fs.h | 3 ++- + fs/nfs/nfs4namespace.c | 4 ++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h +index 4dc9bd7ddf073..5ac7bf24c507b 100644 +--- a/fs/nfs/nfs4_fs.h ++++ b/fs/nfs/nfs4_fs.h +@@ -276,7 +276,8 @@ struct vfsmount *nfs4_submount(struct nfs_server *, struct dentry *, + struct nfs_fh *, struct nfs_fattr *); + int nfs4_replace_transport(struct nfs_server *server, + const struct nfs4_fs_locations *locations); +- ++size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa, ++ size_t salen, struct net *net); + /* nfs4proc.c */ + extern int nfs4_handle_exception(struct nfs_server *, int, struct nfs4_exception *); + extern int nfs4_async_handle_error(struct rpc_task *task, +diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c +index 24f06dcc2b08e..936c412be28ef 100644 +--- a/fs/nfs/nfs4namespace.c ++++ b/fs/nfs/nfs4namespace.c +@@ -121,8 +121,8 @@ static int nfs4_validate_fspath(struct dentry *dentry, + return 0; + } + +-static size_t nfs_parse_server_name(char *string, size_t len, +- struct sockaddr *sa, size_t salen, struct net *net) ++size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa, ++ size_t salen, struct net *net) + { + ssize_t ret; + +-- +2.34.1 + diff --git a/queue-4.19/nfsv4-only-print-the-label-when-its-queried.patch b/queue-4.19/nfsv4-only-print-the-label-when-its-queried.patch new file mode 100644 index 00000000000..80c2d9ea4ac --- /dev/null +++ b/queue-4.19/nfsv4-only-print-the-label-when-its-queried.patch @@ -0,0 +1,42 @@ +From cadbe250eb8a58a878ebadfb7998b1f242515db3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 29 Nov 2021 15:33:56 -0500 +Subject: NFSv4 only print the label when its queried + +From: Olga Kornievskaia + +[ Upstream commit 2c52c8376db7160a1dd8a681c61c9258405ef143 ] + +When the bitmask of the attributes doesn't include the security label, +don't bother printing it. Since the label might not be null terminated, +adjust the printing format accordingly. + +Signed-off-by: Olga Kornievskaia +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4xdr.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c +index 0a5cae8f8aff9..8a61dc21d3d68 100644 +--- a/fs/nfs/nfs4xdr.c ++++ b/fs/nfs/nfs4xdr.c +@@ -4294,10 +4294,11 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap, + } else + printk(KERN_WARNING "%s: label too long (%u)!\n", + __func__, len); ++ if (label && label->label) ++ dprintk("%s: label=%.*s, len=%d, PI=%d, LFS=%d\n", ++ __func__, label->len, (char *)label->label, ++ label->len, label->pi, label->lfs); + } +- if (label && label->label) +- dprintk("%s: label=%s, len=%d, PI=%d, LFS=%d\n", __func__, +- (char *)label->label, label->len, label->pi, label->lfs); + return status; + + out_overflow: +-- +2.34.1 + diff --git a/queue-4.19/nfsv4-remove-zero-number-of-fs_locations-entries-err.patch b/queue-4.19/nfsv4-remove-zero-number-of-fs_locations-entries-err.patch new file mode 100644 index 00000000000..e751fecc848 --- /dev/null +++ b/queue-4.19/nfsv4-remove-zero-number-of-fs_locations-entries-err.patch @@ -0,0 +1,50 @@ +From 0d16a4447ccddf6a788d1c010bd985d04cefba54 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 9 Dec 2021 14:53:29 -0500 +Subject: NFSv4 remove zero number of fs_locations entries error check + +From: Olga Kornievskaia + +[ Upstream commit 90e12a3191040bd3854d3e236c35921e4e92a044 ] + +Remove the check for the zero length fs_locations reply in the +xdr decoding, and instead check for that in the migration code. + +Signed-off-by: Olga Kornievskaia +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4state.c | 3 +++ + fs/nfs/nfs4xdr.c | 2 -- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c +index b3086e99420c7..9c98547fcefcc 100644 +--- a/fs/nfs/nfs4state.c ++++ b/fs/nfs/nfs4state.c +@@ -2066,6 +2066,9 @@ static int nfs4_try_migration(struct nfs_server *server, struct rpc_cred *cred) + } + + result = -NFS4ERR_NXIO; ++ if (!locations->nlocations) ++ goto out; ++ + if (!(locations->fattr.valid & NFS_ATTR_FATTR_V4_LOCATIONS)) { + dprintk("<-- %s: No fs_locations data, migration skipped\n", + __func__); +diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c +index 8a61dc21d3d68..56e48642c43eb 100644 +--- a/fs/nfs/nfs4xdr.c ++++ b/fs/nfs/nfs4xdr.c +@@ -3747,8 +3747,6 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st + if (unlikely(!p)) + goto out_overflow; + n = be32_to_cpup(p); +- if (n <= 0) +- goto out_eio; + for (res->nlocations = 0; res->nlocations < n; res->nlocations++) { + u32 m; + struct nfs4_fs_location *loc; +-- +2.34.1 + diff --git a/queue-4.19/nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch b/queue-4.19/nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch new file mode 100644 index 00000000000..3b3d9a8ff0e --- /dev/null +++ b/queue-4.19/nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch @@ -0,0 +1,106 @@ +From 960dec67925c5c9fdf27daa7e5dc36075127dc27 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 3 Jan 2022 14:50:16 -0500 +Subject: NFSv4.1: Fix uninitialised variable in devicenotify + +From: Trond Myklebust + +[ Upstream commit b05bf5c63b326ce1da84ef42498d8e0e292e694c ] + +When decode_devicenotify_args() exits with no entries, we need to +ensure that the struct cb_devicenotifyargs is initialised to +{ 0, NULL } in order to avoid problems in +nfs4_callback_devicenotify(). + +Reported-by: +Signed-off-by: Trond Myklebust +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/callback.h | 2 +- + fs/nfs/callback_proc.c | 2 +- + fs/nfs/callback_xdr.c | 18 +++++++++--------- + 3 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h +index 8f34daf85f703..5d5227ce4d91e 100644 +--- a/fs/nfs/callback.h ++++ b/fs/nfs/callback.h +@@ -168,7 +168,7 @@ struct cb_devicenotifyitem { + }; + + struct cb_devicenotifyargs { +- int ndevs; ++ uint32_t ndevs; + struct cb_devicenotifyitem *devs; + }; + +diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c +index bcc51f131a496..868d66ed8bcf6 100644 +--- a/fs/nfs/callback_proc.c ++++ b/fs/nfs/callback_proc.c +@@ -364,7 +364,7 @@ __be32 nfs4_callback_devicenotify(void *argp, void *resp, + struct cb_process_state *cps) + { + struct cb_devicenotifyargs *args = argp; +- int i; ++ uint32_t i; + __be32 res = 0; + struct nfs_client *clp = cps->clp; + struct nfs_server *server = NULL; +diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c +index 57558a8d92e9b..76aa1b456c524 100644 +--- a/fs/nfs/callback_xdr.c ++++ b/fs/nfs/callback_xdr.c +@@ -268,11 +268,9 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp, + void *argp) + { + struct cb_devicenotifyargs *args = argp; ++ uint32_t tmp, n, i; + __be32 *p; + __be32 status = 0; +- u32 tmp; +- int n, i; +- args->ndevs = 0; + + /* Num of device notifications */ + p = read_buf(xdr, sizeof(uint32_t)); +@@ -281,7 +279,7 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp, + goto out; + } + n = ntohl(*p++); +- if (n <= 0) ++ if (n == 0) + goto out; + if (n > ULONG_MAX / sizeof(*args->devs)) { + status = htonl(NFS4ERR_BADXDR); +@@ -339,19 +337,21 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp, + dev->cbd_immediate = 0; + } + +- args->ndevs++; +- + dprintk("%s: type %d layout 0x%x immediate %d\n", + __func__, dev->cbd_notify_type, dev->cbd_layout_type, + dev->cbd_immediate); + } ++ args->ndevs = n; ++ dprintk("%s: ndevs %d\n", __func__, args->ndevs); ++ return 0; ++err: ++ kfree(args->devs); + out: ++ args->devs = NULL; ++ args->ndevs = 0; + dprintk("%s: status %d ndevs %d\n", + __func__, ntohl(status), args->ndevs); + return status; +-err: +- kfree(args->devs); +- goto out; + } + + static __be32 decode_sessionid(struct xdr_stream *xdr, +-- +2.34.1 + diff --git a/queue-4.19/scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch b/queue-4.19/scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch new file mode 100644 index 00000000000..76a5e368fbc --- /dev/null +++ b/queue-4.19/scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch @@ -0,0 +1,43 @@ +From faaee74938904140b87142d7e6607c7f064dc3a8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Jan 2022 13:47:42 +0800 +Subject: scsi: target: iscsi: Make sure the np under each tpg is unique + +From: ZouMingzhe + +[ Upstream commit a861790afaa8b6369eee8a88c5d5d73f5799c0c6 ] + +iscsit_tpg_check_network_portal() has nested for_each loops and is supposed +to return true when a match is found. However, the tpg loop will still +continue after existing the tpg_np loop. If this tpg_np is not the last the +match value will be changed. + +Break the outer loop after finding a match and make sure the np under each +tpg is unique. + +Link: https://lore.kernel.org/r/20220111054742.19582-1-mingzhe.zou@easystack.cn +Signed-off-by: ZouMingzhe +Reviewed-by: Mike Christie +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/target/iscsi/iscsi_target_tpg.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c +index 101d62105c932..f3671ffdf1495 100644 +--- a/drivers/target/iscsi/iscsi_target_tpg.c ++++ b/drivers/target/iscsi/iscsi_target_tpg.c +@@ -451,6 +451,9 @@ static bool iscsit_tpg_check_network_portal( + break; + } + spin_unlock(&tpg->tpg_np_lock); ++ ++ if (match) ++ break; + } + spin_unlock(&tiqn->tiqn_tpg_lock); + +-- +2.34.1 + diff --git a/queue-4.19/series b/queue-4.19/series index 711a27afdc2..5b60a32aa90 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -6,3 +6,12 @@ net-phy-marvell-fix-mdi-x-polarity-setting-in-88e1118-compatible-phys.patch nfs-fix-initialisation-of-nfs_client-cl_flags-field.patch nfsd-clamp-write-offsets.patch nfsd-fix-offset-type-in-i-o-trace-points.patch +nfsv4-only-print-the-label-when-its-queried.patch +nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch +nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch +nfsv4-remove-zero-number-of-fs_locations-entries-err.patch +nfsv4-expose-nfs_parse_server_name-function.patch +net-sched-clarify-error-message-when-qdisc-kind-is-u.patch +scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch +usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch +net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch diff --git a/queue-4.19/usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch b/queue-4.19/usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch new file mode 100644 index 00000000000..8d166eb3c07 --- /dev/null +++ b/queue-4.19/usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch @@ -0,0 +1,50 @@ +From a3cf74e819b5d97668d36b5a688892c32ac4eb05 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 7 Dec 2021 14:01:01 +0100 +Subject: usb: dwc2: gadget: don't try to disable ep0 in dwc2_hsotg_suspend + +From: Amelie Delaunay + +[ Upstream commit ac55d163855924aa5af9f1560977da8f346963c8 ] + +Calling dwc2_hsotg_ep_disable on ep0 (in/out) will lead to the following +logs before returning -EINVAL: +dwc2 49000000.usb-otg: dwc2_hsotg_ep_disable: called for ep0 +dwc2 49000000.usb-otg: dwc2_hsotg_ep_disable: called for ep0 + +To avoid these two logs while suspending, start disabling the endpoint +from the index 1, as done in dwc2_hsotg_udc_stop: + + /* all endpoints should be shutdown */ + for (ep = 1; ep < hsotg->num_of_eps; ep++) { + if (hsotg->eps_in[ep]) + dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep); + if (hsotg->eps_out[ep]) + dwc2_hsotg_ep_disable_lock(&hsotg->eps_out[ep]->ep); + } + +Acked-by: Minas Harutyunyan +Signed-off-by: Amelie Delaunay +Link: https://lore.kernel.org/r/20211207130101.270314-1-amelie.delaunay@foss.st.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/usb/dwc2/gadget.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c +index b405c8ac8984b..1e46005929e44 100644 +--- a/drivers/usb/dwc2/gadget.c ++++ b/drivers/usb/dwc2/gadget.c +@@ -4818,7 +4818,7 @@ int dwc2_hsotg_suspend(struct dwc2_hsotg *hsotg) + hsotg->gadget.speed = USB_SPEED_UNKNOWN; + spin_unlock_irqrestore(&hsotg->lock, flags); + +- for (ep = 0; ep < hsotg->num_of_eps; ep++) { ++ for (ep = 1; ep < hsotg->num_of_eps; ep++) { + if (hsotg->eps_in[ep]) + dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep); + if (hsotg->eps_out[ep]) +-- +2.34.1 +