Commit 3736612d authored by M. Vefa Bicakci's avatar M. Vefa Bicakci Committed by Greg Kroah-Hartman

kconfig: Clear "written" flag to avoid data loss

commit 0c5b6c28 upstream.

Prior to this commit, starting nconfig, xconfig or gconfig, and saving
the .config file more than once caused data loss, where a .config file
that contained only comments would be written to disk starting from the
second save operation.

This bug manifests itself because the SYMBOL_WRITTEN flag is never
cleared after the first call to conf_write, and subsequent calls to
conf_write then skip all of the configuration symbols due to the
SYMBOL_WRITTEN flag being set.

This commit resolves this issue by clearing the SYMBOL_WRITTEN flag
from all symbols before conf_write returns.

Fixes: 8e2442a5 ("kconfig: fix missing choice values in auto.conf")
Cc: linux-stable <stable@vger.kernel.org> # 4.19+
Signed-off-by: default avatarM. Vefa Bicakci <m.v.b@runbox.com>
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4c6500b5
...@@ -784,6 +784,7 @@ int conf_write(const char *name) ...@@ -784,6 +784,7 @@ int conf_write(const char *name)
const char *str; const char *str;
char dirname[PATH_MAX+1], tmpname[PATH_MAX+22], newname[PATH_MAX+8]; char dirname[PATH_MAX+1], tmpname[PATH_MAX+22], newname[PATH_MAX+8];
char *env; char *env;
int i;
dirname[0] = 0; dirname[0] = 0;
if (name && name[0]) { if (name && name[0]) {
...@@ -860,6 +861,9 @@ int conf_write(const char *name) ...@@ -860,6 +861,9 @@ int conf_write(const char *name)
} }
fclose(out); fclose(out);
for_all_symbols(i, sym)
sym->flags &= ~SYMBOL_WRITTEN;
if (*tmpname) { if (*tmpname) {
strcat(dirname, basename); strcat(dirname, basename);
strcat(dirname, ".old"); strcat(dirname, ".old");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment