diff options
author | Darren Kenny <darren.kenny@oracle.com> | 2022-08-09 13:29:05 +0000 |
---|---|---|
committer | Daniel Kiper <daniel.kiper@oracle.com> | 2022-08-19 21:41:51 +0200 |
commit | 2669f9864341d861364084f5a976117aad2bd8f5 (patch) | |
tree | f9440ad73715f8343a7164d995ae8399b39a4eff | |
parent | d22cbe0decf54c6a248250b869ddb169babceb60 (diff) | |
download | grub-2669f9864341d861364084f5a976117aad2bd8f5.tar.gz |
util/grub-install-common: Confirm directory creation in grub_install_mkdir_p()
Because grub_util_mkdir() is implemented to not return a value on any
platform, grub_instal_mkdir_p() can test for success by confirming that
the directory requested exists after attempting to create it, otherwise
it should fail with an error and exit.
While fixing this, a flaw in the logic was shown, where the first match
of the path separator, which almost always was the first character in
the path (e.g. /boot/grub2) would result in creating a directory with an
empty name (i.e. ""). To avoid that, it should skip the handling of the
path separator where p is pointing to the first character.
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
-rw-r--r-- | util/grub-install-common.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/util/grub-install-common.c b/util/grub-install-common.c index 347558bf5..e45fb2903 100644 --- a/util/grub-install-common.c +++ b/util/grub-install-common.c @@ -173,15 +173,20 @@ grub_install_mkdir_p (const char *dst) char *p; for (p = t; *p; p++) { - if (is_path_separator (*p)) + if (is_path_separator (*p) && p != t) { char s = *p; *p = '\0'; grub_util_mkdir (t); + if (!grub_util_is_directory (t)) + grub_util_error (_("failed to make directory: '%s'"), t); + *p = s; } } grub_util_mkdir (t); + if (!grub_util_is_directory (t)) + grub_util_error (_("failed to make directory: '%s'"), t); free (t); } |