net: do not try to load protocol module via itself
Otherwise we get infinite recursion. Closes: 45729
This commit is contained in:
parent
4fe8e6d4a1
commit
ba218c1c10
1 changed files with 37 additions and 0 deletions
|
@ -1341,6 +1341,43 @@ grub_net_open_real (const char *name)
|
||||||
}
|
}
|
||||||
if (try == 0)
|
if (try == 0)
|
||||||
{
|
{
|
||||||
|
const char *prefix, *root;
|
||||||
|
char *prefdev, *comma;
|
||||||
|
int skip = 0;
|
||||||
|
grub_size_t devlen;
|
||||||
|
|
||||||
|
/* Do not attempt to load module if it requires protocol provided
|
||||||
|
by this module - it results in infinite recursion. Just continue,
|
||||||
|
fail and cleanup on next iteration.
|
||||||
|
*/
|
||||||
|
prefix = grub_env_get ("prefix");
|
||||||
|
if (!prefix)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
prefdev = grub_file_get_device_name (prefix);
|
||||||
|
if (!prefdev)
|
||||||
|
{
|
||||||
|
root = grub_env_get ("root");
|
||||||
|
if (!root)
|
||||||
|
continue;
|
||||||
|
prefdev = grub_strdup (root);
|
||||||
|
if (!prefdev)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
comma = grub_strchr (prefdev, ',');
|
||||||
|
if (comma)
|
||||||
|
*comma = '\0';
|
||||||
|
devlen = grub_strlen (prefdev);
|
||||||
|
|
||||||
|
if (protnamelen == devlen && grub_memcmp (prefdev, protname, devlen) == 0)
|
||||||
|
skip = 1;
|
||||||
|
|
||||||
|
grub_free (prefdev);
|
||||||
|
|
||||||
|
if (skip)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (sizeof ("http") - 1 == protnamelen
|
if (sizeof ("http") - 1 == protnamelen
|
||||||
&& grub_memcmp ("http", protname, protnamelen) == 0)
|
&& grub_memcmp ("http", protname, protnamelen) == 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue