All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Günther Noack" <gnoack@google.com>
To: kernel test robot <lkp@intel.com>
Cc: "Günther Noack" <gnoack3000@gmail.com>,
	oe-kbuild-all@lists.linux.dev, "Mickaël Salaün" <mic@digikod.net>
Subject: Re: [mic:next 16/24] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(typeof_member(union access_masks_all, masks)) == sizeof(typeof_member(union access_masks_all, all))"
Date: Thu, 26 Mar 2026 14:10:27 +0100	[thread overview]
Message-ID: <acUwQ1AMUjwaHL7G@google.com> (raw)
In-Reply-To: <202603261438.jBx2DGNe-lkp@intel.com>

On Thu, Mar 26, 2026 at 02:42:56PM +0800, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mic/linux.git next
> head:   42d105958e98c6ae8fd6d62b38727444d25e735d
> commit: 8dcfb7e52f844e73413d7f743945e135747a1048 [16/24] landlock: Control pathname UNIX domain socket resolution by path
> config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20260326/202603261438.jBx2DGNe-lkp@intel.com/config)
> compiler: m68k-linux-gcc (GCC) 15.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260326/202603261438.jBx2DGNe-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202603261438.jBx2DGNe-lkp@intel.com/
> 
> All errors (new ones prefixed by >>):
> 
>    In file included from include/linux/bits.h:30,
>                     from security/landlock/setup.c:9:
> >> include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(typeof_member(union access_masks_all, masks)) == sizeof(typeof_member(union access_masks_all, all))"
>       78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
>          |                                         ^~~~~~~~~~~~~~
>    include/linux/build_bug.h:77:34: note: in expansion of macro '__static_assert'
>       77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
>          |                                  ^~~~~~~~~~~~~~~
>    security/landlock/access.h:61:1: note: in expansion of macro 'static_assert'
>       61 | static_assert(sizeof(typeof_member(union access_masks_all, masks)) ==
>          | ^~~~~~~~~~~~~
> 
> 
> vim +78 include/linux/build_bug.h
> 
> bc6245e5efd70c Ian Abbott       2017-07-10  60  
> 6bab69c65013be Rasmus Villemoes 2019-03-07  61  /**
> 6bab69c65013be Rasmus Villemoes 2019-03-07  62   * static_assert - check integer constant expression at build time
> 6bab69c65013be Rasmus Villemoes 2019-03-07  63   *
> 6bab69c65013be Rasmus Villemoes 2019-03-07  64   * static_assert() is a wrapper for the C11 _Static_assert, with a
> 6bab69c65013be Rasmus Villemoes 2019-03-07  65   * little macro magic to make the message optional (defaulting to the
> 6bab69c65013be Rasmus Villemoes 2019-03-07  66   * stringification of the tested expression).
> 6bab69c65013be Rasmus Villemoes 2019-03-07  67   *
> 6bab69c65013be Rasmus Villemoes 2019-03-07  68   * Contrary to BUILD_BUG_ON(), static_assert() can be used at global
> 6bab69c65013be Rasmus Villemoes 2019-03-07  69   * scope, but requires the expression to be an integer constant
> 6bab69c65013be Rasmus Villemoes 2019-03-07  70   * expression (i.e., it is not enough that __builtin_constant_p() is
> 6bab69c65013be Rasmus Villemoes 2019-03-07  71   * true for expr).
> 6bab69c65013be Rasmus Villemoes 2019-03-07  72   *
> 6bab69c65013be Rasmus Villemoes 2019-03-07  73   * Also note that BUILD_BUG_ON() fails the build if the condition is
> 6bab69c65013be Rasmus Villemoes 2019-03-07  74   * true, while static_assert() fails the build if the expression is
> 6bab69c65013be Rasmus Villemoes 2019-03-07  75   * false.
> 6bab69c65013be Rasmus Villemoes 2019-03-07  76   */
> 6bab69c65013be Rasmus Villemoes 2019-03-07  77  #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
> 6bab69c65013be Rasmus Villemoes 2019-03-07 @78  #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
> 6bab69c65013be Rasmus Villemoes 2019-03-07  79  
> 07a368b3f55a79 Maxim Levitsky   2022-10-25  80  
> 
> :::::: The code at line 78 was first introduced by commit
> :::::: 6bab69c65013bed5fce9f101a64a84d0385b3946 build_bug.h: add wrapper for _Static_assert
> 
> :::::: TO: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> :::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki

Hmm, intuitively, it might have been introduced by the Unix Connect
Control patch set which was recently added to mic-next:

https://git.kernel.org/pub/scm/linux/kernel/git/mic/linux.git/commit/?h=next&id=8dcfb7e52f844e73413d7f743945e135747a1048

m68k is a 32-bit architecture.

We are introducing the 17th filesystem access bit, and changing the
size of access_mask_t from u16 to u32 there,

The relevant code is:

```
/* Ruleset access masks. */
struct access_masks {
	access_mask_t fs : LANDLOCK_NUM_ACCESS_FS;    /* 17 */
	access_mask_t net : LANDLOCK_NUM_ACCESS_NET;  /*  2 */
	access_mask_t scope : LANDLOCK_NUM_SCOPE;     /*  2 */
};

union access_masks_all {
	struct access_masks masks;
	u32 all;
};

/* Makes sure all fields are covered. */
static_assert(sizeof(typeof_member(union access_masks_all, masks)) ==
	      sizeof(typeof_member(union access_masks_all, all)));
```

Intuitively, it is not clear why that static assertion suddenly fails;
17+2+2 is still well below 32.  I see that the C standard does not
give strong guarantees about the memory layout of this, though.

I'll need to have a closer look later. I can imagine that there is an
attribute or such that will hint the compiler to pack these bits
tighter.

—Günther

      reply	other threads:[~2026-03-26 13:10 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-26  6:42 [mic:next 16/24] include/linux/build_bug.h:78:41: error: static assertion failed: "sizeof(typeof_member(union access_masks_all, masks)) == sizeof(typeof_member(union access_masks_all, all))" kernel test robot
2026-03-26 13:10 ` Günther Noack [this message]

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=acUwQ1AMUjwaHL7G@google.com \
    --to=gnoack@google.com \
    --cc=gnoack3000@gmail.com \
    --cc=lkp@intel.com \
    --cc=mic@digikod.net \
    --cc=oe-kbuild-all@lists.linux.dev \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.