Blame SOURCES/0071-Fix-initial-saved_entry-read-issue-1285601.patch

16aa69
From 332ec67718959920c26283854ec9280e4023a437 Mon Sep 17 00:00:00 2001
16aa69
From: Robert Marshall <rmarshall@redhat.com>
16aa69
Date: Mon, 6 Mar 2017 15:57:54 -0500
16aa69
Subject: [PATCH] Fix initial saved_entry read issue (#1285601)
16aa69
16aa69
If a system has never had a kernel upgrade/rollback then grubby
16aa69
does not read saved_entry properly.  Added a guard to catch
16aa69
saved_entry and read it to pick the proper index in these cases.
16aa69
16aa69
Resolves: rhbz#1285601
16aa69
---
16aa69
 grubby.c | 29 +++++++++++++++++++++++++++--
16aa69
 1 file changed, 27 insertions(+), 2 deletions(-)
16aa69
16aa69
diff --git a/grubby.c b/grubby.c
16aa69
index de76b56..4d3834b 100644
16aa69
--- a/grubby.c
16aa69
+++ b/grubby.c
16aa69
@@ -2620,6 +2620,9 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
16aa69
 	struct singleEntry *bootEntry, *newDefault;
16aa69
 	int indexToVerify, firstKernelEntryIndex, currentLookupIndex;
16aa69
 
16aa69
+        /* initialize */
16aa69
+        currentLookupIndex = FIRST_ENTRY_INDEX;
16aa69
+
16aa69
 	/* handle the two cases where the user explictly picks the default
16aa69
 	 * boot entry index as it would exist post-modification */
16aa69
 
16aa69
@@ -2685,8 +2688,30 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
16aa69
 			config->defaultImage++;
16aa69
 		}
16aa69
 	} else {
16aa69
-		/* use pre-existing default entry */
16aa69
-		currentLookupIndex = config->defaultImage;
16aa69
+                /* check to see if the default is stored in the environment */
16aa69
+                if (config->defaultImage < FIRST_ENTRY_INDEX) {
16aa69
+                    if (config->defaultImage == DEFAULT_SAVED || config->defaultImage == DEFAULT_SAVED_GRUB2)
16aa69
+                    {
16aa69
+                        if (config->cfi->defaultIsSaved) {
16aa69
+                            if (config->cfi->getEnv) {
16aa69
+                                char *defaultTitle = config->cfi->getEnv(config->cfi, "saved_entry");
16aa69
+
16aa69
+                                if (defaultTitle) {
16aa69
+                                    if (isnumber(defaultTitle)) {
16aa69
+                                        currentLookupIndex = atoi(defaultTitle);
16aa69
+                                    } else {
16aa69
+                                        findEntryByTitle(config, defaultTitle, &currentLookupIndex);
16aa69
+                                    }
16aa69
+                                    /* set the default Image to an actual index */
16aa69
+                                    config->defaultImage = currentLookupIndex;
16aa69
+                                }
16aa69
+                            }
16aa69
+                         }
16aa69
+                    }
16aa69
+                } else {
16aa69
+                        /* use pre-existing default entry from the file*/
16aa69
+                        currentLookupIndex = config->defaultImage;
16aa69
+                }
16aa69
 
16aa69
 		if (isAddingBootEntry
16aa69
 		    && (newBootEntryIndex <= config->defaultImage)) {
16aa69
-- 
16aa69
2.9.3
16aa69