compiler.h, kasan: Avoid duplicating __read_once_size_nocheck() [Linux 4.9.187]

This Linux kernel change "compiler.h, kasan: Avoid duplicating __read_once_size_nocheck()" is included in the Linux 4.9.187 release. This change is authored by Andrey Ryabinin <aryabinin [at] virtuozzo.com> on Thu Feb 1 21:00:48 2018 +0300. The commit for this change in Linux stable tree is 229b670 (patch) which is from upstream commit bdb5ac8. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream bdb5ac8.

compiler.h, kasan: Avoid duplicating __read_once_size_nocheck()

[ Upstream commit bdb5ac801af3d81d36732c2f640d6a1d3df83826 ]

Instead of having two identical __read_once_size_nocheck() functions
with different attributes, consolidate all the difference in new macro
__no_kasan_or_inline and use it. No functional changes.

Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>

There are 14 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 include/linux/compiler.h | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 80a5bc6..ced454c 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -250,23 +250,21 @@ void __read_once_size(const volatile void *p, void *res, int size)

 #ifdef CONFIG_KASAN
 /*
- * This function is not 'inline' because __no_sanitize_address confilcts
+ * We can't declare function 'inline' because __no_sanitize_address confilcts
  * with inlining. Attempt to inline it may cause a build failure.
  *     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
  * '__maybe_unused' allows us to avoid defined-but-not-used warnings.
  */
-static __no_sanitize_address __maybe_unused
-void __read_once_size_nocheck(const volatile void *p, void *res, int size)
-{
-   __READ_ONCE_SIZE;
-}
+# define __no_kasan_or_inline __no_sanitize_address __maybe_unused
 #else
-static __always_inline
+# define __no_kasan_or_inline __always_inline
+#endif
+
+static __no_kasan_or_inline
 void __read_once_size_nocheck(const volatile void *p, void *res, int size)
 {
    __READ_ONCE_SIZE;
 }
-#endif

 static __always_inline void __write_once_size(volatile void *p, void *res, int size)
 {

Leave a Reply

Your email address will not be published. Required fields are marked *