+++ /dev/null
-From f76a812f0f10d0b21d77f2cb1118b131bc34f28f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 9 Oct 2023 15:36:45 +0200
-Subject: ethtool: Fix mod state of verbose no_mask bitset
-
-From: Kory Maincent <kory.maincent@bootlin.com>
-
-[ Upstream commit 108a36d07c01edbc5942d27c92494d1c6e4d45a0 ]
-
-A bitset without mask in a _SET request means we want exactly the bits in
-the bitset to be set. This works correctly for compact format but when
-verbose format is parsed, ethnl_update_bitset32_verbose() only sets the
-bits present in the request bitset but does not clear the rest. The commit
-6699170376ab fixes this issue by clearing the whole target bitmap before we
-start iterating. The solution proposed brought an issue with the behavior
-of the mod variable. As the bitset is always cleared the old val will
-always differ to the new val.
-
-Fix it by adding a new temporary variable which save the state of the old
-bitmap.
-
-Fixes: 6699170376ab ("ethtool: fix application of verbose no_mask bitset")
-Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
-Reviewed-by: Simon Horman <horms@kernel.org>
-Link: https://lore.kernel.org/r/20231009133645.44503-1-kory.maincent@bootlin.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/ethtool/bitset.c | 32 ++++++++++++++++++++++++++------
- 1 file changed, 26 insertions(+), 6 deletions(-)
-
-diff --git a/net/ethtool/bitset.c b/net/ethtool/bitset.c
-index 0515d6604b3b9..883ed9be81f9f 100644
---- a/net/ethtool/bitset.c
-+++ b/net/ethtool/bitset.c
-@@ -431,8 +431,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- ethnl_string_array_t names,
- struct netlink_ext_ack *extack, bool *mod)
- {
-+ u32 *orig_bitmap, *saved_bitmap = NULL;
- struct nlattr *bit_attr;
- bool no_mask;
-+ bool dummy;
- int rem;
- int ret;
-
-@@ -448,8 +450,22 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
-
- no_mask = tb[ETHTOOL_A_BITSET_NOMASK];
-- if (no_mask)
-- ethnl_bitmap32_clear(bitmap, 0, nbits, mod);
-+ if (no_mask) {
-+ unsigned int nwords = DIV_ROUND_UP(nbits, 32);
-+ unsigned int nbytes = nwords * sizeof(u32);
-+
-+ /* The bitmap size is only the size of the map part without
-+ * its mask part.
-+ */
-+ saved_bitmap = kcalloc(nwords, sizeof(u32), GFP_KERNEL);
-+ if (!saved_bitmap)
-+ return -ENOMEM;
-+ memcpy(saved_bitmap, bitmap, nbytes);
-+ ethnl_bitmap32_clear(bitmap, 0, nbits, &dummy);
-+ orig_bitmap = saved_bitmap;
-+ } else {
-+ orig_bitmap = bitmap;
-+ }
-
- nla_for_each_nested(bit_attr, tb[ETHTOOL_A_BITSET_BITS], rem) {
- bool old_val, new_val;
-@@ -458,13 +474,14 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- if (nla_type(bit_attr) != ETHTOOL_A_BITSET_BITS_BIT) {
- NL_SET_ERR_MSG_ATTR(extack, bit_attr,
- "only ETHTOOL_A_BITSET_BITS_BIT allowed in ETHTOOL_A_BITSET_BITS");
-- return -EINVAL;
-+ ret = -EINVAL;
-+ goto out;
- }
- ret = ethnl_parse_bit(&idx, &new_val, nbits, bit_attr, no_mask,
- names, extack);
- if (ret < 0)
-- return ret;
-- old_val = bitmap[idx / 32] & ((u32)1 << (idx % 32));
-+ goto out;
-+ old_val = orig_bitmap[idx / 32] & ((u32)1 << (idx % 32));
- if (new_val != old_val) {
- if (new_val)
- bitmap[idx / 32] |= ((u32)1 << (idx % 32));
-@@ -474,7 +491,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
- }
-
-- return 0;
-+ ret = 0;
-+out:
-+ kfree(saved_bitmap);
-+ return ret;
- }
-
- static int ethnl_compact_sanity_checks(unsigned int nbits,
---
-2.40.1
-
net-phy-mscc-macsec-reject-pn-update-requests.patch
ixgbe-fix-crash-with-empty-vf-macvlan-list.patch
net-nfc-fix-races-in-nfc_llcp_sock_get-and-nfc_llcp_.patch
-ethtool-fix-mod-state-of-verbose-no_mask-bitset.patch
pinctrl-renesas-rzn1-enable-missing-pinmux.patch
nfc-nci-assert-requested-protocol-is-valid.patch
workqueue-override-implicit-ordered-attribute-in-wor.patch
+++ /dev/null
-From aa33590a57ca33b47f9f686d021f74ad53c26cd8 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 9 Oct 2023 15:36:45 +0200
-Subject: ethtool: Fix mod state of verbose no_mask bitset
-
-From: Kory Maincent <kory.maincent@bootlin.com>
-
-[ Upstream commit 108a36d07c01edbc5942d27c92494d1c6e4d45a0 ]
-
-A bitset without mask in a _SET request means we want exactly the bits in
-the bitset to be set. This works correctly for compact format but when
-verbose format is parsed, ethnl_update_bitset32_verbose() only sets the
-bits present in the request bitset but does not clear the rest. The commit
-6699170376ab fixes this issue by clearing the whole target bitmap before we
-start iterating. The solution proposed brought an issue with the behavior
-of the mod variable. As the bitset is always cleared the old val will
-always differ to the new val.
-
-Fix it by adding a new temporary variable which save the state of the old
-bitmap.
-
-Fixes: 6699170376ab ("ethtool: fix application of verbose no_mask bitset")
-Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
-Reviewed-by: Simon Horman <horms@kernel.org>
-Link: https://lore.kernel.org/r/20231009133645.44503-1-kory.maincent@bootlin.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/ethtool/bitset.c | 32 ++++++++++++++++++++++++++------
- 1 file changed, 26 insertions(+), 6 deletions(-)
-
-diff --git a/net/ethtool/bitset.c b/net/ethtool/bitset.c
-index 0515d6604b3b9..883ed9be81f9f 100644
---- a/net/ethtool/bitset.c
-+++ b/net/ethtool/bitset.c
-@@ -431,8 +431,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- ethnl_string_array_t names,
- struct netlink_ext_ack *extack, bool *mod)
- {
-+ u32 *orig_bitmap, *saved_bitmap = NULL;
- struct nlattr *bit_attr;
- bool no_mask;
-+ bool dummy;
- int rem;
- int ret;
-
-@@ -448,8 +450,22 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
-
- no_mask = tb[ETHTOOL_A_BITSET_NOMASK];
-- if (no_mask)
-- ethnl_bitmap32_clear(bitmap, 0, nbits, mod);
-+ if (no_mask) {
-+ unsigned int nwords = DIV_ROUND_UP(nbits, 32);
-+ unsigned int nbytes = nwords * sizeof(u32);
-+
-+ /* The bitmap size is only the size of the map part without
-+ * its mask part.
-+ */
-+ saved_bitmap = kcalloc(nwords, sizeof(u32), GFP_KERNEL);
-+ if (!saved_bitmap)
-+ return -ENOMEM;
-+ memcpy(saved_bitmap, bitmap, nbytes);
-+ ethnl_bitmap32_clear(bitmap, 0, nbits, &dummy);
-+ orig_bitmap = saved_bitmap;
-+ } else {
-+ orig_bitmap = bitmap;
-+ }
-
- nla_for_each_nested(bit_attr, tb[ETHTOOL_A_BITSET_BITS], rem) {
- bool old_val, new_val;
-@@ -458,13 +474,14 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- if (nla_type(bit_attr) != ETHTOOL_A_BITSET_BITS_BIT) {
- NL_SET_ERR_MSG_ATTR(extack, bit_attr,
- "only ETHTOOL_A_BITSET_BITS_BIT allowed in ETHTOOL_A_BITSET_BITS");
-- return -EINVAL;
-+ ret = -EINVAL;
-+ goto out;
- }
- ret = ethnl_parse_bit(&idx, &new_val, nbits, bit_attr, no_mask,
- names, extack);
- if (ret < 0)
-- return ret;
-- old_val = bitmap[idx / 32] & ((u32)1 << (idx % 32));
-+ goto out;
-+ old_val = orig_bitmap[idx / 32] & ((u32)1 << (idx % 32));
- if (new_val != old_val) {
- if (new_val)
- bitmap[idx / 32] |= ((u32)1 << (idx % 32));
-@@ -474,7 +491,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
- }
-
-- return 0;
-+ ret = 0;
-+out:
-+ kfree(saved_bitmap);
-+ return ret;
- }
-
- static int ethnl_compact_sanity_checks(unsigned int nbits,
---
-2.40.1
-
ixgbe-fix-crash-with-empty-vf-macvlan-list.patch
net-mlx5e-again-mutually-exclude-rx-fcs-and-rx-port-.patch
net-nfc-fix-races-in-nfc_llcp_sock_get-and-nfc_llcp_.patch
-ethtool-fix-mod-state-of-verbose-no_mask-bitset.patch
net-smc-fix-pos-miscalculation-in-statistics.patch
pinctrl-renesas-rzn1-enable-missing-pinmux.patch
nfc-nci-assert-requested-protocol-is-valid.patch
+++ /dev/null
-From a48c130ea0bb4ed842e7d7e5532aade89a800f5a Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 9 Oct 2023 15:36:45 +0200
-Subject: ethtool: Fix mod state of verbose no_mask bitset
-
-From: Kory Maincent <kory.maincent@bootlin.com>
-
-[ Upstream commit 108a36d07c01edbc5942d27c92494d1c6e4d45a0 ]
-
-A bitset without mask in a _SET request means we want exactly the bits in
-the bitset to be set. This works correctly for compact format but when
-verbose format is parsed, ethnl_update_bitset32_verbose() only sets the
-bits present in the request bitset but does not clear the rest. The commit
-6699170376ab fixes this issue by clearing the whole target bitmap before we
-start iterating. The solution proposed brought an issue with the behavior
-of the mod variable. As the bitset is always cleared the old val will
-always differ to the new val.
-
-Fix it by adding a new temporary variable which save the state of the old
-bitmap.
-
-Fixes: 6699170376ab ("ethtool: fix application of verbose no_mask bitset")
-Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
-Reviewed-by: Simon Horman <horms@kernel.org>
-Link: https://lore.kernel.org/r/20231009133645.44503-1-kory.maincent@bootlin.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/ethtool/bitset.c | 32 ++++++++++++++++++++++++++------
- 1 file changed, 26 insertions(+), 6 deletions(-)
-
-diff --git a/net/ethtool/bitset.c b/net/ethtool/bitset.c
-index 0515d6604b3b9..883ed9be81f9f 100644
---- a/net/ethtool/bitset.c
-+++ b/net/ethtool/bitset.c
-@@ -431,8 +431,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- ethnl_string_array_t names,
- struct netlink_ext_ack *extack, bool *mod)
- {
-+ u32 *orig_bitmap, *saved_bitmap = NULL;
- struct nlattr *bit_attr;
- bool no_mask;
-+ bool dummy;
- int rem;
- int ret;
-
-@@ -448,8 +450,22 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
-
- no_mask = tb[ETHTOOL_A_BITSET_NOMASK];
-- if (no_mask)
-- ethnl_bitmap32_clear(bitmap, 0, nbits, mod);
-+ if (no_mask) {
-+ unsigned int nwords = DIV_ROUND_UP(nbits, 32);
-+ unsigned int nbytes = nwords * sizeof(u32);
-+
-+ /* The bitmap size is only the size of the map part without
-+ * its mask part.
-+ */
-+ saved_bitmap = kcalloc(nwords, sizeof(u32), GFP_KERNEL);
-+ if (!saved_bitmap)
-+ return -ENOMEM;
-+ memcpy(saved_bitmap, bitmap, nbytes);
-+ ethnl_bitmap32_clear(bitmap, 0, nbits, &dummy);
-+ orig_bitmap = saved_bitmap;
-+ } else {
-+ orig_bitmap = bitmap;
-+ }
-
- nla_for_each_nested(bit_attr, tb[ETHTOOL_A_BITSET_BITS], rem) {
- bool old_val, new_val;
-@@ -458,13 +474,14 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- if (nla_type(bit_attr) != ETHTOOL_A_BITSET_BITS_BIT) {
- NL_SET_ERR_MSG_ATTR(extack, bit_attr,
- "only ETHTOOL_A_BITSET_BITS_BIT allowed in ETHTOOL_A_BITSET_BITS");
-- return -EINVAL;
-+ ret = -EINVAL;
-+ goto out;
- }
- ret = ethnl_parse_bit(&idx, &new_val, nbits, bit_attr, no_mask,
- names, extack);
- if (ret < 0)
-- return ret;
-- old_val = bitmap[idx / 32] & ((u32)1 << (idx % 32));
-+ goto out;
-+ old_val = orig_bitmap[idx / 32] & ((u32)1 << (idx % 32));
- if (new_val != old_val) {
- if (new_val)
- bitmap[idx / 32] |= ((u32)1 << (idx % 32));
-@@ -474,7 +491,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
- }
-
-- return 0;
-+ ret = 0;
-+out:
-+ kfree(saved_bitmap);
-+ return ret;
- }
-
- static int ethnl_compact_sanity_checks(unsigned int nbits,
---
-2.40.1
-
ixgbe-fix-crash-with-empty-vf-macvlan-list.patch
net-mlx5e-again-mutually-exclude-rx-fcs-and-rx-port-.patch
net-nfc-fix-races-in-nfc_llcp_sock_get-and-nfc_llcp_.patch
-ethtool-fix-mod-state-of-verbose-no_mask-bitset.patch
net-smc-fix-pos-miscalculation-in-statistics.patch
pinctrl-renesas-rzn1-enable-missing-pinmux.patch
nfc-nci-assert-requested-protocol-is-valid.patch
+++ /dev/null
-From e86daf36d0bae53b9d3a6e6ecb4a85e921a348cd Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 9 Oct 2023 15:36:45 +0200
-Subject: ethtool: Fix mod state of verbose no_mask bitset
-
-From: Kory Maincent <kory.maincent@bootlin.com>
-
-[ Upstream commit 108a36d07c01edbc5942d27c92494d1c6e4d45a0 ]
-
-A bitset without mask in a _SET request means we want exactly the bits in
-the bitset to be set. This works correctly for compact format but when
-verbose format is parsed, ethnl_update_bitset32_verbose() only sets the
-bits present in the request bitset but does not clear the rest. The commit
-6699170376ab fixes this issue by clearing the whole target bitmap before we
-start iterating. The solution proposed brought an issue with the behavior
-of the mod variable. As the bitset is always cleared the old val will
-always differ to the new val.
-
-Fix it by adding a new temporary variable which save the state of the old
-bitmap.
-
-Fixes: 6699170376ab ("ethtool: fix application of verbose no_mask bitset")
-Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
-Reviewed-by: Simon Horman <horms@kernel.org>
-Link: https://lore.kernel.org/r/20231009133645.44503-1-kory.maincent@bootlin.com
-Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- net/ethtool/bitset.c | 32 ++++++++++++++++++++++++++------
- 1 file changed, 26 insertions(+), 6 deletions(-)
-
-diff --git a/net/ethtool/bitset.c b/net/ethtool/bitset.c
-index 0515d6604b3b9..883ed9be81f9f 100644
---- a/net/ethtool/bitset.c
-+++ b/net/ethtool/bitset.c
-@@ -431,8 +431,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- ethnl_string_array_t names,
- struct netlink_ext_ack *extack, bool *mod)
- {
-+ u32 *orig_bitmap, *saved_bitmap = NULL;
- struct nlattr *bit_attr;
- bool no_mask;
-+ bool dummy;
- int rem;
- int ret;
-
-@@ -448,8 +450,22 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
-
- no_mask = tb[ETHTOOL_A_BITSET_NOMASK];
-- if (no_mask)
-- ethnl_bitmap32_clear(bitmap, 0, nbits, mod);
-+ if (no_mask) {
-+ unsigned int nwords = DIV_ROUND_UP(nbits, 32);
-+ unsigned int nbytes = nwords * sizeof(u32);
-+
-+ /* The bitmap size is only the size of the map part without
-+ * its mask part.
-+ */
-+ saved_bitmap = kcalloc(nwords, sizeof(u32), GFP_KERNEL);
-+ if (!saved_bitmap)
-+ return -ENOMEM;
-+ memcpy(saved_bitmap, bitmap, nbytes);
-+ ethnl_bitmap32_clear(bitmap, 0, nbits, &dummy);
-+ orig_bitmap = saved_bitmap;
-+ } else {
-+ orig_bitmap = bitmap;
-+ }
-
- nla_for_each_nested(bit_attr, tb[ETHTOOL_A_BITSET_BITS], rem) {
- bool old_val, new_val;
-@@ -458,13 +474,14 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- if (nla_type(bit_attr) != ETHTOOL_A_BITSET_BITS_BIT) {
- NL_SET_ERR_MSG_ATTR(extack, bit_attr,
- "only ETHTOOL_A_BITSET_BITS_BIT allowed in ETHTOOL_A_BITSET_BITS");
-- return -EINVAL;
-+ ret = -EINVAL;
-+ goto out;
- }
- ret = ethnl_parse_bit(&idx, &new_val, nbits, bit_attr, no_mask,
- names, extack);
- if (ret < 0)
-- return ret;
-- old_val = bitmap[idx / 32] & ((u32)1 << (idx % 32));
-+ goto out;
-+ old_val = orig_bitmap[idx / 32] & ((u32)1 << (idx % 32));
- if (new_val != old_val) {
- if (new_val)
- bitmap[idx / 32] |= ((u32)1 << (idx % 32));
-@@ -474,7 +491,10 @@ ethnl_update_bitset32_verbose(u32 *bitmap, unsigned int nbits,
- }
- }
-
-- return 0;
-+ ret = 0;
-+out:
-+ kfree(saved_bitmap);
-+ return ret;
- }
-
- static int ethnl_compact_sanity_checks(unsigned int nbits,
---
-2.40.1
-
s390-bpf-fix-clobbering-the-caller-s-backchain-in-th.patch
s390-bpf-fix-unwinding-past-the-trampoline.patch
net-nfc-fix-races-in-nfc_llcp_sock_get-and-nfc_llcp_.patch
-ethtool-fix-mod-state-of-verbose-no_mask-bitset.patch
net-smc-fix-pos-miscalculation-in-statistics.patch
net-tcp-fix-crashes-trying-to-free-half-baked-mtu-pr.patch
pinctrl-renesas-rzn1-enable-missing-pinmux.patch