grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 2/2] util: confirm directory creation in grub_install_mkdir_p


From: Darren Kenny
Subject: Re: [PATCH 2/2] util: confirm directory creation in grub_install_mkdir_p
Date: Tue, 09 Aug 2022 16:34:19 +0100

Hi Vladimir,

I admit, that I did not previously.

I just tried it out where one of the components in a deeper path was a
symlink, and it works as I would expect. It will see it as a
directory in grub_util_is_directory() using stat(), since that is
looking at what is pointed to, in comparison to lstat(), which only
looks at the symlink itself.

Thanks,

Darren.

On Tuesday, 2022-08-09 at 16:04:32 +02, Vladimir Serbinenko wrote:
> Did you test the case when some of components exist and are symlinks? E.g.
> /temp being a symlinkto /var/tmp
>
> Le mar. 9 août 2022, 15:30, Darren Kenny <darren.kenny@oracle.com> a écrit :
>
>> 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>
>> ---
>>  util/grub-install-common.c | 7 ++++++-
>>  1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/util/grub-install-common.c b/util/grub-install-common.c
>> index 347558bf5412..035293c2357e 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);
>>  }
>>
>> --
>> 2.31.1
>>
>>
>> _______________________________________________
>> Grub-devel mailing list
>> Grub-devel@gnu.org
>> https://lists.gnu.org/mailman/listinfo/grub-devel
>>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]