+2011-12-24 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * grub-core/kern/ieee1275/openfw.c (grub_devalias_iterate): Fix
+ allocation and zero-setting.
+ (grub_ieee1275_get_devname): Check that alias is complete.
+
2011-12-24 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/disk.c (grub_disk_read): Fix hook calling for
strings, so we will add a NULL byte at the end explicitly. */
pathlen += 1;
- devpath = grub_malloc (pathlen);
+ devpath = grub_malloc (pathlen + 1);
if (! devpath)
{
grub_free (devtype);
}
if (grub_ieee1275_get_property (aliases, aliasname, devpath, pathlen,
- &actual))
+ &actual) || actual < 0)
{
grub_dprintf ("devalias", "get_property (%s) failed\n", aliasname);
goto nextprop;
}
- devpath [actual] = '\0';
+ if (actual > pathlen)
+ actual = pathlen;
+ devpath[actual] = '\0';
+ devpath[pathlen] = '\0';
if (grub_ieee1275_finddevice (devpath, &dev))
{
int match_alias (struct grub_ieee1275_devalias *curalias)
{
/* briQ firmware can change capitalization in /chosen/bootpath. */
- if (! grub_strncasecmp (curalias->path, path, pathlen))
+ if (grub_strncasecmp (curalias->path, path, pathlen) == 0
+ && curalias->path[pathlen] == 0)
{
newpath = grub_strdup (curalias->name);
return 1;