From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1ctzcx-0002xT-D1 for mharc-grub-devel@gnu.org; Fri, 31 Mar 2017 12:42:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53916) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ctzcv-0002wR-Um for grub-devel@gnu.org; Fri, 31 Mar 2017 12:42:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ctzcr-0000MW-2i for grub-devel@gnu.org; Fri, 31 Mar 2017 12:42:18 -0400 Received: from mail-lf0-x243.google.com ([2a00:1450:4010:c07::243]:33188) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ctzcq-0000Le-S2 for grub-devel@gnu.org; Fri, 31 Mar 2017 12:42:13 -0400 Received: by mail-lf0-x243.google.com with SMTP id r36so7844954lfi.0 for ; Fri, 31 Mar 2017 09:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=w7T94kO3Ao+kHVGTevmMfm1YWKWj/V5f42e3AUz/iZw=; b=XvzmalvIRwxCOk/Qjc+yCLbPuRfFErQyqKNRxRiBTd1sIa+0zGmc0hj5u0QHahTwH7 REhEkmNv14NGXc4rAYcv0btrzFIuFFfd9xr6E8unCX5jMJVAN48L5CLu7AM47eODCr6s 3TPKjqdzMDF94BdE3xzOuDTPYUcUYHreSNRTRRpb2WLQ5VWT5qtA00VU6unKERW+Zy1O jVA1cc3z0vkav/IT7Ywh7V7isylHYETbJUd9L0VWvmO22xpJh7ksTVOQm+ha0oi2RXtq OenHl1n00SSR1O0oSRal6+XpxTz+mQs783txVqO9wmB780gDZdEyYIeFcgd6EK9xtJmZ ajjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=w7T94kO3Ao+kHVGTevmMfm1YWKWj/V5f42e3AUz/iZw=; b=SVFf7+chuzr0UizomBDCDaLQTqAJY6bZ6yQ4AJD+48pdiNKp0NbAr9FLPKqFYEUFB6 fL9CkAqZPpOUU8eCdLPdgcoinKCwX0BUQZUuAG1cSmDGHT1oO242fg1IcdxAmykF1yxj 0igrlbkUOmcOv+1kIUUsBH33/WdrQhf/NELVRjEG6wioDOwM+mY/mLZuIM3KLYgCwDEZ TnSKZe6+dhxBIEgFNLB/Jn7uN6TLC+/U0JwzWZLCej6ArYrBFDVemoOiuxtjaN7dDKve Ln8xHzkwpXo4Ee0HJBNMtIQFF+kCM38b3R3roBGasWwYn3MflpunZfUtnIl9dpNTzyRg 6g5Q== X-Gm-Message-State: AFeK/H3XDO1LBSXn24ccx3RRI9sZMf+hQ+2BCvdYSAA8pM9xHkeQhWDIWECaqjqeuo9Gbg== X-Received: by 10.25.20.101 with SMTP id k98mr1153592lfi.13.1490978531331; Fri, 31 Mar 2017 09:42:11 -0700 (PDT) Received: from localhost.localdomain (ppp109-252-90-38.pppoe.spdop.ru. [109.252.90.38]) by smtp.gmail.com with ESMTPSA id 99sm1033879ljb.23.2017.03.31.09.42.10 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 31 Mar 2017 09:42:10 -0700 (PDT) From: Andrei Borzenkov To: grub-devel@gnu.org Subject: [PATCH] btrfs: avoid "used uninitialized" error with GCC7 Date: Fri, 31 Mar 2017 19:42:06 +0300 Message-Id: <1490978526-13303-1-git-send-email-arvidjaar@gmail.com> X-Mailer: git-send-email 2.7.4 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:4010:c07::243 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Mar 2017 16:42:19 -0000 sblock was local and so considered new variable on every loop iteration. While on it, dynamically allocate buffer to reduce stack usage. Closes: 50597 --- grub-core/fs/btrfs.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c index 9cffa91..99e81f9 100644 --- a/grub-core/fs/btrfs.c +++ b/grub-core/fs/btrfs.c @@ -229,24 +229,29 @@ read_sblock (grub_disk_t disk, struct grub_btrfs_superblock *sb) { unsigned i; grub_err_t err = GRUB_ERR_NONE; + struct grub_btrfs_superblock *sblock; + + sblock = grub_malloc (sizeof (*sblock)); + if (sblock == NULL) + return grub_errno; + for (i = 0; i < ARRAY_SIZE (superblock_sectors); i++) { - struct grub_btrfs_superblock sblock; /* Don't try additional superblocks beyond device size. */ - if (i && (grub_le_to_cpu64 (sblock.this_device.size) + if (i && (grub_le_to_cpu64 (sblock->this_device.size) >> GRUB_DISK_SECTOR_BITS) <= superblock_sectors[i]) break; err = grub_disk_read (disk, superblock_sectors[i], 0, - sizeof (sblock), &sblock); + sizeof (*sblock), sblock); if (err == GRUB_ERR_OUT_OF_RANGE) break; - if (grub_memcmp ((char *) sblock.signature, GRUB_BTRFS_SIGNATURE, + if (grub_memcmp ((char *) sblock->signature, GRUB_BTRFS_SIGNATURE, sizeof (GRUB_BTRFS_SIGNATURE) - 1) != 0) break; - if (i == 0 || grub_le_to_cpu64 (sblock.generation) + if (i == 0 || grub_le_to_cpu64 (sblock->generation) > grub_le_to_cpu64 (sb->generation)) - grub_memcpy (sb, &sblock, sizeof (sblock)); + grub_memcpy (sb, sblock, sizeof (*sblock)); } if ((err == GRUB_ERR_OUT_OF_RANGE || !err) && i == 0) @@ -255,6 +260,7 @@ read_sblock (grub_disk_t disk, struct grub_btrfs_superblock *sb) if (err == GRUB_ERR_OUT_OF_RANGE) grub_errno = err = GRUB_ERR_NONE; + grub_free (sblock); return err; } -- tg: (8014b7b..) bug/50597 (depends on: master)