All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/3] compiler_types: add Endianness-dependent __counted_by_{le,be}
@ 2024-03-26 16:41 ` Alexander Lobakin
  0 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Alexander Lobakin, Kees Cook, Gustavo A. R. Silva,
	Nathan Chancellor, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming,
	intel-wired-lan, linux-hardening, netdev, linux-kernel

Some structures contain flexible arrays at the end and the counter for
them, but the counter has explicit Endianness and thus __counted_by()
can't be used directly.

To increase test coverage for potential problems without breaking
anything, introduce __counted_by_{le,be} defined depending on platform's
Endianness to either __counted_by() when applicable or noop otherwise.
The first user will be virtchnl2.h from idpf just as example with 9 flex
structures having Little Endian counters.

Maybe it would be a good idea to introduce such attributes on compiler
level if possible, but for now let's stop on what we have.

Alexander Lobakin (3):
  compiler_types: add Endianness-dependent __counted_by_{le,be}
  idpf: make virtchnl2.h self-contained
  idpf: sprinkle __counted_by{,_le}() in the virtchnl2 header

 Documentation/conf.py                       |  2 ++
 scripts/kernel-doc                          |  1 +
 include/linux/compiler_types.h              | 11 ++++++++++
 drivers/net/ethernet/intel/idpf/virtchnl2.h | 24 ++++++++++-----------
 4 files changed, 26 insertions(+), 12 deletions(-)

---
From RFC[0]:

* teach kdoc new attributes (Simon, Kees);
* add Acked-by (Kees);
* fix a couple typos;
* send to net-next (Kees).

[0] https://lore.kernel.org/netdev/20240318130354.2713265-1-aleksander.lobakin@intel.com
-- 
2.44.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Intel-wired-lan] [PATCH net-next 0/3] compiler_types: add Endianness-dependent __counted_by_{le, be}
@ 2024-03-26 16:41 ` Alexander Lobakin
  0 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, Alexander Lobakin, intel-wired-lan,
	linux-hardening, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming

Some structures contain flexible arrays at the end and the counter for
them, but the counter has explicit Endianness and thus __counted_by()
can't be used directly.

To increase test coverage for potential problems without breaking
anything, introduce __counted_by_{le,be} defined depending on platform's
Endianness to either __counted_by() when applicable or noop otherwise.
The first user will be virtchnl2.h from idpf just as example with 9 flex
structures having Little Endian counters.

Maybe it would be a good idea to introduce such attributes on compiler
level if possible, but for now let's stop on what we have.

Alexander Lobakin (3):
  compiler_types: add Endianness-dependent __counted_by_{le,be}
  idpf: make virtchnl2.h self-contained
  idpf: sprinkle __counted_by{,_le}() in the virtchnl2 header

 Documentation/conf.py                       |  2 ++
 scripts/kernel-doc                          |  1 +
 include/linux/compiler_types.h              | 11 ++++++++++
 drivers/net/ethernet/intel/idpf/virtchnl2.h | 24 ++++++++++-----------
 4 files changed, 26 insertions(+), 12 deletions(-)

---
From RFC[0]:

* teach kdoc new attributes (Simon, Kees);
* add Acked-by (Kees);
* fix a couple typos;
* send to net-next (Kees).

[0] https://lore.kernel.org/netdev/20240318130354.2713265-1-aleksander.lobakin@intel.com
-- 
2.44.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le,be}
  2024-03-26 16:41 ` [Intel-wired-lan] [PATCH net-next 0/3] compiler_types: add Endianness-dependent __counted_by_{le, be} Alexander Lobakin
@ 2024-03-26 16:41   ` Alexander Lobakin
  -1 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Alexander Lobakin, Kees Cook, Gustavo A. R. Silva,
	Nathan Chancellor, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming,
	intel-wired-lan, linux-hardening, netdev, linux-kernel

Some structures contain flexible arrays at the end and the counter for
them, but the counter has explicit Endianness and thus __counted_by()
can't be used directly.

To increase test coverage for potential problems without breaking
anything, introduce __counted_by_{le,be}() defined depending on
platform's Endianness to either __counted_by() when applicable or noop
otherwise.
Maybe it would be a good idea to introduce such attributes on compiler
level if possible, but for now let's stop on what we have.

Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
---
 Documentation/conf.py          |  2 ++
 scripts/kernel-doc             |  1 +
 include/linux/compiler_types.h | 11 +++++++++++
 3 files changed, 14 insertions(+)

diff --git a/Documentation/conf.py b/Documentation/conf.py
index d148f3e8dd57..0c2205d536b3 100644
--- a/Documentation/conf.py
+++ b/Documentation/conf.py
@@ -75,6 +75,8 @@ if major >= 3:
             "__rcu",
             "__user",
             "__force",
