kallsyms: avoid hardcoding buffer size
authorBoqun Feng <boqun.feng@gmail.com>
Wed, 27 Jul 2022 18:54:19 +0000 (20:54 +0200)
committerMiguel Ojeda <ojeda@kernel.org>
Wed, 28 Sep 2022 06:54:39 +0000 (08:54 +0200)
This introduces `KSYM_NAME_LEN_BUFFER` in place of the previously
hardcoded size of the input buffer.

It will also make it easier to update the size in a single place
in a later patch.

Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Co-developed-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
scripts/kallsyms.c

index 8551513..25e2fe5 100644 (file)
 
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
 
+#define _stringify_1(x)        #x
+#define _stringify(x)  _stringify_1(x)
+
 #define KSYM_NAME_LEN          128
 
+/* A substantially bigger size than the current maximum. */
+#define KSYM_NAME_LEN_BUFFER   499
+
 struct sym_entry {
        unsigned long long addr;
        unsigned int len;
@@ -198,13 +204,13 @@ static void check_symbol_range(const char *sym, unsigned long long addr,
 
 static struct sym_entry *read_symbol(FILE *in)
 {
-       char name[500], type;
+       char name[KSYM_NAME_LEN_BUFFER+1], type;
        unsigned long long addr;
        unsigned int len;
        struct sym_entry *sym;
        int rc;
 
-       rc = fscanf(in, "%llx %c %499s\n", &addr, &type, name);
+       rc = fscanf(in, "%llx %c %" _stringify(KSYM_NAME_LEN_BUFFER) "s\n", &addr, &type, name);
        if (rc != 3) {
                if (rc != EOF && fgets(name, ARRAY_SIZE(name), in) == NULL)
                        fprintf(stderr, "Read error or end of file.\n");