]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: mac80211: add __packed to union members of struct ieee80211_rx_status
authorPing-Ke Shih <pkshih@realtek.com>
Sat, 11 Apr 2026 07:25:09 +0000 (15:25 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 28 Apr 2026 07:25:42 +0000 (09:25 +0200)
The arm-linux-gnueabi-gcc compiler, align the field followed by union
members, causing size of struct ieee80211_rx_status over skb->cb
(48 bytes). By investigation, the union member starts at offset 32,
and the offset of next field rate_idx is 36 instead of expected 33, and
the total size is (unexpected) 52.

When compiling rtw88 driver, it throws:

In file included from /work/linux-src/linux-stable/include/linux/string.h:386,
                 from /work/linux-src/linux-stable/include/linux/bitmap.h:13,
                 from /work/linux-src/linux-stable/include/linux/cpumask.h:11,
                 from /work/linux-src/linux-stable/include/linux/smp.h:13,
                 from /work/linux-src/linux-stable/include/linux/lockdep.h:14,
                 from /work/linux-src/linux-stable/include/linux/mutex.h:17,
                 from /work/linux-src/linux-stable/include/linux/kernfs.h:11,
                 from /work/linux-src/linux-stable/include/linux/sysfs.h:16,
                 from /work/linux-src/linux-stable/include/linux/kobject.h:20,
                 from /work/linux-src/linux-stable/include/linux/dmi.h:6,
                 from pci.c:5:
In function 'fortify_memcpy_chk',
    inlined from 'rtw_pci_rx_napi.constprop' at pci.c:1095:4:
/work/linux-src/linux-stable/include/linux/fortify-string.h:569:25: warning: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Wattribute-warning]
  569 |                         __write_overflow_field(p_size_field, size);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

After this patch, the size of struct ieee80211_rx_status is 48.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20260411072509.1556635-1-pkshih@realtek.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h

index 40cb20d9309c0e29e82a78a8301cc3a90d2cde5c..02318a4be0e1ae6964c703ddc5a7f04eb0e497cb 100644 (file)
@@ -1747,18 +1747,18 @@ struct ieee80211_rx_status {
                        u8 he_ru:3;
                        u8 he_gi:2;
                        u8 he_dcm:1;
-               };
+               } __packed;
                struct {
                        u8 ru:4;
                        u8 gi:2;
-               } eht;
+               } __packed eht;
                struct {
                        u8 ru:4;
                        u8 gi:2;
                        u8 elr:1;
                        u8 im:1;
-               } uhr;
-       };
+               } __packed uhr;
+       } __packed;
        u8 rate_idx;
        u8 nss;
        u8 rx_flags;
@@ -1771,6 +1771,8 @@ struct ieee80211_rx_status {
        u8 link_valid:1, link_id:4;
 };
 
+static_assert(sizeof(struct ieee80211_rx_status) <= sizeof_field(struct sk_buff, cb));
+
 static inline u32
 ieee80211_rx_status_to_khz(struct ieee80211_rx_status *rx_status)
 {