Re: [PATCH] modpost: srcversion sometimes incorrect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2018-03-31 2:14 GMT+09:00 Juro Bystricky <juro.bystricky@xxxxxxxxx>:
> "srcversion" field inserted into module modinfo section contains a
> sum of the source files which made it. However, this field can
> be incorrect. Building the same module can end up having inconsistent
> srcversion field eventhough the sources remain the same.
> This can be reproduced by building modules in a deeply nested directory,
> but other factors contribute as well.
>
> The reason for incorrect srcversion is that some source files can be
> simply silently skipped from the checksum calculation due to limited
> buffer space for line parsing.
>
> This patch addresses two issues:
>
> 1. Allocates a larger line buffer (32k vs 4k).
> 2. Issues a warning if a line length exceeds the line buffer.
>
> Signed-off-by: Juro Bystricky <juro.bystricky@xxxxxxxxx>
> ---
>  scripts/mod/modpost.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
> index 9917f92..955f26e 100644
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -385,9 +385,10 @@ void *grab_file(const char *filename, unsigned long *size)
>    * spaces in the beginning of the line is trimmed away.
>    * Return a pointer to a static buffer.
>    **/
> +#define MODPOST_MAX_LINE 32768
>  char *get_next_line(unsigned long *pos, void *file, unsigned long size)
>  {
> -       static char line[4096];
> +       static char line[MODPOST_MAX_LINE];
>         int skip = 1;
>         size_t len = 0;
>         signed char *p = (signed char *)file + *pos;
> @@ -402,8 +403,11 @@ char *get_next_line(unsigned long *pos, void *file, unsigned long size)
>                 if (*p != '\n' && (*pos < size)) {
>                         len++;
>                         *s++ = *p++;
> -                       if (len > 4095)
> +                       if (len > (sizeof(line)-1)) {
> +                               warn(" %s: line exceeds buffer size %zu bytes\n"
> +                                    , __func__, sizeof(line));
>                                 break; /* Too long, stop */
> +                       }
>                 } else {
>                         /* End of string */
>                         *s = '\0';
> --
> 2.7.4

The whole of the file content is mapped by grab_file().

I believe the right thing to do is,
to not increase the buffer size,
but to not use such a temporary buffer.




-- 
Best Regards
Masahiro Yamada
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux