svn commit: r359147 - head/stand/common
Toomas Soome
tsoome at FreeBSD.org
Thu Mar 19 17:27:09 UTC 2020
Author: tsoome
Date: Thu Mar 19 17:27:08 2020
New Revision: 359147
URL: https://svnweb.freebsd.org/changeset/base/359147
Log:
loader: misaligned access of dos_partition structure
armv7 crash due to misligned access of dos_partition dp_start field.
Allocate and make copy of dos_partition array to make sure the data
is aligned.
Reported by: marklmi at yahoo.com
Modified:
head/stand/common/part.c
Modified: head/stand/common/part.c
==============================================================================
--- head/stand/common/part.c Thu Mar 19 17:20:50 2020 (r359146)
+++ head/stand/common/part.c Thu Mar 19 17:27:08 2020 (r359147)
@@ -654,6 +654,7 @@ ptable_open(void *dev, uint64_t sectors, uint16_t sect
int has_ext;
#endif
table = NULL;
+ dp = NULL;
buf = malloc(sectorsize);
if (buf == NULL)
return (NULL);
@@ -708,7 +709,11 @@ ptable_open(void *dev, uint64_t sectors, uint16_t sect
goto out;
}
/* Check that we have PMBR. Also do some validation. */
- dp = (struct dos_partition *)(buf + DOSPARTOFF);
+ dp = malloc(NDOSPART * sizeof(struct dos_partition));
+ if (dp == NULL)
+ goto out;
+ bcopy(buf + DOSPARTOFF, dp, NDOSPART * sizeof(struct dos_partition));
+
/*
* In mac we can have PMBR partition in hybrid MBR;
* that is, MBR partition which has DOSPTYP_PMBR entry defined as
@@ -770,6 +775,7 @@ ptable_open(void *dev, uint64_t sectors, uint16_t sect
#endif /* LOADER_MBR_SUPPORT */
#endif /* LOADER_MBR_SUPPORT || LOADER_GPT_SUPPORT */
out:
+ free(dp);
free(buf);
return (table);
}
More information about the svn-src-head
mailing list