Module Name: src Committed By: christos Date: Fri May 17 18:50:40 UTC 2019
Modified Files: src/sys/kern: subr_disk_mbr.c Log Message: Factor out the magic checking code for the label, and make it not depend on alignment. To generate a diff of this commit: cvs rdiff -u -r1.50 -r1.51 src/sys/kern/subr_disk_mbr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/subr_disk_mbr.c diff -u src/sys/kern/subr_disk_mbr.c:1.50 src/sys/kern/subr_disk_mbr.c:1.51 --- src/sys/kern/subr_disk_mbr.c:1.50 Wed Apr 3 18:10:52 2019 +++ src/sys/kern/subr_disk_mbr.c Fri May 17 14:50:40 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_disk_mbr.c,v 1.50 2019/04/03 22:10:52 christos Exp $ */ +/* $NetBSD: subr_disk_mbr.c,v 1.51 2019/05/17 18:50:40 christos Exp $ */ /* * Copyright (c) 1982, 1986, 1988 Regents of the University of California. @@ -54,7 +54,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_disk_mbr.c,v 1.50 2019/04/03 22:10:52 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_disk_mbr.c,v 1.51 2019/05/17 18:50:40 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -568,6 +568,12 @@ look_netbsd_part(mbr_args_t *a, mbr_part return SCAN_CONTINUE; } +static bool +check_label_magic(const struct disklabel *dlp, uint32_t diskmagic) +{ + return memcmp(&dlp->d_magic, &diskmagic, sizeof(diskmagic)) == 0 && + memcmp(&dlp->d_magic2, &diskmagic, sizeof(diskmagic)) == 0; +} #ifdef DISKLABEL_EI /* @@ -617,11 +623,10 @@ validate_label(mbr_args_t *a, uint label dlp = (void *)dlp_byte; break; } - if (dlp->d_magic != DISKMAGIC || dlp->d_magic2 != DISKMAGIC) + if (!check_label_magic(dlp, DISKMAGIC)) #ifdef DISKLABEL_EI { - if (bswap32(dlp->d_magic) != DISKMAGIC || - bswap32(dlp->d_magic2) != DISKMAGIC) + if (!check_label_magic(dlp, bswap32(DISKMAGIC))) continue; /*