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;
}