1From ca5d9ac206043b1fb4cb06259272fb1c5946bb6d Mon Sep 17 00:00:00 2001 2From: Daniel Axtens <dja@axtens.net> 3Date: Mon, 18 Jan 2021 17:06:19 +1100 4Subject: [PATCH] fs/nilfs2: Properly bail on errors in 5 grub_nilfs2_btree_node_lookup() 6 7We just introduced an error return in grub_nilfs2_btree_node_lookup(). 8Make sure the callers catch it. 9 10At the same time, make sure that grub_nilfs2_btree_node_lookup() always 11inits the index pointer passed to it. 12 13Signed-off-by: Daniel Axtens <dja@axtens.net> 14Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> 15Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com> 16--- 17 grub-core/fs/nilfs2.c | 11 ++++++++--- 18 1 file changed, 8 insertions(+), 3 deletions(-) 19 20diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c 21index 43ac1ad..aaba002 100644 22--- a/grub-core/fs/nilfs2.c 23+++ b/grub-core/fs/nilfs2.c 24@@ -433,7 +433,7 @@ grub_nilfs2_btree_node_lookup (struct grub_nilfs2_data *data, 25 grub_uint64_t key, int *indexp) 26 { 27 grub_uint64_t nkey; 28- int index, low, high, s; 29+ int index = 0, low, high, s; 30 31 low = 0; 32 33@@ -441,10 +441,10 @@ grub_nilfs2_btree_node_lookup (struct grub_nilfs2_data *data, 34 if (high >= grub_nilfs2_btree_node_nchildren_max (data, node)) 35 { 36 grub_error (GRUB_ERR_BAD_FS, "too many children"); 37+ *indexp = index; 38 return 0; 39 } 40 41- index = 0; 42 s = 0; 43 while (low <= high) 44 { 45@@ -526,6 +526,10 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, 46 level = grub_nilfs2_btree_get_level (node); 47 48 found = grub_nilfs2_btree_node_lookup (data, node, key, &index); 49+ 50+ if (grub_errno != GRUB_ERR_NONE) 51+ goto fail; 52+ 53 ptr = grub_nilfs2_btree_node_get_ptr (data, node, index); 54 if (need_translate) 55 ptr = grub_nilfs2_dat_translate (data, ptr); 56@@ -550,7 +554,8 @@ grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, 57 else 58 index = 0; 59 60- if (index < grub_nilfs2_btree_node_nchildren_max (data, node)) 61+ if (index < grub_nilfs2_btree_node_nchildren_max (data, node) && 62+ grub_errno == GRUB_ERR_NONE) 63 { 64 ptr = grub_nilfs2_btree_node_get_ptr (data, node, index); 65 if (need_translate) 66-- 672.14.2 68 69