diff options
Diffstat (limited to 'include/linux/string.h')
-rw-r--r-- | include/linux/string.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/string.h b/include/linux/string.h index 410ecf17de3c..cfd83eb2f926 100644 --- a/include/linux/string.h +++ b/include/linux/string.h | |||
@@ -259,7 +259,10 @@ __FORTIFY_INLINE __kernel_size_t strlen(const char *p) | |||
259 | { | 259 | { |
260 | __kernel_size_t ret; | 260 | __kernel_size_t ret; |
261 | size_t p_size = __builtin_object_size(p, 0); | 261 | size_t p_size = __builtin_object_size(p, 0); |
262 | if (p_size == (size_t)-1) | 262 | |
263 | /* Work around gcc excess stack consumption issue */ | ||
264 | if (p_size == (size_t)-1 || | ||
265 | (__builtin_constant_p(p[p_size - 1]) && p[p_size - 1] == '\0')) | ||
263 | return __builtin_strlen(p); | 266 | return __builtin_strlen(p); |
264 | ret = strnlen(p, p_size); | 267 | ret = strnlen(p, p_size); |
265 | if (p_size <= ret) | 268 | if (p_size <= ret) |