Some ioctl routines assume that the ioctl buffer is aligned, but a

char[] declaration makes no such guarentee.  A union is used to force
    alignment of the char buffer.
This commit is contained in:
Matthew Dillon 2000-05-09 17:43:21 +00:00
parent 0cc9df7d62
commit d2ba455c2c

View File

@ -496,7 +496,10 @@ ioctl(p, uap)
caddr_t data, memp;
int tmp;
#define STK_PARAMS 128
char stkbuf[STK_PARAMS];
union {
char stkbuf[STK_PARAMS];
long align;
} ubuf;
fdp = p->p_fd;
if ((u_int)uap->fd >= fdp->fd_nfiles ||
@ -523,11 +526,11 @@ ioctl(p, uap)
if (size > IOCPARM_MAX)
return (ENOTTY);
memp = NULL;
if (size > sizeof (stkbuf)) {
if (size > sizeof (ubuf.stkbuf)) {
memp = (caddr_t)malloc((u_long)size, M_IOCTLOPS, M_WAITOK);
data = memp;
} else
data = stkbuf;
data = ubuf.stkbuf;
if (com&IOC_IN) {
if (size) {
error = copyin(uap->data, data, (u_int)size);