Thread (79 messages) 79 messages, 9 authors, 2024-12-09

Re: [PATCH 06/10] fortify: replace __is_constexpr() by is_const() in strlen()

From: Vincent Mailhol <hidden>
Date: 2024-12-05 19:35:01
Also in: dri-devel, intel-gfx, linux-hardening, lkml, llvm

On Thu. 5 Dec. 2024 at 03:58, David Laight [off-list ref] wrote:
From: Vincent Mailhol
quoted
Sent: 02 December 2024 17:33

From: Vincent Mailhol <redacted>

is_const() is a one to one replacement of __is_constexpr(). Do the
replacement so that __is_constexpr() can be removed.

Signed-off-by: Vincent Mailhol <redacted>
---
 include/linux/fortify-string.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/fortify-string.h b/include/linux/fortify-string.h
index 0d99bf11d260a3482bbe46e35c7553c0ccfb8b94..e3f2f772c5439ef71eb4a904b4ce27956bc69743 100644
--- a/include/linux/fortify-string.h
+++ b/include/linux/fortify-string.h
@@ -254,8 +254,8 @@ __FORTIFY_INLINE __kernel_size_t strnlen(const char * const POS p, __kernel_size
  * Returns number of characters in @p (NOT including the final NUL).
  *
  */
-#define strlen(p)                                                    \
-     __builtin_choose_expr(__is_constexpr(__builtin_strlen(p)),      \
+#define strlen(p)                                            \
+     __builtin_choose_expr(is_const(__builtin_strlen(p)),    \
              __builtin_strlen(p), __fortify_strlen(p))
I'm sure Linus suggested a way of doing that without replicating
the __builtin_strlen().

Indeed it may be valid to do:
        len = __builtin_strlen(p);
        __builtin_constant_p(len) ? len : __fortify_strlen(p);
Then, wouldn't it be better for strlen() to be an inline function
instead of a macro?

  __FORTIFY_INLINE __kernel_size_t strlen(const char *p)
  {
          __kernel_size_t ret = __builtin_strlen(p);

          if (__builtin_constant_p(ret))
                  return ret;
          return __fortify_strlen(p);
  }

I tested it and it worked on an allyesconfig. So if I receive no
objections, strlen() will become an inline function in v2.


Yours sincerely,
Vincent Mailhol
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help