Verify the object type before using variables from it.

In addition, use CTASSERT(9) instead of KASSERT(9).
This commit is contained in:
jruoho 2010-01-31 20:38:11 +00:00
parent 0d233c805b
commit b00d9a31ae

View File

@ -1,4 +1,4 @@
/* $NetBSD: wmi_acpi.c,v 1.11 2010/01/23 13:32:45 jruoho Exp $ */
/* $NetBSD: wmi_acpi.c,v 1.12 2010/01/31 20:38:11 jruoho Exp $ */
/*-
* Copyright (c) 2009, 2010 Jukka Ruohonen <jruohonen@iki.fi>
@ -27,7 +27,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.11 2010/01/23 13:32:45 jruoho Exp $");
__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.12 2010/01/31 20:38:11 jruoho Exp $");
#include <sys/param.h>
#include <sys/device.h>
@ -209,16 +209,20 @@ acpi_wmi_init(struct acpi_wmi_softc *sc)
goto fail;
obj = buf.Pointer;
len = obj->Buffer.Length;
KASSERT(obj->Type == ACPI_TYPE_BUFFER);
if (obj->Type != ACPI_TYPE_BUFFER) {
rv = AE_TYPE;
goto fail;
}
len = obj->Buffer.Length;
if (len != obj->Package.Count) {
rv = AE_BAD_VALUE;
goto fail;
}
KASSERT(sizeof(struct guid_t) == 20);
CTASSERT(sizeof(struct guid_t) == 20);
if (len < sizeof(struct guid_t) ||
len % sizeof(struct guid_t) != 0) {