Skip to content

Commit

Permalink
compiler.h: Move C string helpers into C-only kernel section
Browse files Browse the repository at this point in the history
The C kernel helpers for evaluating C Strings were positioned where they
were visible to assembly inclusion, which was not intended. Move them
into the kernel and C-only area of the header so future changes won't
confuse the assembler.

Fixes: d7a516c ("compiler.h: Fix undefined BUILD_BUG_ON_ZERO()")
Fixes: 559048d ("string: Check for "nonstring" attribute on strscpy() arguments")
Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Kees Cook <kees@kernel.org>
  • Loading branch information
Kees Cook committed Feb 7, 2025
1 parent 78bba60 commit cb7380d
Showing 1 changed file with 13 additions and 13 deletions.
26 changes: 13 additions & 13 deletions include/linux/compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,19 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
__v; \
})

#ifdef __CHECKER__
#define __BUILD_BUG_ON_ZERO_MSG(e, msg) (0)
#else /* __CHECKER__ */
#define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);}))
#endif /* __CHECKER__ */

/* &a[0] degrades to a pointer: a different type from an array */
#define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(__same_type((a), &(a)[0]), "must be array")

/* Require C Strings (i.e. NUL-terminated) lack the "nonstring" attribute. */
#define __must_be_cstr(p) \
__BUILD_BUG_ON_ZERO_MSG(__annotated(p, nonstring), "must be cstr (NUL-terminated)")

#endif /* __KERNEL__ */

/**
Expand Down Expand Up @@ -254,19 +267,6 @@ static inline void *offset_to_ptr(const int *off)

#define __ADDRESSABLE_ASM_STR(sym) __stringify(__ADDRESSABLE_ASM(sym))

#ifdef __CHECKER__
#define __BUILD_BUG_ON_ZERO_MSG(e, msg) (0)
#else /* __CHECKER__ */
#define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);}))
#endif /* __CHECKER__ */

/* &a[0] degrades to a pointer: a different type from an array */
#define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(__same_type((a), &(a)[0]), "must be array")

/* Require C Strings (i.e. NUL-terminated) lack the "nonstring" attribute. */
#define __must_be_cstr(p) \
__BUILD_BUG_ON_ZERO_MSG(__annotated(p, nonstring), "must be cstr (NUL-terminated)")

/*
* This returns a constant expression while determining if an argument is
* a constant expression, most importantly without evaluating the argument.
Expand Down

0 comments on commit cb7380d

Please sign in to comment.