Module Name:    src
Committed By:   riastradh
Date:           Wed Jul 24 02:00:58 UTC 2013

Modified Files:
        src/sys/external/bsd/drm2/dist/drm [riastradh-drm2]: drm_buffer.c

Log Message:
Avoid pointer arithmetic on void * in drm_buffer.c.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.2 -r1.1.1.1.2.3 \
    src/sys/external/bsd/drm2/dist/drm/drm_buffer.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/drm_buffer.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_buffer.c:1.1.1.1.2.2 src/sys/external/bsd/drm2/dist/drm/drm_buffer.c:1.1.1.1.2.3
--- src/sys/external/bsd/drm2/dist/drm/drm_buffer.c:1.1.1.1.2.2	Tue Jul 23 21:28:21 2013
+++ src/sys/external/bsd/drm2/dist/drm/drm_buffer.c	Wed Jul 24 02:00:58 2013
@@ -115,6 +115,10 @@ int drm_buffer_copy_from_user(struct drm
 	for (idx = 0; idx < nr_pages; ++idx) {
 
 		if (DRM_COPY_FROM_USER(buf->data[idx],
+#ifdef __NetBSD__
+			/* Pointer arithmetic on void * is not kosher...  */
+			(const char *)
+#endif
 			user_data + idx * PAGE_SIZE,
 			min(PAGE_SIZE, size - idx * PAGE_SIZE))) {
 			DRM_ERROR("Failed to copy user data (%p) to drm buffer"
@@ -171,10 +175,16 @@ void *drm_buffer_read_object(struct drm_
 	} else {
 		/* The object is split which forces copy to temporary object.*/
 		int beginsz = PAGE_SIZE - idx;
+
 		memcpy(stack_obj, &buf->data[page][idx], beginsz);
 
+#ifdef __NetBSD__
+		memcpy((char *)stack_obj + beginsz, &buf->data[page + 1][0],
+				objsize - beginsz);
+#else
 		memcpy(stack_obj + beginsz, &buf->data[page + 1][0],
 				objsize - beginsz);
+#endif
 
 		obj = stack_obj;
 	}

Reply via email to