+            "__counted_by_le",
+            "__counted_by_be",
 
             # include/linux/compiler_attributes.h:
             "__alias",
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 967f1abb0edb..1474e95dbe4f 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1143,6 +1143,7 @@ sub dump_struct($$) {
         $members =~ s/\s*$attribute/ /gi;
         $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos;
         $members =~ s/\s*__counted_by\s*\([^;]*\)/ /gos;
+        $members =~ s/\s*__counted_by_(le|be)\s*\([^;]*\)/ /gos;
         $members =~ s/\s*__packed\s*/ /gos;
         $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos;
         $members =~ s/\s*____cacheline_aligned_in_smp/ /gos;
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index 2abaa3a825a9..a29ba6ef1e27 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -282,6 +282,17 @@ struct ftrace_likely_data {
 #define __no_sanitize_or_inline __always_inline
 #endif
 
+/*
+ * Apply __counted_by() when the Endianness matches to increase test coverage.
+ */
+#ifdef __LITTLE_ENDIAN
+#define __counted_by_le(member)	__counted_by(member)
+#define __counted_by_be(member)
+#else
+#define __counted_by_le(member)
+#define __counted_by_be(member)	__counted_by(member)
+#endif
+
 /* Do not trap wrapping arithmetic within an annotated function. */
 #ifdef CONFIG_UBSAN_SIGNED_WRAP
 # define __signed_wrap __attribute__((no_sanitize("signed-integer-overflow")))
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Intel-wired-lan] [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le, be}
@ 2024-03-26 16:41   ` Alexander Lobakin
  0 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, Alexander Lobakin, intel-wired-lan,
	linux-hardening, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming

Some structures contain flexible arrays at the end and the counter for
them, but the counter has explicit Endianness and thus __counted_by()
can't be used directly.

To increase test coverage for potential problems without breaking
anything, introduce __counted_by_{le,be}() defined depending on
platform's Endianness to either __counted_by() when applicable or noop
otherwise.
Maybe it would be a good idea to introduce such attributes on compiler
level if possible, but for now let's stop on what we have.

Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
---
 Documentation/conf.py          |  2 ++
 scripts/kernel-doc             |  1 +
 include/linux/compiler_types.h | 11 +++++++++++
 3 files changed, 14 insertions(+)

diff --git a/Documentation/conf.py b/Documentation/conf.py
index d148f3e8dd57..0c2205d536b3 100644
--- a/Documentation/conf.py
+++ b/Documentation/conf.py
@@ -75,6 +75,8 @@ if major >= 3:
             "__rcu",
             "__user",
             "__force",
+            "__counted_by_le",
+            "__counted_by_be",
 
             # include/linux/compiler_attributes.h:
             "__alias",
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 967f1abb0edb..1474e95dbe4f 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1143,6 +1143,7 @@ sub dump_struct($$) {
         $members =~ s/\s*$attribute/ /gi;
         $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos;
         $members =~ s/\s*__counted_by\s*\([^;]*\)/ /gos;
+        $members =~ s/\s*__counted_by_(le|be)\s*\([^;]*\)/ /gos;
         $members =~ s/\s*__packed\s*/ /gos;
         $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos;
         $members =~ s/\s*____cacheline_aligned_in_smp/ /gos;
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index 2abaa3a825a9..a29ba6ef1e27 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -282,6 +282,17 @@ struct ftrace_likely_data {
 #define __no_sanitize_or_inline __always_inline
 #endif
 
+/*
+ * Apply __counted_by() when the Endianness matches to increase test coverage.
+ */
+#ifdef __LITTLE_ENDIAN
+#define __counted_by_le(member)	__counted_by(member)
+#define __counted_by_be(member)
+#else
+#define __counted_by_le(member)
+#define __counted_by_be(member)	__counted_by(member)
+#endif
+
 /* Do not trap wrapping arithmetic within an annotated function. */
 #ifdef CONFIG_UBSAN_SIGNED_WRAP
 # define __signed_wrap __attribute__((no_sanitize("signed-integer-overflow")))
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
  2024-03-26 16:41 ` [Intel-wired-lan] [PATCH net-next 0/3] compiler_types: add Endianness-dependent __counted_by_{le, be} Alexander Lobakin
@ 2024-03-26 16:41   ` Alexander Lobakin
  -1 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Alexander Lobakin, Kees Cook, Gustavo A. R. Silva,
	Nathan Chancellor, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming,
	intel-wired-lan, linux-hardening, netdev, linux-kernel

To ease maintaining of virtchnl2.h, which already is messy enough,
make it self-contained by adding missing if_ether.h include due to
%ETH_ALEN usage.
At the same time, virtchnl2_lan_desc.h is not used anywhere in the
file, so remove this include to speed up C preprocessing.

Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
---
 drivers/net/ethernet/intel/idpf/virtchnl2.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
index 4a3c4454d25a..29419211b3d9 100644
--- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
+++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
@@ -4,6 +4,8 @@
 #ifndef _VIRTCHNL2_H_
 #define _VIRTCHNL2_H_
 
+#include <linux/if_ether.h>
+
 /* All opcodes associated with virtchnl2 are prefixed with virtchnl2 or
  * VIRTCHNL2. Any future opcodes, offloads/capabilities, structures,
  * and defines must be prefixed with virtchnl2 or VIRTCHNL2 to avoid confusion.
@@ -17,8 +19,6 @@
  * must remain unchanged over time, so we specify explicit values for all enums.
  */
 
-#include "virtchnl2_lan_desc.h"
-
 /* This macro is used to generate compilation errors if a structure
  * is not exactly the correct length.
  */
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Intel-wired-lan] [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
@ 2024-03-26 16:41   ` Alexander Lobakin
  0 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, Alexander Lobakin, intel-wired-lan,
	linux-hardening, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming

To ease maintaining of virtchnl2.h, which already is messy enough,
make it self-contained by adding missing if_ether.h include due to
%ETH_ALEN usage.
At the same time, virtchnl2_lan_desc.h is not used anywhere in the
file, so remove this include to speed up C preprocessing.

Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
---
 drivers/net/ethernet/intel/idpf/virtchnl2.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
index 4a3c4454d25a..29419211b3d9 100644
--- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
+++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
@@ -4,6 +4,8 @@
 #ifndef _VIRTCHNL2_H_
 #define _VIRTCHNL2_H_
 
+#include <linux/if_ether.h>
+
 /* All opcodes associated with virtchnl2 are prefixed with virtchnl2 or
  * VIRTCHNL2. Any future opcodes, offloads/capabilities, structures,
  * and defines must be prefixed with virtchnl2 or VIRTCHNL2 to avoid confusion.
@@ -17,8 +19,6 @@
  * must remain unchanged over time, so we specify explicit values for all enums.
  */
 
-#include "virtchnl2_lan_desc.h"
-
 /* This macro is used to generate compilation errors if a structure
  * is not exactly the correct length.
  */
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 3/3] idpf: sprinkle __counted_by{,_le}() in the virtchnl2 header
  2024-03-26 16:41 ` [Intel-wired-lan] [PATCH net-next 0/3] compiler_types: add Endianness-dependent __counted_by_{le, be} Alexander Lobakin
@ 2024-03-26 16:41   ` Alexander Lobakin
  -1 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Alexander Lobakin, Kees Cook, Gustavo A. R. Silva,
	Nathan Chancellor, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming,
	intel-wired-lan, linux-hardening, netdev, linux-kernel

