65 lines
2.7 KiB
Diff
65 lines
2.7 KiB
Diff
|
From a8367596ca63156509eed0b332a077247765b811 Mon Sep 17 00:00:00 2001
|
||
|
From: Robert Marshall <rmarshall@redhat.com>
|
||
|
Date: Tue, 28 Feb 2017 18:31:56 -0500
|
||
|
Subject: [PATCH 40/55] Fix initial saved_entry read issue (#1285601)
|
||
|
|
||
|
If a system has never had a kernel upgrade/rollback then grubby
|
||
|
does not read saved_entry properly. Added a guard to catch
|
||
|
saved_entry and read it to pick the proper index in these cases.
|
||
|
|
||
|
Resolves: rhbz#1285601
|
||
|
---
|
||
|
grubby.c | 29 +++++++++++++++++++++++++++--
|
||
|
1 file changed, 27 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/grubby.c b/grubby.c
|
||
|
index 9ccad2735dd..974b81c7864 100644
|
||
|
--- a/grubby.c
|
||
|
+++ b/grubby.c
|
||
|
@@ -2522,6 +2522,9 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
|
||
|
struct singleEntry *bootEntry, *newDefault;
|
||
|
int indexToVerify, firstKernelEntryIndex, currentLookupIndex;
|
||
|
|
||
|
+ /* initialize */
|
||
|
+ currentLookupIndex = FIRST_ENTRY_INDEX;
|
||
|
+
|
||
|
/* handle the two cases where the user explictly picks the default
|
||
|
* boot entry index as it would exist post-modification */
|
||
|
|
||
|
@@ -2587,8 +2590,30 @@ void setDefaultImage(struct grubConfig *config, int isAddingBootEntry,
|
||
|
config->defaultImage++;
|
||
|
}
|
||
|
} else {
|
||
|
- /* use pre-existing default entry */
|
||
|
- currentLookupIndex = config->defaultImage;
|
||
|
+ /* check to see if the default is stored in the environment */
|
||
|
+ if (config->defaultImage < FIRST_ENTRY_INDEX) {
|
||
|
+ if (config->defaultImage == DEFAULT_SAVED || config->defaultImage == DEFAULT_SAVED_GRUB2)
|
||
|
+ {
|
||
|
+ if (config->cfi->defaultIsSaved) {
|
||
|
+ if (config->cfi->getEnv) {
|
||
|
+ char *defaultTitle = config->cfi->getEnv(config->cfi, "saved_entry");
|
||
|
+
|
||
|
+ if (defaultTitle) {
|
||
|
+ if (isnumber(defaultTitle)) {
|
||
|
+ currentLookupIndex = atoi(defaultTitle);
|
||
|
+ } else {
|
||
|
+ findEntryByTitle(config, defaultTitle, ¤tLookupIndex);
|
||
|
+ }
|
||
|
+ /* set the default Image to an actual index */
|
||
|
+ config->defaultImage = currentLookupIndex;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+ } else {
|
||
|
+ /* use pre-existing default entry from the file*/
|
||
|
+ currentLookupIndex = config->defaultImage;
|
||
|
+ }
|
||
|
|
||
|
if (isAddingBootEntry
|
||
|
&& (newBootEntryIndex <= config->defaultImage)) {
|
||
|
--
|
||
|
2.17.1
|
||
|
|