Qu Wenruo writes: > [BUG] > There is a bug report that using the latest trunk GCC, btrfs would cause > unterminated-string-initialization warning: > > linux-6.6/fs/btrfs/print-tree.c:29:49: error: initializer-string for array of ‘char’ is too long [-Werror=unterminated-string-initialization] > 29 | { BTRFS_BLOCK_GROUP_TREE_OBJECTID, "BLOCK_GROUP_TREE" }, > | > ^~~~~~~~~~~~~~~~~~ > > [CAUSE] > To print tree names we have an array of root_name_map structure, which > uses "char name[16];" to store the name string of a tree. > > But the following trees have names exactly at 16 chars length: > - "BLOCK_GROUP_TREE" > - "RAID_STRIPE_TREE" > > This means we will have no space for the terminating '\0', and can lead > to unexpected access when printing the name. > > [FIX] > Instead of "char name[16];" use "const char *" instead. > > Since the name strings are all read-only data, and are all NULL > terminated by default, there is not much need to bother the length at > all. > > Reported-by: Sam James > Signed-off-by: Qu Wenruo Thank you for the quick fix! I agree that this seems like the cleanest change. Tested-by: Sam James > --- > fs/btrfs/print-tree.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c > index 32dcea662da3..fc821aa446f0 100644 > --- a/fs/btrfs/print-tree.c > +++ b/fs/btrfs/print-tree.c > @@ -14,7 +14,7 @@ > > struct root_name_map { > u64 id; > - char name[16]; > + const char *name; > }; > > static const struct root_name_map root_map[] = {