Both virtchnl2.h and its consumer idpf_virtchnl.c are very error-prone.
There are 10 structures with flexible arrays at the end, but 9 of them
has flex member counter in Little Endian.
Make the code a bit more robust by applying __counted_by_le() to those
9. LE platforms is the main target for this driver, so they would
receive additional protection.
While we're here, add __counted_by() to virtchnl2_ptype::proto_id, as
its counter is `u8` regardless of the Endianness.
Compile test on x86_64 (LE) didn't reveal any new issues after applying
the attributes.

Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
---
 drivers/net/ethernet/intel/idpf/virtchnl2.h | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
index 29419211b3d9..63deb120359c 100644
--- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
+++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
@@ -555,7 +555,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_queue_reg_chunk);
 struct virtchnl2_queue_reg_chunks {
 	__le16 num_chunks;
 	u8 pad[6];
-	struct virtchnl2_queue_reg_chunk chunks[];
+	struct virtchnl2_queue_reg_chunk chunks[] __counted_by_le(num_chunks);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_reg_chunks);
 
@@ -703,7 +703,7 @@ struct virtchnl2_config_tx_queues {
 	__le32 vport_id;
 	__le16 num_qinfo;
 	u8 pad[10];
-	struct virtchnl2_txq_info qinfo[];
+	struct virtchnl2_txq_info qinfo[] __counted_by_le(num_qinfo);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_config_tx_queues);
 
@@ -782,7 +782,7 @@ struct virtchnl2_config_rx_queues {
 	__le32 vport_id;
 	__le16 num_qinfo;
 	u8 pad[18];
-	struct virtchnl2_rxq_info qinfo[];
+	struct virtchnl2_rxq_info qinfo[] __counted_by_le(num_qinfo);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(24, virtchnl2_config_rx_queues);
 
@@ -868,7 +868,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_vector_chunk);
 struct virtchnl2_vector_chunks {
 	__le16 num_vchunks;
 	u8 pad[14];
-	struct virtchnl2_vector_chunk vchunks[];
+	struct virtchnl2_vector_chunk vchunks[] __counted_by_le(num_vchunks);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_vector_chunks);
 
@@ -912,7 +912,7 @@ struct virtchnl2_rss_lut {
 	__le16 lut_entries_start;
 	__le16 lut_entries;
 	u8 pad[4];
-	__le32 lut[];
+	__le32 lut[] __counted_by_le(lut_entries);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(12, virtchnl2_rss_lut);
 
@@ -977,7 +977,7 @@ struct virtchnl2_ptype {
 	u8 ptype_id_8;
 	u8 proto_id_count;
 	__le16 pad;
-	__le16 proto_id[];
+	__le16 proto_id[] __counted_by(proto_id_count);
 } __packed __aligned(2);
 VIRTCHNL2_CHECK_STRUCT_LEN(6, virtchnl2_ptype);
 
@@ -1104,7 +1104,7 @@ struct virtchnl2_rss_key {
 	__le32 vport_id;
 	__le16 key_len;
 	u8 pad;
-	u8 key_flex[];
+	u8 key_flex[] __counted_by_le(key_len);
 } __packed;
 VIRTCHNL2_CHECK_STRUCT_LEN(7, virtchnl2_rss_key);
 
@@ -1131,7 +1131,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_chunk);
 struct virtchnl2_queue_chunks {
 	__le16 num_chunks;
 	u8 pad[6];
-	struct virtchnl2_queue_chunk chunks[];
+	struct virtchnl2_queue_chunk chunks[] __counted_by_le(num_chunks);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_chunks);
 
@@ -1195,7 +1195,7 @@ struct virtchnl2_queue_vector_maps {
 	__le32 vport_id;
 	__le16 num_qv_maps;
 	u8 pad[10];
-	struct virtchnl2_queue_vector qv_maps[];
+	struct virtchnl2_queue_vector qv_maps[] __counted_by_le(num_qv_maps);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_vector_maps);
 
