Skip to content

Commit

Permalink
BACKPORT: Compiler Attributes: Add __pass_object_size for Clang
Browse files Browse the repository at this point in the history
In order to gain greater visibility to type information when using
__builtin_object_size(), Clang has a function attribute "pass_object_size"
that will make size information available for marked arguments in
a function by way of implicit additional function arguments that are
then wired up the __builtin_object_size().

This is needed to implement FORTIFY_SOURCE in Clang, as a workaround
to Clang's __builtin_object_size() having limited visibility[1] into types
across function calls (even inlines).

This attribute has an additional benefit that it can be used even on
non-inline functions to gain argument size information.

[1] llvm/llvm-project#53516

Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: llvm@lists.linux.dev
Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Link: https://lore.kernel.org/r/20220208225350.1331628-3-keescook@chromium.org
Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
Change-Id: I02cd8f92bcd829102498be5d9cc4ff7659879ca3
Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
Signed-off-by: Diaz1401 <reagor8161@outlook.com>
  • Loading branch information
kees authored and Diaz1401 committed Oct 17, 2023
1 parent eb6c660 commit e523bb7
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions include/linux/compiler-clang.h
Expand Up @@ -64,3 +64,10 @@
#else
# define __noscs
#endif

/*
* Note: the "type" argument should match any __builtin_object_size(p, type) usage.
*
* clang: https://clang.llvm.org/docs/AttributeReference.html#pass-object-size-pass-dynamic-object-size
*/
#define __pass_object_size(type) __attribute__((__pass_object_size__(type)))

0 comments on commit e523bb7

Please sign in to comment.