Hello community,

here is the log from the commit of package grub2 for openSUSE:Factory checked 
in at 2014-09-28 19:56:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/grub2 (Old)
 and      /work/SRC/openSUSE:Factory/.grub2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "grub2"

Changes:
--------
--- /work/SRC/openSUSE:Factory/grub2/grub2.changes      2014-09-17 
17:42:17.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.grub2.new/grub2.changes 2014-09-28 
19:56:31.000000000 +0200
@@ -1,0 +2,16 @@
+Sun Sep 21 06:47:12 UTC 2014 - arvidj...@gmail.com
+
+- update translations
+- fix possible access to uninitialized pointer in linux loader
+  * add grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch
+  * drop superceded 
grub2-ppc64le-23-grub-segfaults-if-initrd-is-specified-before-specify.patch
+
+-------------------------------------------------------------------
+Thu Sep 18 09:55:57 UTC 2014 - mch...@suse.com
+
+- fix grub.xen not able to handle legacy menu.lst hdX names (bnc#863821)
+  * add grub2-xen-legacy-config-device-name.patch from arvidjaar
+- fix the performance of grub2 uefi pxe is bad (bnc#871555)
+  * add grub2-efinet-reopen-SNP-protocol-for-exclusive-use-by-grub.patch
+
+-------------------------------------------------------------------

Old:
----
  grub2-ppc64le-23-grub-segfaults-if-initrd-is-specified-before-specify.patch
  translations-20130626.tar.xz

New:
----
  grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch
  grub2-efinet-reopen-SNP-protocol-for-exclusive-use-by-grub.patch
  grub2-xen-legacy-config-device-name.patch
  translations-20140921.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ grub2.spec ++++++
--- /var/tmp/diff_new_pack.U8PZhI/_old  2014-09-28 19:56:33.000000000 +0200
+++ /var/tmp/diff_new_pack.U8PZhI/_new  2014-09-28 19:56:33.000000000 +0200
@@ -116,7 +116,7 @@
 Source3:        README.openSUSE
 Source4:        grub2.rpmlintrc
 # rsync -Lrtvz  translationproject.org::tp/latest/grub/ po
-Source5:        translations-20130626.tar.xz
+Source5:        translations-20140921.tar.xz
 Source6:        grub2-once
 Source7:        20_memtest86+
 Source10:       openSUSE-UEFI-CA-Certificate.crt
@@ -153,6 +153,9 @@
 Patch43:        grub2-mkconfig-aarch64.patch
 # Fix build with glibc 2.20+
 Patch44:        grub2-glibc-2.20.patch
+Patch45:        
grub2-efinet-reopen-SNP-protocol-for-exclusive-use-by-grub.patch
+Patch46:        grub2-xen-legacy-config-device-name.patch
+Patch47:        
grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch
 # Btrfs snapshot booting related patches
 Patch101:       grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
 Patch102:       grub2-btrfs-02-export-subvolume-envvars.patch
@@ -182,7 +185,6 @@
 Patch220:       
grub2-ppc64le-20-.TOC.-symbol-is-special-in-ppc64le-.-It-maps-to-the-.patch
 Patch221:       
grub2-ppc64le-21-the-.toc-section-in-powerpc64le-modules-are-sometime.patch
 Patch222:       
grub2-ppc64le-22-all-parameter-to-firmware-calls-should-to-be-BigEndi.patch
-Patch223:       
grub2-ppc64le-23-grub-segfaults-if-initrd-is-specified-before-specify.patch
 Patch224:       grub2-ppc64-build-ppc64-32bit.patch
 Patch225:       grub2-ppc64-qemu.patch
 Patch226:       grub2-ppc64le-timeout.patch
@@ -356,6 +358,9 @@
 %patch42 -p1
 %patch43 -p1
 %patch44 -p1
+%patch45 -p1
+%patch46 -p1
+%patch47 -p1
 %patch101 -p1
 %patch102 -p1
 %patch103 -p1
@@ -383,7 +388,6 @@
 %patch220 -p1
 %patch221 -p1
 %patch222 -p1
-%patch223 -p1
 %patch224 -p1
 %patch225 -p1
 %patch226 -p1

++++++ grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch ++++++
>From c1be7e90be547f6e3f2d7a5c0519f2efa31f495b Mon Sep 17 00:00:00 2001
From: Peter Jones <pjo...@redhat.com>
Date: Wed, 17 Sep 2014 16:30:11 -0400
Subject: [PATCH] Initialized initrd_ctx so we don't free a random pointer from
 the stack.

Currently, if "linux" fails, the "goto fail;" in grub_cmd_initrd sends us
into grub_initrd_close() without grub_initrd_init() being called, and thus
it never clears initrd_ctx->components.  grub_initrd_close() then frees that
address, which is stale data from the stack.  If the stack happens to have a
stale *address* there that matches a recent allocation, then you'll get a
double free later.

So initialize the memory up front.

Signed-off-by: Peter Jones <pjo...@redhat.com>
---
 grub-core/loader/arm/linux.c              | 2 +-
 grub-core/loader/arm64/linux.c            | 2 +-
 grub-core/loader/i386/linux.c             | 2 +-
 grub-core/loader/i386/pc/linux.c          | 2 +-
 grub-core/loader/ia64/efi/linux.c         | 2 +-
 grub-core/loader/mips/linux.c             | 2 +-
 grub-core/loader/powerpc/ieee1275/linux.c | 2 +-
 grub-core/loader/sparc64/ieee1275/linux.c | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c
index e6770d9..62cbe75 100644
--- a/grub-core/loader/arm/linux.c
+++ b/grub-core/loader/arm/linux.c
@@ -396,7 +396,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ 
((unused)),
 {
   grub_file_t file;
   grub_size_t size = 0;
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
 
   if (argc == 0)
     return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
index f1d10a1..0dc144e 100644
--- a/grub-core/loader/arm64/linux.c
+++ b/grub-core/loader/arm64/linux.c
@@ -328,7 +328,7 @@ static grub_err_t
 grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
                 int argc, char *argv[])
 {
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
   int initrd_size, initrd_pages;
   void *initrd_mem = NULL;
 
diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c
index 31fb91e..2ae1763 100644
--- a/grub-core/loader/i386/linux.c
+++ b/grub-core/loader/i386/linux.c
@@ -1050,7 +1050,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ 
((unused)),
   grub_addr_t addr_min, addr_max;
   grub_addr_t addr;
   grub_err_t err;
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
 
   if (argc == 0)
     {
diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c
index 672c013..b481e46 100644
--- a/grub-core/loader/i386/pc/linux.c
+++ b/grub-core/loader/i386/pc/linux.c
@@ -388,7 +388,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ 
((unused)),
   grub_uint8_t *initrd_chunk;
   grub_addr_t initrd_addr;
   grub_err_t err;
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
 
   if (argc == 0)
     {
diff --git a/grub-core/loader/ia64/efi/linux.c 
b/grub-core/loader/ia64/efi/linux.c
index 87ac49f..eb78e6e 100644
--- a/grub-core/loader/ia64/efi/linux.c
+++ b/grub-core/loader/ia64/efi/linux.c
@@ -568,7 +568,7 @@ static grub_err_t
 grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
                 int argc, char *argv[])
 {
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
 
   if (argc == 0)
     {
diff --git a/grub-core/loader/mips/linux.c b/grub-core/loader/mips/linux.c
index ef64a5b..4a3e8c5 100644
--- a/grub-core/loader/mips/linux.c
+++ b/grub-core/loader/mips/linux.c
@@ -415,7 +415,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ 
((unused)),
   void *initrd_src;
   grub_addr_t initrd_dest;
   grub_err_t err;
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
 
   if (argc == 0)
     return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
diff --git a/grub-core/loader/powerpc/ieee1275/linux.c 
b/grub-core/loader/powerpc/ieee1275/linux.c
index 4a14f66..787d7dc 100644
--- a/grub-core/loader/powerpc/ieee1275/linux.c
+++ b/grub-core/loader/powerpc/ieee1275/linux.c
@@ -333,7 +333,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ 
((unused)),
   grub_size_t size = 0;
   grub_addr_t first_addr;
   grub_addr_t addr;
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
 
   if (argc == 0)
     {
diff --git a/grub-core/loader/sparc64/ieee1275/linux.c 
b/grub-core/loader/sparc64/ieee1275/linux.c
index de6ee2f..c5e8dfa 100644
--- a/grub-core/loader/sparc64/ieee1275/linux.c
+++ b/grub-core/loader/sparc64/ieee1275/linux.c
@@ -373,7 +373,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ 
((unused)),
   grub_addr_t paddr;
   grub_addr_t addr;
   int ret;
-  struct grub_linux_initrd_context initrd_ctx;
+  struct grub_linux_initrd_context initrd_ctx = { 0, };
 
   if (argc == 0)
     {
-- 
1.8.4.5

++++++ grub2-efinet-reopen-SNP-protocol-for-exclusive-use-by-grub.patch ++++++
>From 42d3848d0162ea8f824d63d57afb43b8b0a96860 Mon Sep 17 00:00:00 2001
From: Fedora Ninjas <grub2-ow...@fedoraproject.org>
Date: Sat, 15 Feb 2014 15:10:22 -0500
Subject: [PATCH 110/112] reopen SNP protocol for exclusive use by grub

References: bnc#871555
Patch-Mainline: no
---
 grub-core/net/drivers/efi/efinet.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/grub-core/net/drivers/efi/efinet.c 
b/grub-core/net/drivers/efi/efinet.c
index 2b344d6..a6e4c79 100644
--- a/grub-core/net/drivers/efi/efinet.c
+++ b/grub-core/net/drivers/efi/efinet.c
@@ -223,6 +223,7 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char 
**device,
 {
   struct grub_net_card *card;
   grub_efi_device_path_t *dp;
+  grub_efi_simple_network_t *net;
 
   dp = grub_efi_get_device_path (hnd);
   if (! dp)
@@ -250,6 +251,21 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char 
**device,
                                    &pxe_mode->dhcp_ack,
                                    sizeof (pxe_mode->dhcp_ack),
                                    1, device, path);
+    net = grub_efi_open_protocol (card->efi_handle, &net_io_guid,
+                                 GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE);
+    if (net) {
+      if (net->mode->state == GRUB_EFI_NETWORK_STOPPED
+         && efi_call_1 (net->start, net) != GRUB_EFI_SUCCESS)
+       continue;
+
+      if (net->mode->state == GRUB_EFI_NETWORK_STOPPED)
+       continue;
+
+      if (net->mode->state == GRUB_EFI_NETWORK_STARTED
+         && efi_call_3 (net->initialize, net, 0, 0) != GRUB_EFI_SUCCESS)
+       continue;
+      card->efi_net = net;
+    }
     return;
   }
 }
-- 
1.8.5.3

++++++ grub2-xen-legacy-config-device-name.patch ++++++
From: Andrey Borzenkov <arvidj...@gmail.com>
Subject: [PATCH] accept also hdX as alias to native Xen disk name
References: bnc#863821
Patch-Mainline: no

To assign correct disk numbers, sort disks by increasing order of handle
value.  This allows reusing legacy pv-grub menu.lst which is using hdX names.

Suggested-By: Michael Chang <mch...@suse.com>

---
 grub-core/disk/xen/xendisk.c | 45 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 36 insertions(+), 9 deletions(-)

diff --git a/grub-core/disk/xen/xendisk.c b/grub-core/disk/xen/xendisk.c
index 2b11c2a..b18a923 100644
--- a/grub-core/disk/xen/xendisk.c
+++ b/grub-core/disk/xen/xendisk.c
@@ -40,6 +40,7 @@ struct virtdisk
   grub_xen_evtchn_t evtchn;
   void *dma_page;
   grub_xen_grant_t dma_grant;
+  struct virtdisk *compat_next;
 };
 
 #define xen_wmb() mb()
@@ -47,6 +48,7 @@ struct virtdisk
 
 static struct virtdisk *virtdisks;
 static grub_size_t vdiskcnt;
+struct virtdisk *compat_head;
 
 static int
 grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
@@ -66,20 +68,32 @@ grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, 
void *hook_data,
 static grub_err_t
 grub_virtdisk_open (const char *name, grub_disk_t disk)
 {
-  grub_size_t i;
+  int i;
   grub_uint32_t secsize;
   char fdir[200];
   char *buf;
+  int num = -1;
+  struct virtdisk *vd;
 
-  for (i = 0; i < vdiskcnt; i++)
-    if (grub_strcmp (name, virtdisks[i].fullname) == 0)
+  /* For compatibility with pv-grub legacy menu.lst accept hdX as disk name */
+  if (name[0] == 'h' && name[1] == 'd' && name[2])
+    {
+      num = grub_strtoul (name + 2, 0, 10);
+      if (grub_errno)
+       {
+         grub_errno = 0;
+         num = -1;
+       }
+    }
+  for (i = 0, vd = compat_head; vd; vd = vd->compat_next, i++)
+    if (i == num || grub_strcmp (name, vd->fullname) == 0)
       break;
-  if (i == vdiskcnt)
+  if (!vd)
     return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a virtdisk");
-  disk->data = &virtdisks[i];
-  disk->id = i;
+  disk->data = vd;
+  disk->id = vd - virtdisks;
 
-  grub_snprintf (fdir, sizeof (fdir), "%s/sectors", virtdisks[i].backend_dir);
+  grub_snprintf (fdir, sizeof (fdir), "%s/sectors", vd->backend_dir);
   buf = grub_xenstore_get_file (fdir, NULL);
   if (!buf)
     return grub_errno;
@@ -87,8 +101,7 @@ grub_virtdisk_open (const char *name, grub_disk_t disk)
   if (grub_errno)
     return grub_errno;
 
-  grub_snprintf (fdir, sizeof (fdir), "%s/sector-size",
-                virtdisks[i].backend_dir);
+  grub_snprintf (fdir, sizeof (fdir), "%s/sector-size", vd->backend_dir);
   buf = grub_xenstore_get_file (fdir, NULL);
   if (!buf)
     return grub_errno;
@@ -264,6 +277,7 @@ fill (const char *dir, void *data)
   grub_err_t err;
   void *buf;
   struct evtchn_alloc_unbound alloc_unbound;
+  struct virtdisk **prev = &compat_head, *vd = compat_head;
 
   /* Shouldn't happen unles some hotplug happened.  */
   if (vdiskcnt >= *ctr)
@@ -374,6 +388,19 @@ fill (const char *dir, void *data)
 
   virtdisks[vdiskcnt].frontend_dir = grub_strdup (fdir);
 
+  /* For compatibility with pv-grub maintain linked list sorted by handle
+     value in increasing order. This allows mapping of (hdX) disk names
+     from legacy menu.lst */
+  while (vd)
+    {
+      if (vd->handle > virtdisks[vdiskcnt].handle)
+       break;
+      prev = &vd->compat_next;
+      vd = vd->compat_next;
+    }
+  virtdisks[vdiskcnt].compat_next = vd;
+  *prev = &virtdisks[vdiskcnt];
+
   vdiskcnt++;
   return 0;
 
++++++ translations-20130626.tar.xz -> translations-20140921.tar.xz ++++++
++++ 172975 lines of diff (skipped)

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to