mirror of
https://github.com/torvalds/linux.git
synced 2026-09-27 11:02:03 +02:00
landlock: Work around gcc-16 -Wuninitialized warning
gcc has a bug with -ftrivial-auto-var-init=pattern that produces a
warning for correct code that uses sparse bitfields:
security/landlock/fs.c: In function 'is_access_to_paths_allowed.isra':
security/landlock/fs.c:767:28: error: '_layer_masks_child1' is used uninitialized [-Werror=uninitialized]
767 | struct layer_masks _layer_masks_child1, _layer_masks_child2;
| ^~~~~~~~~~~~~~~~~~~
security/landlock/fs.c:767:28: note: '_layer_masks_child1' declared here
767 | struct layer_masks _layer_masks_child1, _layer_masks_child2;
| ^~~~~~~~~~~~~~~~~~~
security/landlock/fs.c: In function 'hook_unix_find':
security/landlock/fs.c:1649:28: error: 'layer_masks' is used uninitialized [-Werror=uninitialized]
1649 | struct layer_masks layer_masks;
| ^~~~~~~~~~~
security/landlock/fs.c:1649:28: note: 'layer_masks' declared here
1649 | struct layer_masks layer_masks;
| ^~~~~~~~~~~
To work around this, change the definition of struct layer_mask to
use an explictit padding field.
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110743
Link: https://lore.kernel.org/all/20260619082133.3504146-1-arnd@kernel.org/
Fixes: a260c00556 ("landlock: Add a place for flags to layer rules")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://patch.msgid.link/20260915201036.3527935-1-arnd@kernel.org
[mic: Use BITS_PER_TYPE(), fix kdoc warnings, fix commit message
according to v2 changes]
Cc: stable@vger.kernel.org
Signed-off-by: Mickaël Salaün <mic@digikod.net>
This commit is contained in:
parent
fd73f4a665
commit
c4e941bb76
|
|
@ -61,6 +61,10 @@ union access_masks_all {
|
|||
static_assert(sizeof(typeof_member(union access_masks_all, masks)) ==
|
||||
sizeof(typeof_member(union access_masks_all, all)));
|
||||
|
||||
#define _LANDLOCK_LAYER_MASK_PADDING \
|
||||
(BITS_PER_TYPE(access_mask_t) - LANDLOCK_NUM_ACCESS_MAX - \
|
||||
IS_ENABLED(CONFIG_SECURITY_LANDLOCK_LOG))
|
||||
|
||||
/**
|
||||
* struct layer_mask - The access rights and rule flags for a layer.
|
||||
*
|
||||
|
|
@ -81,6 +85,10 @@ struct layer_mask {
|
|||
*/
|
||||
access_mask_t quiet : 1;
|
||||
#endif /* CONFIG_SECURITY_LANDLOCK_LOG */
|
||||
/**
|
||||
* @__pad: Padding for the compiler's bitfield initialization.
|
||||
*/
|
||||
access_mask_t __pad : _LANDLOCK_LAYER_MASK_PADDING;
|
||||
} __packed __aligned(sizeof(access_mask_t));
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user