summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Peereboom <marco@cvs.openbsd.org>2005-07-29 16:56:14 +0000
committerMarco Peereboom <marco@cvs.openbsd.org>2005-07-29 16:56:14 +0000
commit2f90a71b275e539c08bbf2cc24b1991aca20a9c1 (patch)
treec761a1451a28b5bf567113592ce4d67280a22f5b
parent259078c317bce5d49e4420a8a0618038cff2f741 (diff)
Per art's email, don't keep something bigger than > 256 bytes on the stack.
-rw-r--r--sys/dev/ic/ami.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/ic/ami.c b/sys/dev/ic/ami.c
index 2a4075db29b..ce327a32f1e 100644
--- a/sys/dev/ic/ami.c
+++ b/sys/dev/ic/ami.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ami.c,v 1.49 2005/07/29 16:01:30 marco Exp $ */
+/* $OpenBSD: ami.c,v 1.50 2005/07/29 16:56:13 marco Exp $ */
/*
* Copyright (c) 2001 Michael Shalayeff
@@ -1866,18 +1866,25 @@ ami_ioctl_inq(sc, bi)
struct ami_softc *sc;
bioc_inq *bi;
{
- char plist[AMI_BIG_MAX_PDRIVES];
struct ami_big_diskarray *p; /* struct too large for stack */
+ char *plist;
int i, s, t;
int off;
int error = 0;
p = malloc(sizeof *p, M_DEVBUF, M_NOWAIT);
if (!p) {
- printf("%s: no memory for raw interface\n",sc->sc_dev.dv_xname);
+ printf("%s: no memory for disk array\n",sc->sc_dev.dv_xname);
return (ENOMEM);
}
+ plist = malloc(AMI_BIG_MAX_PDRIVES, M_DEVBUF, M_NOWAIT);
+ if (!plist) {
+ printf("%s: no memory for disk list\n",sc->sc_dev.dv_xname);
+ error = ENOMEM;
+ goto bail;
+ }
+
if (ami_mgmt(sc, AMI_FCOP, AMI_FC_RDCONF, 0, sizeof *p, p)) {
error = EINVAL;
goto bail;
@@ -1903,6 +1910,7 @@ ami_ioctl_inq(sc, bi)
}
}
+ free(plist, M_DEVBUF);
bail:
free(p, M_DEVBUF);