]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
fs/zfs/zfs: Fix possible insecure use of chunk size in zap_leaf_array_get()
authorDarren Kenny <darren.kenny@oracle.com>
Tue, 26 Oct 2021 15:02:39 +0000 (15:02 +0000)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 2 Nov 2021 15:48:59 +0000 (16:48 +0100)
In zap_leaf_array_get() the chunk size passed in is considered tainted
by Coverity, and is being used before it is tested for validity. To fix
this the assignment of "la" is moved until after the test of the value
of "chunk".

Fixes: CID 314014
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/fs/zfs/zfs.c

index 44e4e18147af21f7946707a6bf16d6c7a394c47f..e9d7a7d0e4f60ef66fc14025620cc454574f0b2a 100644 (file)
@@ -2229,7 +2229,7 @@ zap_leaf_array_get (zap_leaf_phys_t * l, grub_zfs_endian_t endian, int blksft,
 
   while (bseen < array_len)
     {
-      struct zap_leaf_array *la = &ZAP_LEAF_CHUNK (l, blksft, chunk)->l_array;
+      struct zap_leaf_array *la;
       grub_size_t toread = array_len - bseen;
 
       if (toread > ZAP_LEAF_ARRAY_BYTES)
@@ -2239,6 +2239,7 @@ zap_leaf_array_get (zap_leaf_phys_t * l, grub_zfs_endian_t endian, int blksft,
        /* Don't use grub_error because this error is to be ignored.  */
        return GRUB_ERR_BAD_FS;
 
+      la = &ZAP_LEAF_CHUNK (l, blksft, chunk)->l_array;
       grub_memcpy (buf + bseen,la->la_array,  toread);
       chunk = grub_zfs_to_cpu16 (la->la_next, endian);
       bseen += toread;