1. 21 1月, 2018 2 次提交
    • U
      kconfig: Fix automatic menu creation mem leak · ae7440ef
      Ulf Magnusson 提交于
      expr_trans_compare() always allocates and returns a new expression,
      giving the following leak outline:
      
      	...
      	*Allocate*
      	basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
      	...
      	for (menu = parent->next; menu; menu = menu->next) {
      		...
      		*Copy*
      		dep2 = expr_copy(basedep);
      		...
      		*Free copy*
      		expr_free(dep2);
      	}
      	*basedep lost!*
      
      Fix by freeing 'basedep' after the loop.
      
      Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 344,376 bytes in 14,349 blocks
      	   ...
      
      Summary after the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 44,448 bytes in 1,852 blocks
      	   ...
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      ae7440ef
    • U
      kconfig: Don't leak main menus during parsing · 0724a7c3
      Ulf Magnusson 提交于
      If a 'mainmenu' entry appeared in the Kconfig files, two things would
      leak:
      
      	- The 'struct property' allocated for the default "Linux Kernel
      	  Configuration" prompt.
      
      	- The string for the T_WORD/T_WORD_QUOTE prompt after the
      	  T_MAINMENU token, allocated on the heap in zconf.l.
      
      To fix it, introduce a new 'no_mainmenu_stmt' nonterminal that matches
      if there's no 'mainmenu' and adds the default prompt. That means the
      prompt only gets allocated once regardless of whether there's a
      'mainmenu' statement or not, and managing it becomes simple.
      
      Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 344,568 bytes in 14,352 blocks
      	   ...
      
      Summary after the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 344,440 bytes in 14,350 blocks
      	   ...
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      0724a7c3
  2. 11 1月, 2018 2 次提交
    • U
      kconfig: Don't leak 'option' arguments during parsing · bc28fe1d
      Ulf Magnusson 提交于
      The following strings would leak before this change:
      
      	- option env="LEAKED"
      	- option defconfig_list="LEAKED"
      
      These come in the form of T_WORD tokens and are always allocated on the
      heap in zconf.l. Free them.
      
      Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 344,616 bytes in 14,355 blocks
      	   ...
      
      Summary after the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 344,568 bytes in 14,352 blocks
      	   ...
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      bc28fe1d
    • U
      kconfig: Don't leak 'source' filenames during parsing · 24161a67
      Ulf Magnusson 提交于
      The 'source_stmt' nonterminal takes a 'prompt', which consists of either
      a T_WORD or a T_WORD_QUOTE, both of which are always allocated on the
      heap in zconf.l and need to have their associated strings freed. Free
      them.
      
      The existing code already makes sure to always copy the string, but add
      a warning to sym_expand_string_value() to make it clear that the string
      must be copied, just in case.
      
      Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 387,504 bytes in 15,545 blocks
      	   ...
      
      Summary after the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 344,616 bytes in 14,355 blocks
      	   ...
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      24161a67
  3. 10 1月, 2018 1 次提交
    • U
      kconfig: Don't leak symbol names during parsing · 26e47a3c
      Ulf Magnusson 提交于
      Prior to this fix, zconf.y did not free symbol names from zconf.l in
      these contexts:
      
      	- After T_CONFIG ('config LEAKED')
      	- After T_MENUCONFIG ('menuconfig LEAKED')
      	- After T_SELECT ('select LEAKED')
      	- After T_IMPLY ('imply LEAKED')
      	- After T_DEFAULT in a choice ('default LEAKED')
      
      All of these come in the form of T_WORD tokens, which always have their
      associated string allocated on the heap in zconf.l and need to be freed.
      
      Fix by introducing a new nonterminal 'nonconst_symbol' which takes a
      T_WORD, fetches the symbol, and then frees the T_WORD string. The
      already existing 'symbol' nonterminal works the same way but also
      accepts T_WORD_QUOTE, corresponding to a constant symbol. T_WORD_QUOTE
      should not be accepted in any of the contexts above, so the 'symbol'
      nonterminal can't be reused here.
      
      Fetching the symbol in 'nonconst_symbol' also removes a bunch of
      sym_lookup() calls from actions.
      
      Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 711,571 bytes in 37,756 blocks
      	   ...
      
      Summary after the fix:
      
      	LEAK SUMMARY:
      	   definitely lost: 387,504 bytes in 15,545 blocks
                 ...
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      26e47a3c
  4. 16 12月, 2017 4 次提交
    • M
      kconfig: generate lexer and parser during build instead of shipping · 29c83306
      Masahiro Yamada 提交于
      zconf.lex.c is generated by flex, zconf.tab.c by bison.  Instead of
      running flex and bison during the kernel building, we conventionally
      version-control those artifacts with _shipped suffix.
      
      It is tedious to manually regenerate them every time we change the
      real sources, zconf.l and zconf.y.
      
      Remove the _shipped files and switch over to build-time generation
      of the intermediate C files.
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      29c83306
    • M
      kbuild: prepare to remove C files pre-generated by flex and bison · 033dba2e
      Masahiro Yamada 提交于
      In Linux build system convention, pre-generated files are version-
      controlled with a "_shipped" suffix.  During the kernel building,
      they are simply shipped (copied) removing the suffix.
      
      This approach can reduce external tool dependency for the kernel build,
      but it is tedious to manually regenerate such artifacts from developers'
      point of view.  (We need to do "make REGENERATE_PARSERS=1" every time
      we touch real source files such as *.l, *.y)
      
      Some months ago, I sent out RFC patches to run flex, bison, and gperf
      during the build.
      
      In the review and test, Linus noticed gperf-3.1 had changed the lookup
      function prototype.  Then, the use of gperf in kernel was entirely
      removed by commit bb3290d9 ("Remove gperf usage from toolchain").
      
      This time, I tested several versions of flex and bison, and I was not
      hit by any compatibility issue except a flaw in flex-2.6.3; if you
      generate lexer for dtc and genksyms with flex-2.6.3, you will see
      "yywrap redefined" warning.  This was not intentional, but a bug,
      fixed by flex-2.6.4.  Otherwise, both flex and bison look fairly
      stable for a long time.
      
      This commit prepares some build rules to remove the _shipped files.
      Also, document minimal requirement for flex and bison.
      
      Rationale for the minimal version:
      The -Wmissing-prototypes option of GCC warns "no previous prototype"
      for lexers generated by flex-2.5.34 or older, so I chose 2.5.35 as the
      required version for flex.  Flex-2.5.35 was released in 2008.  Bison
      looks more stable.  I did not see any problem with bison-2.0, released
      in 2004.  I did not test bison-1.x, but bison-2.0 should be old enough.
      
      Tested flex versions:
        2.5.35
        2.5.36
        2.5.37
        2.5.39
        2.6.0
        2.6.1
        2.6.2
        2.6.3   (*)
        2.6.4
      
       (*) flex-2.6.3 causes "yywrap redefined" warning
      
      Tested bison versions:
        2.0
        2.1
        2.2
        2.3
        2.4
        2.4.1
        2.5.1
        2.6
        2.6.1
        2.6.2
        2.6.3
        2.6.4
        2.6.5
        2.7
        2.7.1
        3.0
        3.0.1
        3.0.2
        3.0.3
        3.0.4
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      033dba2e
    • M
      kbuild: add LEX and YACC variables · 73a4f6db
      Masahiro Yamada 提交于
      Allow users to use their favorite lexer / parser generators.
      This is useful for me to test various flex and bison versions.
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      73a4f6db
    • M
      kconfig: display recursive dependency resolution hint just once · e3b03bf2
      Masahiro Yamada 提交于
      Commit 1c199f28 ("kbuild: document recursive dependency limitation
      / resolution") probably intended to show a hint along with "recursive
      dependency detected!" error, but it missed to add {...} guard, and the
      hint is displayed in every loop of the dep_stack traverse, annoyingly.
      
      This error was detected by GCC's -Wmisleading-indentation when switching
      to build-time generation of lexer/parser.
      
      scripts/kconfig/symbol.c: In function ‘sym_check_print_recursive’:
      scripts/kconfig/symbol.c:1150:3: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
         if (stack->sym == last_sym)
         ^~
      scripts/kconfig/symbol.c:1153:4: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
          fprintf(stderr, "For a resolution refer to Documentation/kbuild/kconfig-language.txt\n");
          ^~~~~~~
      
      I could simply add {...} to surround the three fprintf(), but I rather
      chose to move the hint after the loop to make the whole message readable.
      
      Fixes: 1c199f28 ("kbuild: document recursive dependency limitation / resolution"
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Acked-by: NLuis R. Rodriguez <mcgrof@kernel.org>
      e3b03bf2
  5. 15 12月, 2017 3 次提交
    • U
      kconfig: Clean up modules handling and fix crash · f77850d3
      Ulf Magnusson 提交于
      Kconfig currently doesn't handle 'm' appearing in a Kconfig file before
      the modules symbol is defined (the symbol with 'option modules'). The
      problem is the following code, which runs during parsing:
      
      	/* change 'm' into 'm' && MODULES */
      	if (e->left.sym == &symbol_mod)
      		return expr_alloc_and(e, expr_alloc_symbol(modules_sym));
      
      If the modules symbol has not yet been defined, modules_sym is NULL,
      giving an invalid expression.
      
      Here is a test file where both BEFORE_1 and BEFORE_2 trigger a segfault.
      If the modules symbol is removed, all symbols trigger segfaults.
      
      	config BEFORE_1
      		def_tristate y if m
      
      	if m
      	config BEFORE_2
      		def_tristate y
      	endif
      
      	config MODULES
      		def_bool y
      		option modules
      
      	config AFTER_1
      		def_tristate y if m
      
      	if m
      	config AFTER_2
      		def_tristate y
      	endif
      
      Fix the issue by rewriting 'm' in menu_finalize() instead. This function
      runs after parsing and is the proper place to do it. The following
      existing code in conf_parse() in zconf.y ensures that the modules symbol
      exists at that point:
      
      	if (!modules_sym)
      		modules_sym = sym_find( "n" );
      
      	...
      
      	menu_finalize(&rootmenu);
      
      The following tests were done to ensure no functional changes for
      configurations that don't reference 'm' before the modules symbol:
      
      	- zconfdump(stdout) was run with ARCH=x86 and ARCH=arm before
      	  and after the change and verified to produce identical output.
      	  This function prints all symbols, choices, and menus together
      	  with their properties and their dependency expressions. A
      	  rewritten 'm' appears as 'm && MODULES'.
      
      	  A small annoyance is that the assert(len != 0) in xfwrite()
      	  needs to be disabled in order to use zconfdump(), because it
      	  chokes on e.g. 'default ""'.
      
      	- The Kconfiglib test suite was run to indirectly verify that
      	  alldefconfig, allyesconfig, allnoconfig, and all defconfigs in
      	  the kernel still generate the same final .config.
      
      	- Valgrind was used to check for memory errors and (new) memory
      	  leaks.
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      f77850d3
    • U
      kconfig: Clarify expression rewriting · fa8cedae
      Ulf Magnusson 提交于
      menu_finalize() is one of the more opaque parts of Kconfig, and I need
      to make some changes to it to fix an issue related to modules. Add some
      comments related to expression rewriting and dependency propagation as a
      review aid. They will also help other people trying to understand the
      code.
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      fa8cedae
    • U
      kconfig: Rename menu_check_dep() to rewrite_m() · 9a826842
      Ulf Magnusson 提交于
      More directly describes the only thing it does.
      Signed-off-by: NUlf Magnusson <ulfalizer@gmail.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      9a826842
  6. 12 12月, 2017 1 次提交
  7. 07 12月, 2017 3 次提交
  8. 30 11月, 2017 2 次提交
  9. 29 11月, 2017 1 次提交
    • T
      vsprintf: add printk specifier %px · 7b1924a1
      Tobin C. Harding 提交于
      printk specifier %p now hashes all addresses before printing. Sometimes
      we need to see the actual unmodified address. This can be achieved using
      %lx but then we face the risk that if in future we want to change the
      way the Kernel handles printing of pointers we will have to grep through
      the already existent 50 000 %lx call sites. Let's add specifier %px as a
      clear, opt-in, way to print a pointer and maintain some level of
      isolation from all the other hex integer output within the Kernel.
      
      Add printk specifier %px to print the actual unmodified address.
      Signed-off-by: NTobin C. Harding <me@tobin.cc>
      7b1924a1
  10. 23 11月, 2017 5 次提交
    • M
      kbuild: drop $(extra-y) from real-objs-y · 10aaa3b7
      Masahiro Yamada 提交于
      $(real-objs-y) in only used in scripts/Makefile.build to form
      "targets", but $(extra-y) is added to "targets" in another line.
      We do not need to add $(extra-y) twice.
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      10aaa3b7
    • M
      kbuild: rpm: prompt to use "rpm-pkg" if "rpm" target is used · ebaad7d3
      Masahiro Yamada 提交于
      The "rpm" has been kept for backward compatibility since pre-git era.
      I am planning to remove it after the Linux 4.18 release.  Annouce the
      end of the support, prompting to use "rpm-pkg" instead.
      
      If you use "rpm", it will work like "rpm-pkg", but warning messages
      will be displayed as follows:
      
        WARNING: "rpm" target will be removed after Linux 4.18
                 Please use "rpm-pkg" instead.
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      ebaad7d3
    • M
      kbuild: pkg: use --transform option to prefix paths in tar · 2dbc644a
      Masahiro Yamada 提交于
      For rpm-pkg and deb-pkg, a source tar file is created.  All paths in
      the archive must be prefixed with the base name of the tar so that
      everything is contained in the directory when you extract it.
      
      Currently, scripts/package/Makefile uses a symlink for that, and
      removes it after the tar is created.
      
      If you terminate the build during the tar creation, the symlink is
      left over.  Then, at the next package build, you will see a warning
      like follows:
      
        ln: '.' and 'kernel-4.14.0+/.' are the same file
      
      It is possible to fix it by adding -n (--no-dereference) option to
      the "ln" command, but a cleaner way is to use --transform option
      of "tar" command.  This option is GNU extension, but it should not
      hurt to use it in the Linux build system.
      
      The 'S' flag is needed to exclude symlinks from the path fixup.
      Without it, symlinks in the kernel are broken.
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      2dbc644a
    • M
      coccinelle: fix parallel build with CHECK=scripts/coccicheck · d7059ca0
      Masahiro Yamada 提交于
      The command "make -j8 C=1 CHECK=scripts/coccicheck" produces
      lots of "coccicheck failed" error messages.
      
      Julia Lawall explained the Coccinelle behavior as follows:
      "The problem on the Coccinelle side is that it uses a subdirectory
      with the name of the semantic patch to store standard output and
      standard error for the different threads.  I didn't want to use a
      name with the pid, so that one could easily find this information
      while Coccinelle is running.  Normally the subdirectory is cleaned
      up when Coccinelle completes, so there is only one of them at a time.
      Maybe it is best to just add the pid.  There is the risk that these
      subdirectories will accumulate if Coccinelle crashes in a way such
      that they don't get cleaned up, but Coccinelle could print a warning
      if it detects this case, rather than failing."
      
      When scripts/coccicheck is used as CHECK tool and -j option is given
      to Make, the whole of build process runs in parallel.  So, multiple
      processes try to get access to the same subdirectory.
      
      I notice spatch creates the subdirectory only when it runs in parallel
      (i.e. --jobs <N> is given and <N> is greater than 1).
      
      Setting NPROC=1 is a reasonable solution; spatch does not create the
      subdirectory.  Besides, ONLINE=1 mode takes a single file input for
      each spatch invocation, so there is no reason to parallelize it in
      the first place.
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Acked-by: NJulia Lawall <Julia.Lawall@lip6.fr>
      d7059ca0
    • H
      kconfig/symbol.c: use correct pointer type argument for sizeof · 88127dae
      Heinrich Schuchardt 提交于
      sym_arr is of type struct symbol **.
      So in malloc we need sizeof(struct symbol *).
      
      The problem was indicated by coccinelle.
      Signed-off-by: NHeinrich Schuchardt <xypron.glpk@gmx.de>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      88127dae
  11. 22 11月, 2017 1 次提交
  12. 21 11月, 2017 1 次提交
    • M
      Add optional check for bad kernel-doc comments · 3a025e1d
      Matthew Wilcox 提交于
      Implement a '-none' output mode for kernel-doc which will only output
      warning messages, and suppresses the warning message about there being
      no kernel-doc in the file.
      
      If the build has requested additional warnings, automatically check all
      .c files.  This patch does not check .h files.  Enabling the warning
      by default would add about 1300 warnings, so it's default off for now.
      People who care can use this to check they didn't break the docs and
      maybe we'll get all the warnings fixed and be able to enable this check
      by default in the future.
      Signed-off-by: NMatthew Wilcox <mawilcox@microsoft.com>
      Signed-off-by: NJonathan Corbet <corbet@lwn.net>
      3a025e1d
  13. 18 11月, 2017 13 次提交
  14. 16 11月, 2017 1 次提交