LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: linux-hardening@vger.kernel.org,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
Keith Packard <keithpac@amazon.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org,
netdev@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-staging@lists.linux.dev, linux-block@vger.kernel.org,
linux-kbuild@vger.kernel.org, clang-built-linux@googlegroups.com
Subject: Re: [PATCH 02/64] mac80211: Use flex-array for radiotap header bitmap
Date: Wed, 28 Jul 2021 14:20:56 -0700 [thread overview]
Message-ID: <202107281407.52EA0088@keescook> (raw)
In-Reply-To: <20210728073556.GP1931@kadam>
On Wed, Jul 28, 2021 at 10:35:56AM +0300, Dan Carpenter wrote:
> On Tue, Jul 27, 2021 at 01:57:53PM -0700, Kees Cook wrote:
> > In preparation for FORTIFY_SOURCE performing compile-time and run-time
> > field bounds checking for memcpy(), memmove(), and memset(), avoid
> > intentionally writing across neighboring fields.
> >
> > The it_present member of struct ieee80211_radiotap_header is treated as a
> > flexible array (multiple u32s can be conditionally present). In order for
> > memcpy() to reason (or really, not reason) about the size of operations
> > against this struct, use of bytes beyond it_present need to be treated
> > as part of the flexible array. Add a union/struct to contain the new
> > "bitmap" member, for use with trailing presence bitmaps and arguments.
> >
> > Additionally improve readability in the iterator code which walks
> > through the bitmaps and arguments.
> >
> > Signed-off-by: Kees Cook <keescook@chromium.org>
> > ---
> > include/net/ieee80211_radiotap.h | 24 ++++++++++++++++++++----
> > net/mac80211/rx.c | 2 +-
> > net/wireless/radiotap.c | 5 ++---
> > 3 files changed, 23 insertions(+), 8 deletions(-)
> >
> > diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h
> > index c0854933e24f..101c1e961032 100644
> > --- a/include/net/ieee80211_radiotap.h
> > +++ b/include/net/ieee80211_radiotap.h
> > @@ -39,10 +39,26 @@ struct ieee80211_radiotap_header {
> > */
> > __le16 it_len;
> >
> > - /**
> > - * @it_present: (first) present word
> > - */
> > - __le32 it_present;
> > + union {
> > + /**
> > + * @it_present: (first) present word
> > + */
> > + __le32 it_present;
> > +
> > + struct {
> > + /* The compiler makes it difficult to overlap
> > + * a flex-array with an existing singleton,
> > + * so we're forced to add an empty named
> > + * variable here.
> > + */
> > + struct { } __unused;
> > +
> > + /**
> > + * @bitmap: all presence bitmaps
> > + */
> > + __le32 bitmap[];
> > + };
> > + };
> > } __packed;
>
> This patch is so confusing...
Yeah, I agree. I tried a few ways, and was unhappy with all of them. :P
>
> Btw, after the end of the __le32 data there is a bunch of other le64,
> u8 and le16 data so the struct is not accurate or complete.
>
> It might be better to re-write this as something like this:
>
> diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h
> index c0854933e24f..0cb5719e9668 100644
> --- a/include/net/ieee80211_radiotap.h
> +++ b/include/net/ieee80211_radiotap.h
> @@ -42,7 +42,10 @@ struct ieee80211_radiotap_header {
> /**
> * @it_present: (first) present word
> */
> - __le32 it_present;
> + struct {
> + __le32 it_present;
> + char buff[];
> + } data;
> } __packed;
Hm, yes, I can try this. I attempted something similar without the
"only a struct" part; I was trying to avoid the identifier churn, but I
guess seeing it again, it's not _that_ bad. :P
>
> /* version is always 0 */
> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> index 771921c057e8..9cc891364a07 100644
> --- a/net/mac80211/rx.c
> +++ b/net/mac80211/rx.c
> @@ -328,7 +328,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
>
> rthdr = skb_push(skb, rtap_len);
> memset(rthdr, 0, rtap_len - rtap.len - rtap.pad);
> - it_present = &rthdr->it_present;
> + it_present = (__le32 *)&rthdr->data;
Hm, interesting way to avoid angering the compiler during the later
it_present++ updates. This is subtle ... a passer-by may not understand
why this isn't just "it_present = &rthdr->data.it_present".
I think this is okay with a comment added. I'll give this a spin.
Thanks!
-Kees
>
> /* radiotap header, set always present flags */
> rthdr->it_len = cpu_to_le16(rtap_len);
> @@ -372,7 +372,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> ieee80211_calculate_rx_timestamp(local, status,
> mpdulen, 0),
> pos);
> - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_TSFT);
> + rthdr->data.it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_TSFT);
> pos += 8;
> }
>
> @@ -396,7 +396,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> *pos = 0;
> } else {
> int shift = 0;
> - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
> + rthdr->data.it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
> if (status->bw == RATE_INFO_BW_10)
> shift = 1;
> else if (status->bw == RATE_INFO_BW_5)
> @@ -432,7 +432,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> if (ieee80211_hw_check(&local->hw, SIGNAL_DBM) &&
> !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
> *pos = status->signal;
> - rthdr->it_present |=
> + rthdr->data.it_present |=
> cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
> pos++;
> }
> @@ -459,7 +459,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> if (status->encoding == RX_ENC_HT) {
> unsigned int stbc;
>
> - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
> + rthdr->data.it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
> *pos++ = local->hw.radiotap_mcs_details;
> *pos = 0;
> if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
> @@ -482,7 +482,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> /* ensure 4 byte alignment */
> while ((pos - (u8 *)rthdr) & 3)
> pos++;
> - rthdr->it_present |=
> + rthdr->data.it_present |=
> cpu_to_le32(1 << IEEE80211_RADIOTAP_AMPDU_STATUS);
> put_unaligned_le32(status->ampdu_reference, pos);
> pos += 4;
> @@ -510,7 +510,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> if (status->encoding == RX_ENC_VHT) {
> u16 known = local->hw.radiotap_vht_details;
>
> - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_VHT);
> + rthdr->data.it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_VHT);
> put_unaligned_le16(known, pos);
> pos += 2;
> /* flags */
> @@ -553,7 +553,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> u16 accuracy = 0;
> u8 flags = IEEE80211_RADIOTAP_TIMESTAMP_FLAG_32BIT;
>
> - rthdr->it_present |=
> + rthdr->data.it_present |=
> cpu_to_le32(1 << IEEE80211_RADIOTAP_TIMESTAMP);
>
> /* ensure 8 byte alignment */
> @@ -642,7 +642,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> /* ensure 2 byte alignment */
> while ((pos - (u8 *)rthdr) & 1)
> pos++;
> - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_HE);
> + rthdr->data.it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_HE);
> memcpy(pos, &he, sizeof(he));
> pos += sizeof(he);
> }
> @@ -652,13 +652,13 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> /* ensure 2 byte alignment */
> while ((pos - (u8 *)rthdr) & 1)
> pos++;
> - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_HE_MU);
> + rthdr->data.it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_HE_MU);
> memcpy(pos, &he_mu, sizeof(he_mu));
> pos += sizeof(he_mu);
> }
>
> if (status->flag & RX_FLAG_NO_PSDU) {
> - rthdr->it_present |=
> + rthdr->data.it_present |=
> cpu_to_le32(1 << IEEE80211_RADIOTAP_ZERO_LEN_PSDU);
> *pos++ = status->zero_length_psdu_type;
> }
> @@ -667,7 +667,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
> /* ensure 2 byte alignment */
> while ((pos - (u8 *)rthdr) & 1)
> pos++;
> - rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_LSIG);
> + rthdr->data.it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_LSIG);
> memcpy(pos, &lsig, sizeof(lsig));
> pos += sizeof(lsig);
> }
> diff --git a/net/wireless/radiotap.c b/net/wireless/radiotap.c
> index 36f1b59a78bf..f7852024c011 100644
> --- a/net/wireless/radiotap.c
> +++ b/net/wireless/radiotap.c
> @@ -114,11 +114,10 @@ int ieee80211_radiotap_iterator_init(
> iterator->_rtheader = radiotap_header;
> iterator->_max_length = get_unaligned_le16(&radiotap_header->it_len);
> iterator->_arg_index = 0;
> - iterator->_bitmap_shifter = get_unaligned_le32(&radiotap_header->it_present);
> + iterator->_bitmap_shifter = get_unaligned_le32(&radiotap_header->data.it_present);
> iterator->_arg = (uint8_t *)radiotap_header + sizeof(*radiotap_header);
> iterator->_reset_on_ext = 0;
> - iterator->_next_bitmap = &radiotap_header->it_present;
> - iterator->_next_bitmap++;
> + iterator->_next_bitmap = (__le32 *)&radiotap_header->data.buff;
> iterator->_vns = vns;
> iterator->current_namespace = &radiotap_ns;
> iterator->is_radiotap_ns = 1;
--
Kees Cook
next prev parent reply other threads:[~2021-07-28 21:21 UTC|newest]
Thread overview: 158+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-27 20:57 [PATCH 00/64] Introduce strict memcpy() bounds checking Kees Cook
2021-07-27 20:57 ` [PATCH 01/64] media: omap3isp: Extract struct group for memcpy() region Kees Cook
2021-07-28 0:55 ` Gustavo A. R. Silva
2021-07-28 1:50 ` Kees Cook
2021-07-28 8:59 ` David Sterba
2021-07-28 9:14 ` Dan Carpenter
2021-07-28 21:37 ` Bart Van Assche
2021-07-28 21:37 ` David Sterba
2021-07-29 5:56 ` Greg Kroah-Hartman
2021-07-29 8:20 ` Dan Carpenter
2021-07-30 6:00 ` Kees Cook
2021-07-30 8:38 ` David Sterba
2021-07-30 9:00 ` Dan Carpenter
2021-07-30 16:44 ` Kees Cook
2021-07-30 17:08 ` Nick Desaulniers
2021-07-30 19:18 ` Kees Cook
2021-07-27 20:57 ` [PATCH 02/64] mac80211: Use flex-array for radiotap header bitmap Kees Cook
2021-07-28 7:35 ` Dan Carpenter
2021-07-28 9:23 ` David Sterba
2021-07-28 21:54 ` Kees Cook
2021-07-29 10:45 ` David Sterba
2021-07-30 6:06 ` Kees Cook
2021-07-28 21:20 ` Kees Cook [this message]
2021-07-28 23:14 ` Kees Cook
2021-07-28 23:33 ` Kees Cook
2021-07-29 8:25 ` Dan Carpenter
2021-07-27 20:57 ` [PATCH 03/64] rpmsg: glink: Replace strncpy() with strscpy_pad() Kees Cook
2021-07-28 2:07 ` Gustavo A. R. Silva
2021-07-27 20:57 ` [PATCH 04/64] stddef: Introduce struct_group() helper macro Kees Cook
2021-07-28 2:32 ` Gustavo A. R. Silva
2021-07-28 10:54 ` Rasmus Villemoes
2021-07-28 21:59 ` Kees Cook
2021-07-30 22:19 ` Williams, Dan J
2021-07-31 2:59 ` Kees Cook
[not found] ` <CAKwiHFheDv2pwsm6Fa+-KnOFyvk7bfZQjb2BQ-CSwH61gxgVYg@mail.gmail.com>
2021-07-31 15:10 ` Kees Cook
2021-07-27 20:57 ` [PATCH 05/64] skbuff: Switch structure bounds to struct_group() Kees Cook
2021-07-28 3:50 ` Gustavo A. R. Silva
2021-07-27 20:57 ` [PATCH 06/64] bnxt_en: Use struct_group_attr() for memcpy() region Kees Cook
2021-07-28 1:03 ` Michael Chan
2021-07-28 4:45 ` Gustavo A. R. Silva
2021-07-27 20:57 ` [PATCH 07/64] staging: rtl8192e: Use struct_group() " Kees Cook
2021-07-27 22:30 ` Larry Finger
2021-07-28 5:45 ` Greg Kroah-Hartman
2021-07-27 20:57 ` [PATCH 08/64] staging: rtl8192u: " Kees Cook
2021-07-28 5:45 ` Greg Kroah-Hartman
2021-07-27 20:58 ` [PATCH 09/64] staging: rtl8723bs: Avoid field-overflowing memcpy() Kees Cook
2021-07-28 5:46 ` Greg Kroah-Hartman
2021-07-27 20:58 ` [PATCH 10/64] lib80211: Use struct_group() for memcpy() region Kees Cook
2021-07-28 5:52 ` Greg Kroah-Hartman
2021-08-13 8:04 ` Johannes Berg
2021-08-13 15:49 ` Kees Cook
2021-08-13 19:44 ` Johannes Berg
2021-07-27 20:58 ` [PATCH 11/64] net/mlx5e: Avoid field-overflowing memcpy() Kees Cook
2021-07-27 20:58 ` [PATCH 12/64] mwl8k: Use struct_group() for memcpy() region Kees Cook
2021-07-27 20:58 ` [PATCH 13/64] libertas: " Kees Cook
2021-07-27 20:58 ` [PATCH 14/64] libertas_tf: " Kees Cook
2021-07-27 20:58 ` [PATCH 15/64] ipw2x00: " Kees Cook
2021-07-28 18:55 ` Stanislav Yakovlev
2021-07-27 20:58 ` [PATCH 16/64] thermal: intel: int340x_thermal: " Kees Cook
2021-07-27 20:58 ` [PATCH 17/64] iommu/amd: " Kees Cook
2021-07-27 20:58 ` [PATCH 18/64] cxgb3: " Kees Cook
2021-07-27 20:58 ` [PATCH 19/64] ip: Use struct_group() for memcpy() regions Kees Cook
2021-07-28 5:55 ` Greg Kroah-Hartman
2021-07-28 6:14 ` Gustavo A. R. Silva
2021-07-28 6:19 ` Greg Kroah-Hartman
2021-07-28 6:31 ` Gustavo A. R. Silva
2021-07-28 6:37 ` Gustavo A. R. Silva
2021-07-28 6:41 ` Greg Kroah-Hartman
2021-07-28 21:01 ` Kees Cook
2021-07-29 1:59 ` Bart Van Assche
2021-07-27 20:58 ` [PATCH 20/64] intersil: Use struct_group() for memcpy() region Kees Cook
2021-07-27 20:58 ` [PATCH 21/64] cxgb4: " Kees Cook
2021-07-27 20:58 ` [PATCH 22/64] bnx2x: " Kees Cook
2021-07-27 20:58 ` [PATCH 23/64] drm/amd/pm: " Kees Cook
2021-07-30 2:07 ` Alex Deucher
2021-07-27 20:58 ` [PATCH 24/64] staging: wlan-ng: " Kees Cook
2021-07-28 5:45 ` Greg Kroah-Hartman
2021-07-27 20:58 ` [PATCH 25/64] drm/mga/mga_ioc32: " Kees Cook
2021-07-28 5:56 ` Greg Kroah-Hartman
2021-07-29 12:11 ` Daniel Vetter
2021-07-31 4:20 ` Kees Cook
2021-07-27 20:58 ` [PATCH 26/64] net/mlx5e: " Kees Cook
2021-07-27 20:58 ` [PATCH 27/64] HID: cp2112: " Kees Cook
2021-07-27 20:58 ` [PATCH 28/64] compiler_types.h: Remove __compiletime_object_size() Kees Cook
2021-07-27 20:58 ` [PATCH 29/64] lib/string: Move helper functions out of string.c Kees Cook
2021-07-27 20:58 ` [PATCH 30/64] fortify: Move remaining fortify helpers into fortify-string.h Kees Cook
2021-07-27 20:58 ` [PATCH 31/64] fortify: Explicitly disable Clang support Kees Cook
2021-07-27 21:18 ` Nathan Chancellor
2021-07-27 21:47 ` Kees Cook
2021-07-27 20:58 ` [PATCH 32/64] fortify: Add compile-time FORTIFY_SOURCE tests Kees Cook
2021-07-27 20:58 ` [PATCH 33/64] lib: Introduce CONFIG_TEST_MEMCPY Kees Cook
2021-07-27 23:31 ` Bart Van Assche
2021-07-27 23:33 ` Randy Dunlap
2021-07-28 1:30 ` Kees Cook
2021-07-27 20:58 ` [PATCH 34/64] fortify: Detect struct member overflows in memcpy() at compile-time Kees Cook
2021-07-27 22:43 ` Nick Desaulniers
2021-07-28 1:47 ` Kees Cook
2021-07-28 11:19 ` Rasmus Villemoes
2021-07-30 2:39 ` Kees Cook
2021-07-27 20:58 ` [PATCH 35/64] fortify: Detect struct member overflows in memmove() " Kees Cook
2021-07-27 20:58 ` [PATCH 36/64] scsi: ibmvscsi: Avoid multi-field memset() overflow by aiming at srp Kees Cook
2021-07-28 1:39 ` Martin K. Petersen
2021-07-28 18:57 ` Kees Cook
2021-07-29 3:35 ` Martin K. Petersen
2021-07-30 19:11 ` Tyrel Datwyler
2021-07-30 18:16 ` Tyrel Datwyler
2021-07-27 20:58 ` [PATCH 37/64] string.h: Introduce memset_after() for wiping trailing members/padding Kees Cook
2021-07-27 20:58 ` [PATCH 38/64] xfrm: Use memset_after() to clear padding Kees Cook
2021-07-27 20:58 ` [PATCH 39/64] mac80211: Use memset_after() to clear tx status Kees Cook
2021-07-31 15:55 ` Kees Cook
2021-08-13 7:40 ` Johannes Berg
2021-08-13 16:08 ` Kees Cook
2021-08-13 18:19 ` Johannes Berg
2021-08-13 7:41 ` Johannes Berg
2021-07-27 20:58 ` [PATCH 40/64] net: 802: Use memset_after() to clear struct fields Kees Cook
2021-07-27 20:58 ` [PATCH 41/64] net: dccp: Use memset_after() for TP zeroing Kees Cook
2021-07-27 20:58 ` [PATCH 42/64] net: qede: Use memset_after() for counters Kees Cook
2021-07-31 16:07 ` Kees Cook
2021-07-27 20:58 ` [PATCH 43/64] ath11k: Use memset_after() for clearing queue descriptors Kees Cook
2021-07-27 20:58 ` [PATCH 44/64] iw_cxgb4: Use memset_after() for cpl_t5_pass_accept_rpl Kees Cook
2021-07-27 20:58 ` [PATCH 45/64] intel_th: msu: Use memset_after() for clearing hw header Kees Cook
2021-07-27 20:58 ` [PATCH 46/64] IB/mthca: Use memset_after() for clearing mpt_entry Kees Cook
2021-07-27 20:58 ` [PATCH 47/64] btrfs: Use memset_after() to clear end of struct Kees Cook
2021-07-28 9:42 ` David Sterba
2021-07-28 21:56 ` Kees Cook
2021-07-29 10:33 ` David Sterba
2021-07-31 15:25 ` Kees Cook
2021-08-09 11:20 ` David Sterba
2021-07-27 20:58 ` [PATCH 48/64] drbd: Use struct_group() to zero algs Kees Cook
2021-07-28 21:45 ` Bart Van Assche
2021-07-30 2:31 ` Kees Cook
2021-07-30 2:57 ` Bart Van Assche
2021-07-30 9:25 ` Lars Ellenberg
2021-07-30 15:32 ` Nick Desaulniers
2021-07-27 20:58 ` [PATCH 49/64] cm4000_cs: Use struct_group() to zero struct cm4000_dev region Kees Cook
2021-07-28 5:48 ` Greg Kroah-Hartman
2021-07-27 20:58 ` [PATCH 50/64] KVM: x86: Use struct_group() to zero decode cache Kees Cook
2021-07-27 20:58 ` [PATCH 51/64] tracing: Use struct_group() to zero struct trace_iterator Kees Cook
2021-07-27 20:58 ` [PATCH 52/64] dm integrity: Use struct_group() to zero struct journal_sector Kees Cook
2021-07-27 20:58 ` [PATCH 53/64] HID: roccat: Use struct_group() to zero kone_mouse_event Kees Cook
2021-07-27 20:58 ` [PATCH 54/64] ipv6: Use struct_group() to zero rt6_info Kees Cook
2021-07-29 18:58 ` Jakub Kicinski
2021-07-31 15:01 ` Kees Cook
2021-07-27 20:58 ` [PATCH 55/64] RDMA/mlx5: Use struct_group() to zero struct mlx5_ib_mr Kees Cook
2021-07-27 20:58 ` [PATCH 56/64] ethtool: stats: Use struct_group() to clear all stats at once Kees Cook
2021-07-27 20:58 ` [PATCH 57/64] netfilter: conntrack: Use struct_group() to zero struct nf_conn Kees Cook
2021-07-27 20:58 ` [PATCH 58/64] powerpc: Split memset() to avoid multi-field overflow Kees Cook
2021-08-05 11:36 ` Michael Ellerman
2021-07-27 20:58 ` [PATCH 59/64] fortify: Detect struct member overflows in memset() at compile-time Kees Cook
2021-07-27 20:58 ` [PATCH 60/64] fortify: Work around Clang inlining bugs Kees Cook
2021-07-27 20:58 ` [PATCH 61/64] Makefile: Enable -Warray-bounds Kees Cook
2021-07-27 20:58 ` [PATCH 62/64] netlink: Avoid false-positive memcpy() warning Kees Cook
2021-07-28 5:49 ` Greg Kroah-Hartman
2021-07-28 11:24 ` Rasmus Villemoes
2021-07-30 1:39 ` Kees Cook
2021-07-30 1:41 ` Kees Cook
2021-07-27 20:58 ` [PATCH 63/64] iwlwifi: dbg_ini: Split memcpy() to avoid multi-field write Kees Cook
2021-07-27 20:58 ` [PATCH 64/64] fortify: Add run-time WARN for cross-field memcpy() Kees Cook
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202107281407.52EA0088@keescook \
--to=keescook@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=clang-built-linux@googlegroups.com \
--cc=dan.carpenter@oracle.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=gustavoars@kernel.org \
--cc=keithpac@amazon.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-staging@lists.linux.dev \
--cc=linux-wireless@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--subject='Re: [PATCH 02/64] mac80211: Use flex-array for radiotap header bitmap' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).