Message ID | 20200218110539.24735-1-masahiroy@kernel.org |
---|---|
State | Accepted |
Commit | 8a266e5800514121044e4654e84a961200294cd5 |
Headers | show |
Series | fixdep: fix U-Boot own code to handle only valid symbol characters | expand |
On Tue, Feb 18, 2020 at 8:06 PM Masahiro Yamada <masahiroy at kernel.org> wrote: > > Currently, fixdep skips parsing include/linux/kconfig.h, but if it > parsed it, it would translate the following code in kconfig.h > > config_enabled(CONFIG_VAL(option##_MODULE) > > into: > > $(wildcard include/config/option##/module.h) > > When Kbuild includes .*.cmd, it would emit the following error: > > *** unterminated call to function 'wildcard': missing ')'. Stop. > > This issue prevents us from importing the upstream Linux commit > 638e69cf2230 ("fixdep: do not ignore kconfig.h"). > > Fix this by handling only alphanumerical characters and underscores. > This makes sense because they match to the valid character sets in > Kconfig symbols. > > As a side-note, you can reproduce this issue only on GNU Make <= 4.2.1 > > For GNU Make <= 4.2.1, the '#' always means the start of a comment. > Hence, GNU Make thinks the closing ')' is missing. > > The following commit in GNU Make changed how it handles '#' in > function invocations. So, this does not happen for GNU Make 4.3 > > | commit c6966b323811c37acedff05b576b907b06aea5f4 > | Author: Paul Smith <psmith at gnu.org> > | Date: Thu Dec 22 18:47:26 2016 -0500 > | > | [SV 20513] Un-escaped # are not comments in function invocations > > Signed-off-by: Masahiro Yamada <masahiroy at kernel.org> > --- Maybe, this can have this tag. Fixes: 8be60f06c258 ("linux/kconfig.h: add CPP macros useful for per-image config options") > This patch is applicable to the current upstream code. > > > scripts/basic/fixdep.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c > index da7fb2cd4dde..6a668f114096 100644 > --- a/scripts/basic/fixdep.c > +++ b/scripts/basic/fixdep.c > @@ -262,7 +262,7 @@ static void parse_config_file(const char *map, size_t len) > (q - p == 3 && !memcmp(p, "VAL(", 4))) { > p = q + 1; > for (q = p; q < map + len; q++) > - if (*q == ')') > + if (!(isalnum(*q) || *q == '_')) > goto found2; > continue; > > -- > 2.17.1 >
On Tue, Feb 18, 2020 at 08:35:06PM +0900, Masahiro Yamada wrote: > On Tue, Feb 18, 2020 at 8:06 PM Masahiro Yamada <masahiroy at kernel.org> wrote: > > > > Currently, fixdep skips parsing include/linux/kconfig.h, but if it > > parsed it, it would translate the following code in kconfig.h > > > > config_enabled(CONFIG_VAL(option##_MODULE) > > > > into: > > > > $(wildcard include/config/option##/module.h) > > > > When Kbuild includes .*.cmd, it would emit the following error: > > > > *** unterminated call to function 'wildcard': missing ')'. Stop. > > > > This issue prevents us from importing the upstream Linux commit > > 638e69cf2230 ("fixdep: do not ignore kconfig.h"). > > > > Fix this by handling only alphanumerical characters and underscores. > > This makes sense because they match to the valid character sets in > > Kconfig symbols. > > > > As a side-note, you can reproduce this issue only on GNU Make <= 4.2.1 > > > > For GNU Make <= 4.2.1, the '#' always means the start of a comment. > > Hence, GNU Make thinks the closing ')' is missing. > > > > The following commit in GNU Make changed how it handles '#' in > > function invocations. So, this does not happen for GNU Make 4.3 > > > > | commit c6966b323811c37acedff05b576b907b06aea5f4 > > | Author: Paul Smith <psmith at gnu.org> > > | Date: Thu Dec 22 18:47:26 2016 -0500 > > | > > | [SV 20513] Un-escaped # are not comments in function invocations > > > > Signed-off-by: Masahiro Yamada <masahiroy at kernel.org> > > --- > > > Maybe, this can have this tag. > > Fixes: 8be60f06c258 ("linux/kconfig.h: add CPP macros useful for > per-image config options") Ah, OK, thanks. Yes, I'll go this route to keep bisectability and fully re-sync the program.
On Tue, Feb 18, 2020 at 8:06 PM Masahiro Yamada <masahiroy at kernel.org> wrote: > > Currently, fixdep skips parsing include/linux/kconfig.h, but if it > parsed it, it would translate the following code in kconfig.h > > config_enabled(CONFIG_VAL(option##_MODULE) > > into: > > $(wildcard include/config/option##/module.h) > > When Kbuild includes .*.cmd, it would emit the following error: > > *** unterminated call to function 'wildcard': missing ')'. Stop. > > This issue prevents us from importing the upstream Linux commit > 638e69cf2230 ("fixdep: do not ignore kconfig.h"). > > Fix this by handling only alphanumerical characters and underscores. > This makes sense because they match to the valid character sets in > Kconfig symbols. > > As a side-note, you can reproduce this issue only on GNU Make <= 4.2.1 > > For GNU Make <= 4.2.1, the '#' always means the start of a comment. > Hence, GNU Make thinks the closing ')' is missing. > > The following commit in GNU Make changed how it handles '#' in > function invocations. So, this does not happen for GNU Make 4.3 > > | commit c6966b323811c37acedff05b576b907b06aea5f4 > | Author: Paul Smith <psmith at gnu.org> > | Date: Thu Dec 22 18:47:26 2016 -0500 > | > | [SV 20513] Un-escaped # are not comments in function invocations > > Signed-off-by: Masahiro Yamada <masahiroy at kernel.org> > --- > > This patch is applicable to the current upstream code. One more tag: Reported-by: Tom Rini <trini at konsulko.com>
On Tue, Feb 18, 2020 at 08:05:39PM +0900, Masahiro Yamada wrote: > Currently, fixdep skips parsing include/linux/kconfig.h, but if it > parsed it, it would translate the following code in kconfig.h > > config_enabled(CONFIG_VAL(option##_MODULE) > > into: > > $(wildcard include/config/option##/module.h) > > When Kbuild includes .*.cmd, it would emit the following error: > > *** unterminated call to function 'wildcard': missing ')'. Stop. > > This issue prevents us from importing the upstream Linux commit > 638e69cf2230 ("fixdep: do not ignore kconfig.h"). > > Fix this by handling only alphanumerical characters and underscores. > This makes sense because they match to the valid character sets in > Kconfig symbols. > > As a side-note, you can reproduce this issue only on GNU Make <= 4.2.1 > > For GNU Make <= 4.2.1, the '#' always means the start of a comment. > Hence, GNU Make thinks the closing ')' is missing. > > The following commit in GNU Make changed how it handles '#' in > function invocations. So, this does not happen for GNU Make 4.3 > > | commit c6966b323811c37acedff05b576b907b06aea5f4 > | Author: Paul Smith <psmith at gnu.org> > | Date: Thu Dec 22 18:47:26 2016 -0500 > | > | [SV 20513] Un-escaped # are not comments in function invocations > > Signed-off-by: Masahiro Yamada <masahiroy at kernel.org> > Reported-by: Tom Rini <trini at konsulko.com> Applied to u-boot/next, thanks!
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index da7fb2cd4dde..6a668f114096 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c @@ -262,7 +262,7 @@ static void parse_config_file(const char *map, size_t len) (q - p == 3 && !memcmp(p, "VAL(", 4))) { p = q + 1; for (q = p; q < map + len; q++) - if (*q == ')') + if (!(isalnum(*q) || *q == '_')) goto found2; continue;
Currently, fixdep skips parsing include/linux/kconfig.h, but if it parsed it, it would translate the following code in kconfig.h config_enabled(CONFIG_VAL(option##_MODULE) into: $(wildcard include/config/option##/module.h) When Kbuild includes .*.cmd, it would emit the following error: *** unterminated call to function 'wildcard': missing ')'. Stop. This issue prevents us from importing the upstream Linux commit 638e69cf2230 ("fixdep: do not ignore kconfig.h"). Fix this by handling only alphanumerical characters and underscores. This makes sense because they match to the valid character sets in Kconfig symbols. As a side-note, you can reproduce this issue only on GNU Make <= 4.2.1 For GNU Make <= 4.2.1, the '#' always means the start of a comment. Hence, GNU Make thinks the closing ')' is missing. The following commit in GNU Make changed how it handles '#' in function invocations. So, this does not happen for GNU Make 4.3 | commit c6966b323811c37acedff05b576b907b06aea5f4 | Author: Paul Smith <psmith at gnu.org> | Date: Thu Dec 22 18:47:26 2016 -0500 | | [SV 20513] Un-escaped # are not comments in function invocations Signed-off-by: Masahiro Yamada <masahiroy at kernel.org> --- This patch is applicable to the current upstream code. scripts/basic/fixdep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)