Index: drmP.h =================================================================== RCS file: /cvs/dri/drm/bsd-core/drmP.h,v retrieving revision 1.73 diff -w -u -d -r1.73 drmP.h --- drmP.h 8 Nov 2005 20:24:59 -0000 1.73 +++ drmP.h 29 Jan 2006 07:31:28 -0000 @@ -341,7 +341,7 @@ #define DRM_COPY_FROM_USER_IOCTL(kern, user, size) \ if ( IOCPARM_LEN(cmd) != size) \ return EINVAL; \ - kern = *user; + memcpy(&kern, user, size); #define DRM_COPY_TO_USER(user, kern, size) \ copyout(kern, user, size) #define DRM_COPY_FROM_USER(kern, user, size) \ Index: drm_scatter.c =================================================================== RCS file: /cvs/dri/drm/bsd-core/drm_scatter.c,v retrieving revision 1.11 diff -w -u -d -r1.11 drm_scatter.c --- drm_scatter.c 26 Apr 2005 05:19:11 -0000 1.11 +++ drm_scatter.c 29 Jan 2006 07:31:28 -0000 @@ -35,7 +35,7 @@ void drm_sg_cleanup(drm_sg_mem_t *entry) { - free((void *)entry->handle, M_DRM); + free(entry->virtual, M_DRM); free(entry->busaddr, M_DRM); free(entry, M_DRM); } @@ -72,8 +72,9 @@ return ENOMEM; } - entry->handle = (long)malloc(pages << PAGE_SHIFT, M_DRM, + entry->virtual = malloc(pages << PAGE_SHIFT, M_DRM, M_WAITOK | M_ZERO); + entry->handle = (unsigned long)entry->virtual; if (entry->handle == 0) { drm_sg_cleanup(entry); return ENOMEM;