Skip to content

Commit

Permalink
gcc-plugins: randstruct: Only warn about true flexible arrays
Browse files Browse the repository at this point in the history
[ Upstream commit 1ee6035 ]

The randstruct GCC plugin tried to discover "fake" flexible arrays
to issue warnings about them in randomized structs. In the future
LSM overhead reduction series, it would be legal to have a randomized
struct with a 1-element array, and this should _not_ be treated as a
flexible array, especially since commit df8fc4e ("kbuild: Enable
-fstrict-flex-arrays=3"). Disable the 0-sized and 1-element array
discovery logic in the plugin, but keep the "true" flexible array check.

Cc: KP Singh <kpsingh@kernel.org>
Cc: linux-hardening@vger.kernel.org
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202311021532.iBwuZUZ0-lkp@intel.com/
Fixes: df8fc4e ("kbuild: Enable -fstrict-flex-arrays=3")
Reviewed-by: Bill Wendling <morbo@google.com>
Acked-by: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Link: https://lore.kernel.org/r/20231104204334.work.160-kees@kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
kees authored and gregkh committed Nov 28, 2023
1 parent ae8ea4e commit 9aea191
Showing 1 changed file with 0 additions and 10 deletions.
10 changes: 0 additions & 10 deletions scripts/gcc-plugins/randomize_layout_plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,29 +273,19 @@ static bool is_flexible_array(const_tree field)
{
const_tree fieldtype;
const_tree typesize;
const_tree elemtype;
const_tree elemsize;

fieldtype = TREE_TYPE(field);
typesize = TYPE_SIZE(fieldtype);

if (TREE_CODE(fieldtype) != ARRAY_TYPE)
return false;

elemtype = TREE_TYPE(fieldtype);
elemsize = TYPE_SIZE(elemtype);

/* size of type is represented in bits */

if (typesize == NULL_TREE && TYPE_DOMAIN(fieldtype) != NULL_TREE &&
TYPE_MAX_VALUE(TYPE_DOMAIN(fieldtype)) == NULL_TREE)
return true;

if (typesize != NULL_TREE &&
(TREE_CONSTANT(typesize) && (!tree_to_uhwi(typesize) ||
tree_to_uhwi(typesize) == tree_to_uhwi(elemsize))))
return true;

return false;
}

Expand Down

0 comments on commit 9aea191

Please sign in to comment.