From 34f50cffe78b54de54c329f3de0add8b54c92f3e Mon Sep 17 00:00:00 2001 From: dillon Date: Tue, 9 May 2000 17:43:21 +0000 Subject: 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. --- sys/kern/sys_generic.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'sys/kern/sys_generic.c') diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index 5ef9059..687e4f9 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -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); -- cgit v1.1