]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
vsprintf: add simple_strntoul
authorDavid Disseldorp <ddiss@suse.de>
Tue, 4 Mar 2025 05:57:46 +0000 (16:57 +1100)
committerChristian Brauner <brauner@kernel.org>
Sat, 8 Mar 2025 11:13:25 +0000 (12:13 +0100)
cpio extraction currently does a memcpy to ensure that the archive hex
fields are null terminated for simple_strtoul(). simple_strntoul() will
allow us to avoid the memcpy.

Signed-off-by: David Disseldorp <ddiss@suse.de>
Link: https://lore.kernel.org/r/20250304061020.9815-4-ddiss@suse.de
Signed-off-by: Christian Brauner <brauner@kernel.org>
include/linux/kstrtox.h
lib/vsprintf.c

index 7fcf29a4e0de4d14b38855073059437f11879105..6ea897222af1d3113333ad8ac20ee412149d8391 100644 (file)
@@ -143,6 +143,7 @@ static inline int __must_check kstrtos32_from_user(const char __user *s, size_t
  */
 
 extern unsigned long simple_strtoul(const char *,char **,unsigned int);
+extern unsigned long simple_strntoul(const char *,char **,unsigned int,size_t);
 extern long simple_strtol(const char *,char **,unsigned int);
 extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
 extern long long simple_strtoll(const char *,char **,unsigned int);
index 56fe96319292674c9f79559cf78dd0d99d1a1f06..734bd70c8b9b3d1db7aed830a906242d4ff488e5 100644 (file)
@@ -114,6 +114,13 @@ unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
 }
 EXPORT_SYMBOL(simple_strtoul);
 
+unsigned long simple_strntoul(const char *cp, char **endp, unsigned int base,
+                             size_t max_chars)
+{
+       return simple_strntoull(cp, endp, base, max_chars);
+}
+EXPORT_SYMBOL(simple_strntoul);
+
 /**
  * simple_strtol - convert a string to a signed long
  * @cp: The start of the string