@@ -1247,7 +1247,7 @@ struct virtchnl2_mac_addr_list {
 	__le32 vport_id;
 	__le16 num_mac_addr;
 	u8 pad[2];
-	struct virtchnl2_mac_addr mac_addr_list[];
+	struct virtchnl2_mac_addr mac_addr_list[] __counted_by_le(num_mac_addr);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_mac_addr_list);
 
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [Intel-wired-lan] [PATCH net-next 3/3] idpf: sprinkle __counted_by{, _le}() in the virtchnl2 header
@ 2024-03-26 16:41   ` Alexander Lobakin
  0 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-26 16:41 UTC (permalink / raw
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, Alexander Lobakin, intel-wired-lan,
	linux-hardening, Simon Horman, nex.sw.ncis.osdt.itp.upstreaming

Both virtchnl2.h and its consumer idpf_virtchnl.c are very error-prone.
There are 10 structures with flexible arrays at the end, but 9 of them
has flex member counter in Little Endian.
Make the code a bit more robust by applying __counted_by_le() to those
9. LE platforms is the main target for this driver, so they would
receive additional protection.
While we're here, add __counted_by() to virtchnl2_ptype::proto_id, as
its counter is `u8` regardless of the Endianness.
Compile test on x86_64 (LE) didn't reveal any new issues after applying
the attributes.

Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
---
 drivers/net/ethernet/intel/idpf/virtchnl2.h | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
index 29419211b3d9..63deb120359c 100644
--- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
+++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
@@ -555,7 +555,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_queue_reg_chunk);
 struct virtchnl2_queue_reg_chunks {
 	__le16 num_chunks;
 	u8 pad[6];
-	struct virtchnl2_queue_reg_chunk chunks[];
+	struct virtchnl2_queue_reg_chunk chunks[] __counted_by_le(num_chunks);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_reg_chunks);
 
@@ -703,7 +703,7 @@ struct virtchnl2_config_tx_queues {
 	__le32 vport_id;
 	__le16 num_qinfo;
 	u8 pad[10];
-	struct virtchnl2_txq_info qinfo[];
+	struct virtchnl2_txq_info qinfo[] __counted_by_le(num_qinfo);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_config_tx_queues);
 
@@ -782,7 +782,7 @@ struct virtchnl2_config_rx_queues {
 	__le32 vport_id;
 	__le16 num_qinfo;
 	u8 pad[18];
-	struct virtchnl2_rxq_info qinfo[];
+	struct virtchnl2_rxq_info qinfo[] __counted_by_le(num_qinfo);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(24, virtchnl2_config_rx_queues);
 
@@ -868,7 +868,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_vector_chunk);
 struct virtchnl2_vector_chunks {
 	__le16 num_vchunks;
 	u8 pad[14];
-	struct virtchnl2_vector_chunk vchunks[];
+	struct virtchnl2_vector_chunk vchunks[] __counted_by_le(num_vchunks);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_vector_chunks);
 
@@ -912,7 +912,7 @@ struct virtchnl2_rss_lut {
 	__le16 lut_entries_start;
 	__le16 lut_entries;
 	u8 pad[4];
-	__le32 lut[];
+	__le32 lut[] __counted_by_le(lut_entries);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(12, virtchnl2_rss_lut);
 
@@ -977,7 +977,7 @@ struct virtchnl2_ptype {
 	u8 ptype_id_8;
 	u8 proto_id_count;
 	__le16 pad;
-	__le16 proto_id[];
+	__le16 proto_id[] __counted_by(proto_id_count);
 } __packed __aligned(2);
 VIRTCHNL2_CHECK_STRUCT_LEN(6, virtchnl2_ptype);
 
@@ -1104,7 +1104,7 @@ struct virtchnl2_rss_key {
 	__le32 vport_id;
 	__le16 key_len;
 	u8 pad;
-	u8 key_flex[];
+	u8 key_flex[] __counted_by_le(key_len);
 } __packed;
 VIRTCHNL2_CHECK_STRUCT_LEN(7, virtchnl2_rss_key);
 
@@ -1131,7 +1131,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_chunk);
 struct virtchnl2_queue_chunks {
 	__le16 num_chunks;
 	u8 pad[6];
-	struct virtchnl2_queue_chunk chunks[];
+	struct virtchnl2_queue_chunk chunks[] __counted_by_le(num_chunks);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_chunks);
 
@@ -1195,7 +1195,7 @@ struct virtchnl2_queue_vector_maps {
 	__le32 vport_id;
 	__le16 num_qv_maps;
 	u8 pad[10];
-	struct virtchnl2_queue_vector qv_maps[];
+	struct virtchnl2_queue_vector qv_maps[] __counted_by_le(num_qv_maps);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_vector_maps);
 
@@ -1247,7 +1247,7 @@ struct virtchnl2_mac_addr_list {
 	__le32 vport_id;
 	__le16 num_mac_addr;
 	u8 pad[2];
-	struct virtchnl2_mac_addr mac_addr_list[];
+	struct virtchnl2_mac_addr mac_addr_list[] __counted_by_le(num_mac_addr);
 };
 VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_mac_addr_list);
 
-- 
2.44.0


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le,be}
  2024-03-26 16:41   ` [Intel-wired-lan] [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le, be} Alexander Lobakin
@ 2024-03-26 17:02     ` Gustavo A. R. Silva
  -1 siblings, 0 replies; 18+ messages in thread
From: Gustavo A. R. Silva @ 2024-03-26 17:02 UTC (permalink / raw
  To: Alexander Lobakin, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni
  Cc: Kees Cook, Gustavo A. R. Silva, Nathan Chancellor, Simon Horman,
	nex.sw.ncis.osdt.itp.upstreaming, intel-wired-lan,
	linux-hardening, netdev, linux-kernel



On 3/26/24 10:41, Alexander Lobakin wrote:
> Some structures contain flexible arrays at the end and the counter for
> them, but the counter has explicit Endianness and thus __counted_by()
> can't be used directly.
> 
> To increase test coverage for potential problems without breaking
> anything, introduce __counted_by_{le,be}() defined depending on
> platform's Endianness to either __counted_by() when applicable or noop
> otherwise.
> Maybe it would be a good idea to introduce such attributes on compiler
> level if possible, but for now let's stop on what we have.
> 
> Acked-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>

LGTM:

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Thanks
--
Gustavo

> ---
>   Documentation/conf.py          |  2 ++
>   scripts/kernel-doc             |  1 +
>   include/linux/compiler_types.h | 11 +++++++++++
>   3 files changed, 14 insertions(+)
> 
> diff --git a/Documentation/conf.py b/Documentation/conf.py
> index d148f3e8dd57..0c2205d536b3 100644
> --- a/Documentation/conf.py
> +++ b/Documentation/conf.py
> @@ -75,6 +75,8 @@ if major >= 3:
>               "__rcu",
>               "__user",
>               "__force",
> +            "__counted_by_le",
> +            "__counted_by_be",
>   
>               # include/linux/compiler_attributes.h:
>               "__alias",
> diff --git a/scripts/kernel-doc b/scripts/kernel-doc
> index 967f1abb0edb..1474e95dbe4f 100755
> --- a/scripts/kernel-doc
> +++ b/scripts/kernel-doc
> @@ -1143,6 +1143,7 @@ sub dump_struct($$) {
>           $members =~ s/\s*$attribute/ /gi;
>           $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos;
>           $members =~ s/\s*__counted_by\s*\([^;]*\)/ /gos;
> +        $members =~ s/\s*__counted_by_(le|be)\s*\([^;]*\)/ /gos;
>           $members =~ s/\s*__packed\s*/ /gos;
>           $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos;
>           $members =~ s/\s*____cacheline_aligned_in_smp/ /gos;
> diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> index 2abaa3a825a9..a29ba6ef1e27 100644
> --- a/include/linux/compiler_types.h
> +++ b/include/linux/compiler_types.h
> @@ -282,6 +282,17 @@ struct ftrace_likely_data {
>   #define __no_sanitize_or_inline __always_inline
>   #endif
>   
> +/*
> + * Apply __counted_by() when the Endianness matches to increase test coverage.
> + */
> +#ifdef __LITTLE_ENDIAN
> +#define __counted_by_le(member)	__counted_by(member)
> +#define __counted_by_be(member)
> +#else
> +#define __counted_by_le(member)
> +#define __counted_by_be(member)	__counted_by(member)
> +#endif
> +
>   /* Do not trap wrapping arithmetic within an annotated function. */
>   #ifdef CONFIG_UBSAN_SIGNED_WRAP
>   # define __signed_wrap __attribute__((no_sanitize("signed-integer-overflow")))

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Intel-wired-lan] [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le, be}
@ 2024-03-26 17:02     ` Gustavo A. R. Silva
  0 siblings, 0 replies; 18+ messages in thread
