stand: Unbreak FAT32 in loader

This corrects an issue introduced in b4cb3fe0e3, where a freshly
allocated `DOS_FS` structure would not be initialized properly before
use in `dos_open`.

In case of FAT32 file systems, this would leave `fs->dirents`
uninitialized and - depending on its content and due to checks in
`parsebs` - prevent mounting the file system successfully.

This particularily impacted the EFI loader, as it was sometimes not
able to read files from a FAT32-formatted EFI partition, including
LoaderEnv (`/efi/freebsd/loader.env`).

Accepted by:	imp
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D36482
This commit is contained in:
Michael Gmelin 2022-09-07 18:56:49 +02:00
parent b3b6a959c8
commit 0eb736c0f6

View File

@ -321,7 +321,7 @@ dos_open(const char *path, struct open_file *fd)
if (mnt == NULL) {
/* Allocate mount structure, associate with open */
if ((fs = malloc(sizeof(DOS_FS))) == NULL)
if ((fs = calloc(1, sizeof(DOS_FS))) == NULL)
return (errno);
if ((err = dos_mount_impl(fs, fd))) {
free(fs);