From: Gustavo A. R. Silva @ 2024-03-26 17:02 UTC (permalink / raw
  To: Alexander Lobakin, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, intel-wired-lan, linux-hardening, Simon Horman,
	nex.sw.ncis.osdt.itp.upstreaming



On 3/26/24 10:41, Alexander Lobakin wrote:
> Some structures contain flexible arrays at the end and the counter for
> them, but the counter has explicit Endianness and thus __counted_by()
> can't be used directly.
> 
> To increase test coverage for potential problems without breaking
> anything, introduce __counted_by_{le,be}() defined depending on
> platform's Endianness to either __counted_by() when applicable or noop
> otherwise.
> Maybe it would be a good idea to introduce such attributes on compiler
> level if possible, but for now let's stop on what we have.
> 
> Acked-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>

LGTM:

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Thanks
--
Gustavo

> ---
>   Documentation/conf.py          |  2 ++
>   scripts/kernel-doc             |  1 +
>   include/linux/compiler_types.h | 11 +++++++++++
>   3 files changed, 14 insertions(+)
> 
> diff --git a/Documentation/conf.py b/Documentation/conf.py
> index d148f3e8dd57..0c2205d536b3 100644
> --- a/Documentation/conf.py
> +++ b/Documentation/conf.py
> @@ -75,6 +75,8 @@ if major >= 3:
>               "__rcu",
>               "__user",
>               "__force",
> +            "__counted_by_le",
> +            "__counted_by_be",
>   
>               # include/linux/compiler_attributes.h:
>               "__alias",
> diff --git a/scripts/kernel-doc b/scripts/kernel-doc
> index 967f1abb0edb..1474e95dbe4f 100755
> --- a/scripts/kernel-doc
> +++ b/scripts/kernel-doc
> @@ -1143,6 +1143,7 @@ sub dump_struct($$) {
>           $members =~ s/\s*$attribute/ /gi;
>           $members =~ s/\s*__aligned\s*\([^;]*\)/ /gos;
>           $members =~ s/\s*__counted_by\s*\([^;]*\)/ /gos;
> +        $members =~ s/\s*__counted_by_(le|be)\s*\([^;]*\)/ /gos;
>           $members =~ s/\s*__packed\s*/ /gos;
>           $members =~ s/\s*CRYPTO_MINALIGN_ATTR/ /gos;
>           $members =~ s/\s*____cacheline_aligned_in_smp/ /gos;
> diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> index 2abaa3a825a9..a29ba6ef1e27 100644
> --- a/include/linux/compiler_types.h
> +++ b/include/linux/compiler_types.h
> @@ -282,6 +282,17 @@ struct ftrace_likely_data {
>   #define __no_sanitize_or_inline __always_inline
>   #endif
>   
> +/*
> + * Apply __counted_by() when the Endianness matches to increase test coverage.
> + */
> +#ifdef __LITTLE_ENDIAN
> +#define __counted_by_le(member)	__counted_by(member)
> +#define __counted_by_be(member)
> +#else
> +#define __counted_by_le(member)
> +#define __counted_by_be(member)	__counted_by(member)
> +#endif
> +
>   /* Do not trap wrapping arithmetic within an annotated function. */
>   #ifdef CONFIG_UBSAN_SIGNED_WRAP
>   # define __signed_wrap __attribute__((no_sanitize("signed-integer-overflow")))

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 3/3] idpf: sprinkle __counted_by{,_le}() in the virtchnl2 header
  2024-03-26 16:41   ` [Intel-wired-lan] [PATCH net-next 3/3] idpf: sprinkle __counted_by{, _le}() " Alexander Lobakin
@ 2024-03-26 17:03     ` Gustavo A. R. Silva
  -1 siblings, 0 replies; 18+ messages in thread
From: Gustavo A. R. Silva @ 2024-03-26 17:03 UTC (permalink / raw
  To: Alexander Lobakin, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni
  Cc: Kees Cook, Gustavo A. R. Silva, Nathan Chancellor, Simon Horman,
	nex.sw.ncis.osdt.itp.upstreaming, intel-wired-lan,
	linux-hardening, netdev, linux-kernel



On 3/26/24 10:41, Alexander Lobakin wrote:
> Both virtchnl2.h and its consumer idpf_virtchnl.c are very error-prone.
> There are 10 structures with flexible arrays at the end, but 9 of them
> has flex member counter in Little Endian.
> Make the code a bit more robust by applying __counted_by_le() to those
> 9. LE platforms is the main target for this driver, so they would
> receive additional protection.
> While we're here, add __counted_by() to virtchnl2_ptype::proto_id, as
> its counter is `u8` regardless of the Endianness.
> Compile test on x86_64 (LE) didn't reveal any new issues after applying
> the attributes.
> 
> Acked-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>

LGTM:

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Thanks
-- 
Gustavo

> ---
>   drivers/net/ethernet/intel/idpf/virtchnl2.h | 20 ++++++++++----------
>   1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> index 29419211b3d9..63deb120359c 100644
> --- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
> +++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> @@ -555,7 +555,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_queue_reg_chunk);
>   struct virtchnl2_queue_reg_chunks {
>   	__le16 num_chunks;
>   	u8 pad[6];
> -	struct virtchnl2_queue_reg_chunk chunks[];
> +	struct virtchnl2_queue_reg_chunk chunks[] __counted_by_le(num_chunks);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_reg_chunks);
>   
> @@ -703,7 +703,7 @@ struct virtchnl2_config_tx_queues {
>   	__le32 vport_id;
>   	__le16 num_qinfo;
>   	u8 pad[10];
> -	struct virtchnl2_txq_info qinfo[];
> +	struct virtchnl2_txq_info qinfo[] __counted_by_le(num_qinfo);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_config_tx_queues);
>   
> @@ -782,7 +782,7 @@ struct virtchnl2_config_rx_queues {
>   	__le32 vport_id;
>   	__le16 num_qinfo;
>   	u8 pad[18];
> -	struct virtchnl2_rxq_info qinfo[];
> +	struct virtchnl2_rxq_info qinfo[] __counted_by_le(num_qinfo);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(24, virtchnl2_config_rx_queues);
>   
> @@ -868,7 +868,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_vector_chunk);
>   struct virtchnl2_vector_chunks {
>   	__le16 num_vchunks;
>   	u8 pad[14];
> -	struct virtchnl2_vector_chunk vchunks[];
> +	struct virtchnl2_vector_chunk vchunks[] __counted_by_le(num_vchunks);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_vector_chunks);
>   
> @@ -912,7 +912,7 @@ struct virtchnl2_rss_lut {
>   	__le16 lut_entries_start;
>   	__le16 lut_entries;
>   	u8 pad[4];
> -	__le32 lut[];
> +	__le32 lut[] __counted_by_le(lut_entries);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(12, virtchnl2_rss_lut);
>   
> @@ -977,7 +977,7 @@ struct virtchnl2_ptype {
>   	u8 ptype_id_8;
>   	u8 proto_id_count;
>   	__le16 pad;
> -	__le16 proto_id[];
> +	__le16 proto_id[] __counted_by(proto_id_count);
>   } __packed __aligned(2);
>   VIRTCHNL2_CHECK_STRUCT_LEN(6, virtchnl2_ptype);
>   
> @@ -1104,7 +1104,7 @@ struct virtchnl2_rss_key {
>   	__le32 vport_id;
>   	__le16 key_len;
>   	u8 pad;
> -	u8 key_flex[];
> +	u8 key_flex[] __counted_by_le(key_len);
>   } __packed;
>   VIRTCHNL2_CHECK_STRUCT_LEN(7, virtchnl2_rss_key);
>   
> @@ -1131,7 +1131,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_chunk);
>   struct virtchnl2_queue_chunks {
>   	__le16 num_chunks;
>   	u8 pad[6];
> -	struct virtchnl2_queue_chunk chunks[];
> +	struct virtchnl2_queue_chunk chunks[] __counted_by_le(num_chunks);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_chunks);
>   
> @@ -1195,7 +1195,7 @@ struct virtchnl2_queue_vector_maps {
>   	__le32 vport_id;
>   	__le16 num_qv_maps;
>   	u8 pad[10];
> -	struct virtchnl2_queue_vector qv_maps[];
> +	struct virtchnl2_queue_vector qv_maps[] __counted_by_le(num_qv_maps);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_vector_maps);
>   
> @@ -1247,7 +1247,7 @@ struct virtchnl2_mac_addr_list {
>   	__le32 vport_id;
>   	__le16 num_mac_addr;
>   	u8 pad[2];
> -	struct virtchnl2_mac_addr mac_addr_list[];
> +	struct virtchnl2_mac_addr mac_addr_list[] __counted_by_le(num_mac_addr);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_mac_addr_list);
>   

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Intel-wired-lan] [PATCH net-next 3/3] idpf: sprinkle __counted_by{, _le}() in the virtchnl2 header
@ 2024-03-26 17:03     ` Gustavo A. R. Silva
  0 siblings, 0 replies; 18+ messages in thread
From: Gustavo A. R. Silva @ 2024-03-26 17:03 UTC (permalink / raw
  To: Alexander Lobakin, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, intel-wired-lan, linux-hardening, Simon Horman,
	nex.sw.ncis.osdt.itp.upstreaming



On 3/26/24 10:41, Alexander Lobakin wrote:
> Both virtchnl2.h and its consumer idpf_virtchnl.c are very error-prone.
> There are 10 structures with flexible arrays at the end, but 9 of them
> has flex member counter in Little Endian.
> Make the code a bit more robust by applying __counted_by_le() to those
> 9. LE platforms is the main target for this driver, so they would
> receive additional protection.
> While we're here, add __counted_by() to virtchnl2_ptype::proto_id, as
> its counter is `u8` regardless of the Endianness.
> Compile test on x86_64 (LE) didn't reveal any new issues after applying
> the attributes.
> 
> Acked-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>

LGTM:

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Thanks
-- 
Gustavo

> ---
>   drivers/net/ethernet/intel/idpf/virtchnl2.h | 20 ++++++++++----------
>   1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> index 29419211b3d9..63deb120359c 100644
> --- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
> +++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> @@ -555,7 +555,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_queue_reg_chunk);
>   struct virtchnl2_queue_reg_chunks {
>   	__le16 num_chunks;
>   	u8 pad[6];
> -	struct virtchnl2_queue_reg_chunk chunks[];
> +	struct virtchnl2_queue_reg_chunk chunks[] __counted_by_le(num_chunks);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_reg_chunks);
>   
> @@ -703,7 +703,7 @@ struct virtchnl2_config_tx_queues {
>   	__le32 vport_id;
>   	__le16 num_qinfo;
>   	u8 pad[10];
> -	struct virtchnl2_txq_info qinfo[];
> +	struct virtchnl2_txq_info qinfo[] __counted_by_le(num_qinfo);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_config_tx_queues);
>   
> @@ -782,7 +782,7 @@ struct virtchnl2_config_rx_queues {
>   	__le32 vport_id;
>   	__le16 num_qinfo;
>   	u8 pad[18];
> -	struct virtchnl2_rxq_info qinfo[];
> +	struct virtchnl2_rxq_info qinfo[] __counted_by_le(num_qinfo);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(24, virtchnl2_config_rx_queues);
>   
> @@ -868,7 +868,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(32, virtchnl2_vector_chunk);
>   struct virtchnl2_vector_chunks {
>   	__le16 num_vchunks;
>   	u8 pad[14];
> -	struct virtchnl2_vector_chunk vchunks[];
> +	struct virtchnl2_vector_chunk vchunks[] __counted_by_le(num_vchunks);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_vector_chunks);
>   
> @@ -912,7 +912,7 @@ struct virtchnl2_rss_lut {
>   	__le16 lut_entries_start;
>   	__le16 lut_entries;
>   	u8 pad[4];
> -	__le32 lut[];
> +	__le32 lut[] __counted_by_le(lut_entries);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(12, virtchnl2_rss_lut);
>   
> @@ -977,7 +977,7 @@ struct virtchnl2_ptype {
>   	u8 ptype_id_8;
>   	u8 proto_id_count;
>   	__le16 pad;
> -	__le16 proto_id[];
> +	__le16 proto_id[] __counted_by(proto_id_count);
>   } __packed __aligned(2);
>   VIRTCHNL2_CHECK_STRUCT_LEN(6, virtchnl2_ptype);
>   
> @@ -1104,7 +1104,7 @@ struct virtchnl2_rss_key {
>   	__le32 vport_id;
>   	__le16 key_len;
>   	u8 pad;
> -	u8 key_flex[];
> +	u8 key_flex[] __counted_by_le(key_len);
>   } __packed;
>   VIRTCHNL2_CHECK_STRUCT_LEN(7, virtchnl2_rss_key);
>   
> @@ -1131,7 +1131,7 @@ VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_chunk);
>   struct virtchnl2_queue_chunks {
>   	__le16 num_chunks;
>   	u8 pad[6];
> -	struct virtchnl2_queue_chunk chunks[];
> +	struct virtchnl2_queue_chunk chunks[] __counted_by_le(num_chunks);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_queue_chunks);
>   
> @@ -1195,7 +1195,7 @@ struct virtchnl2_queue_vector_maps {
>   	__le32 vport_id;
>   	__le16 num_qv_maps;
>   	u8 pad[10];
> -	struct virtchnl2_queue_vector qv_maps[];
> +	struct virtchnl2_queue_vector qv_maps[] __counted_by_le(num_qv_maps);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(16, virtchnl2_queue_vector_maps);
>   
> @@ -1247,7 +1247,7 @@ struct virtchnl2_mac_addr_list {
>   	__le32 vport_id;
>   	__le16 num_mac_addr;
>   	u8 pad[2];
> -	struct virtchnl2_mac_addr mac_addr_list[];
> +	struct virtchnl2_mac_addr mac_addr_list[] __counted_by_le(num_mac_addr);
>   };
>   VIRTCHNL2_CHECK_STRUCT_LEN(8, virtchnl2_mac_addr_list);
>   

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
  2024-03-26 16:41   ` [Intel-wired-lan] " Alexander Lobakin
@ 2024-03-26 17:04     ` Gustavo A. R. Silva
  -1 siblings, 0 replies; 18+ messages in thread
From: Gustavo A. R. Silva @ 2024-03-26 17:04 UTC (permalink / raw
  To: Alexander Lobakin, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni
  Cc: Kees Cook, Gustavo A. R. Silva, Nathan Chancellor, Simon Horman,
	nex.sw.ncis.osdt.itp.upstreaming, intel-wired-lan,
	linux-hardening, netdev, linux-kernel



On 3/26/24 10:41, Alexander Lobakin wrote:
> To ease maintaining of virtchnl2.h, which already is messy enough,
> make it self-contained by adding missing if_ether.h include due to
> %ETH_ALEN usage.
> At the same time, virtchnl2_lan_desc.h is not used anywhere in the
> file, so remove this include to speed up C preprocessing.
> 
> Acked-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Thanks
-- 
Gustavo

> ---
>   drivers/net/ethernet/intel/idpf/virtchnl2.h | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> index 4a3c4454d25a..29419211b3d9 100644
> --- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
> +++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> @@ -4,6 +4,8 @@
>   #ifndef _VIRTCHNL2_H_
>   #define _VIRTCHNL2_H_
>   
> +#include <linux/if_ether.h>
> +
>   /* All opcodes associated with virtchnl2 are prefixed with virtchnl2 or
>    * VIRTCHNL2. Any future opcodes, offloads/capabilities, structures,
>    * and defines must be prefixed with virtchnl2 or VIRTCHNL2 to avoid confusion.
> @@ -17,8 +19,6 @@
>    * must remain unchanged over time, so we specify explicit values for all enums.
>    */
>   
> -#include "virtchnl2_lan_desc.h"
> -
>   /* This macro is used to generate compilation errors if a structure
>    * is not exactly the correct length.
>    */

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Intel-wired-lan] [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
@ 2024-03-26 17:04     ` Gustavo A. R. Silva
  0 siblings, 0 replies; 18+ messages in thread
From: Gustavo A. R. Silva @ 2024-03-26 17:04 UTC (permalink / raw
  To: Alexander Lobakin, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, intel-wired-lan, linux-hardening, Simon Horman,
	nex.sw.ncis.osdt.itp.upstreaming



On 3/26/24 10:41, Alexander Lobakin wrote:
> To ease maintaining of virtchnl2.h, which already is messy enough,
> make it self-contained by adding missing if_ether.h include due to
> %ETH_ALEN usage.
> At the same time, virtchnl2_lan_desc.h is not used anywhere in the
> file, so remove this include to speed up C preprocessing.
> 
> Acked-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>

Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Thanks
-- 
Gustavo

> ---
>   drivers/net/ethernet/intel/idpf/virtchnl2.h | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/idpf/virtchnl2.h b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> index 4a3c4454d25a..29419211b3d9 100644
> --- a/drivers/net/ethernet/intel/idpf/virtchnl2.h
> +++ b/drivers/net/ethernet/intel/idpf/virtchnl2.h
> @@ -4,6 +4,8 @@
>   #ifndef _VIRTCHNL2_H_
>   #define _VIRTCHNL2_H_
>   
> +#include <linux/if_ether.h>
> +
>   /* All opcodes associated with virtchnl2 are prefixed with virtchnl2 or
>    * VIRTCHNL2. Any future opcodes, offloads/capabilities, structures,
>    * and defines must be prefixed with virtchnl2 or VIRTCHNL2 to avoid confusion.
> @@ -17,8 +19,6 @@
>    * must remain unchanged over time, so we specify explicit values for all enums.
>    */
>   
> -#include "virtchnl2_lan_desc.h"
> -
>   /* This macro is used to generate compilation errors if a structure
>    * is not exactly the correct length.
>    */

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
  2024-03-26 16:41   ` [Intel-wired-lan] " Alexander Lobakin
@ 2024-03-27  4:04     ` Jakub Kicinski
  -1 siblings, 0 replies; 18+ messages in thread
From: Jakub Kicinski @ 2024-03-27  4:04 UTC (permalink / raw
  To: Alexander Lobakin
  Cc: David S. Miller, Eric Dumazet, Paolo Abeni, Kees Cook,
	Gustavo A. R. Silva, Nathan Chancellor, Simon Horman,
	nex.sw.ncis.osdt.itp.upstreaming, intel-wired-lan,
	linux-hardening, netdev, linux-kernel

On Tue, 26 Mar 2024 17:41:15 +0100 Alexander Lobakin wrote:
> To ease maintaining of virtchnl2.h, which already is messy enough,
> make it self-contained by adding missing if_ether.h include due to
> %ETH_ALEN usage.
> At the same time, virtchnl2_lan_desc.h is not used anywhere in the
> file, so remove this include to speed up C preprocessing.

Breaks allmodconfig, it seems..
-- 
pw-bot: cr

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Intel-wired-lan] [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
@ 2024-03-27  4:04     ` Jakub Kicinski
  0 siblings, 0 replies; 18+ messages in thread
From: Jakub Kicinski @ 2024-03-27  4:04 UTC (permalink / raw
  To: Alexander Lobakin
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, Eric Dumazet, intel-wired-lan, linux-hardening,
	Simon Horman, nex.sw.ncis.osdt.itp.upstreaming, Paolo Abeni,
	David S. Miller

On Tue, 26 Mar 2024 17:41:15 +0100 Alexander Lobakin wrote:
> To ease maintaining of virtchnl2.h, which already is messy enough,
> make it self-contained by adding missing if_ether.h include due to
> %ETH_ALEN usage.
> At the same time, virtchnl2_lan_desc.h is not used anywhere in the
> file, so remove this include to speed up C preprocessing.

Breaks allmodconfig, it seems..
-- 
pw-bot: cr

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Intel-wired-lan] [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
  2024-03-27  4:04     ` [Intel-wired-lan] " Jakub Kicinski
@ 2024-03-27 14:17       ` Alexander Lobakin
  -1 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-27 14:17 UTC (permalink / raw
  To: Jakub Kicinski
  Cc: Kees Cook, netdev, Gustavo A. R. Silva, linux-kernel,
	Nathan Chancellor, Eric Dumazet, intel-wired-lan, linux-hardening,
	Simon Horman, nex.sw.ncis.osdt.itp.upstreaming, Paolo Abeni,
	David S. Miller

From: Jakub Kicinski <kuba@kernel.org>
Date: Tue, 26 Mar 2024 21:04:12 -0700

> On Tue, 26 Mar 2024 17:41:15 +0100 Alexander Lobakin wrote:
>> To ease maintaining of virtchnl2.h, which already is messy enough,
>> make it self-contained by adding missing if_ether.h include due to
>> %ETH_ALEN usage.
>> At the same time, virtchnl2_lan_desc.h is not used anywhere in the
>> file, so remove this include to speed up C preprocessing.
> 
> Breaks allmodconfig, it seems..

Oops, forgot one line and my night CI didn't notice anything...
Sending v2.

Thanks,
Olek

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Intel-wired-lan] [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained
@ 2024-03-27 14:17       ` Alexander Lobakin
  0 siblings, 0 replies; 18+ messages in thread
From: Alexander Lobakin @ 2024-03-27 14:17 UTC (permalink / raw
  To: Jakub Kicinski
  Cc: Kees Cook, netdev, linux-kernel, Gustavo A. R. Silva,
	Nathan Chancellor, Eric Dumazet, intel-wired-lan, linux-hardening,
	Simon Horman, nex.sw.ncis.osdt.itp.upstreaming, Paolo Abeni,
	David S. Miller

From: Jakub Kicinski <kuba@kernel.org>
Date: Tue, 26 Mar 2024 21:04:12 -0700

> On Tue, 26 Mar 2024 17:41:15 +0100 Alexander Lobakin wrote:
>> To ease maintaining of virtchnl2.h, which already is messy enough,
>> make it self-contained by adding missing if_ether.h include due to
>> %ETH_ALEN usage.
>> At the same time, virtchnl2_lan_desc.h is not used anywhere in the
>> file, so remove this include to speed up C preprocessing.
> 
> Breaks allmodconfig, it seems..

Oops, forgot one line and my night CI didn't notice anything...
Sending v2.

Thanks,
Olek

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2024-03-27 14:18 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-26 16:41 [PATCH net-next 0/3] compiler_types: add Endianness-dependent __counted_by_{le,be} Alexander Lobakin
2024-03-26 16:41 ` [Intel-wired-lan] [PATCH net-next 0/3] compiler_types: add Endianness-dependent __counted_by_{le, be} Alexander Lobakin
2024-03-26 16:41 ` [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le,be} Alexander Lobakin
2024-03-26 16:41   ` [Intel-wired-lan] [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le, be} Alexander Lobakin
2024-03-26 17:02   ` [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le,be} Gustavo A. R. Silva
2024-03-26 17:02     ` [Intel-wired-lan] [PATCH net-next 1/3] compiler_types: add Endianness-dependent __counted_by_{le, be} Gustavo A. R. Silva
2024-03-26 16:41 ` [PATCH net-next 2/3] idpf: make virtchnl2.h self-contained Alexander Lobakin
2024-03-26 16:41   ` [Intel-wired-lan] " Alexander Lobakin
2024-03-26 17:04   ` Gustavo A. R. Silva
2024-03-26 17:04     ` [Intel-wired-lan] " Gustavo A. R. Silva
2024-03-27  4:04   ` Jakub Kicinski
2024-03-27  4:04     ` [Intel-wired-lan] " Jakub Kicinski
2024-03-27 14:17     ` Alexander Lobakin
2024-03-27 14:17       ` Alexander Lobakin
2024-03-26 16:41 ` [PATCH net-next 3/3] idpf: sprinkle __counted_by{,_le}() in the virtchnl2 header Alexander Lobakin
2024-03-26 16:41   ` [Intel-wired-lan] [PATCH net-next 3/3] idpf: sprinkle __counted_by{, _le}() " Alexander Lobakin
2024-03-26 17:03   ` [PATCH net-next 3/3] idpf: sprinkle __counted_by{,_le}() " Gustavo A. R. Silva
2024-03-26 17:03     ` [Intel-wired-lan] [PATCH net-next 3/3] idpf: sprinkle __counted_by{, _le}() " Gustavo A. R. Silva

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.