Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat/netbsd32 From maxv@:
details: https://anonhg.NetBSD.org/src/rev/d42d5a2d714c
branches: trunk
changeset: 964876:d42d5a2d714c
user: christos <christos%NetBSD.org@localhost>
date: Tue Aug 20 14:26:05 2019 +0000
description:
>From maxv@:
1) In compat_drm_agp_info(), seems like it should be info64to32.
2) In compat_drm_getstats(), the assignments in the loop are inverted, it's
st32 which should be set to the values of st64, not the other way around.
3) In compat_drm_dma(), again inverted 32<->64, and there is no copyout (?).
4) In compat_drm_agp_enable(), m64 is uninitialized, everything is wrong in
this function it seems.
diffstat:
sys/compat/netbsd32/netbsd32_drm.c | 44 +++++++++++++++++++------------------
1 files changed, 23 insertions(+), 21 deletions(-)
diffs (106 lines):
diff -r 23abb97c6565 -r d42d5a2d714c sys/compat/netbsd32/netbsd32_drm.c
--- a/sys/compat/netbsd32/netbsd32_drm.c Tue Aug 20 14:12:33 2019 +0000
+++ b/sys/compat/netbsd32/netbsd32_drm.c Tue Aug 20 14:26:05 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_drm.c,v 1.2 2019/08/20 09:55:49 christos Exp $ */
+/* $NetBSD: netbsd32_drm.c,v 1.3 2019/08/20 14:26:05 christos Exp $ */
/*
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_drm.c,v 1.2 2019/08/20 09:55:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_drm.c,v 1.3 2019/08/20 14:26:05 christos Exp $");
#include <compat/netbsd32/netbsd32.h>
#include <compat/netbsd32/netbsd32_ioctl.h>
@@ -338,16 +338,18 @@
return error;
st64.count = st32.count;
+ if (st64.count > __arraycount(st64.data))
+ return EINVAL;
error = drm_ioctl(file, DRM_IOCTL_GET_STATS, &st64);
if (error)
return error;
- // XXX: or does that need to be count?
- for (int i = 0; i < __arraycount(st64.data); ++i) {
- st64.data[i].value = st32.data[i].value;
- st64.data[i].type = st32.data[i].type;
+ for (int i = 0; i < st64.count; ++i) {
+ st32.data[i].value = st64.data[i].value;
+ st32.data[i].type = st64.data[i].type;
}
+ st32.count = st64.count;
return copyout(arg, &st32, sizeof(s32));
}
@@ -565,15 +567,15 @@
if ((error = copyin(&d32, arg, sizeof(d32))) != 0)
return error;
- dma64to32(&d32, &d64);
+ dma32to64(&d64, &d32);
error = drm_ioctl(file, DRM_IOCTL_DMA, &d64);
if (error)
return error;
- dma32to64(&d64, &d32);
+ dma64to32(&d32, &d64);
- return 0;
+ return copyout(arg, &d32, sizeof(d32));
}
//XXX:i commented the below line for later use
@@ -592,7 +594,7 @@
if ((error = copyin(&m32, arg, sizeof(m32))) != 0)
return error;
- m32.mode = m64.mode;
+ m64.mode = m32.mode;
return drm_ioctl(file, DRM_IOCTL_AGP_ENABLE, &m64);
}
@@ -612,17 +614,17 @@
} drm_agp_info32_t;
static void
-info32to64(struct drm_agp_info *i64, const drm_agp_info32_t *i32)
+info64to32(drm_agp_info32_t *i32, const struct drm_agp_info *i64)
{
- i64->agp_version_major = i32->agp_version_major;
- i64->agp_version_minor = i32->agp_version_minor;
- i64->mode = i32->mode;
- i64->aperture_base = i32->aperture_base;
- i64->aperture_size = i32->aperture_size;
- i64->memory_allowed = i32->memory_allowed;
- i64->memory_used = i64->memory_used;
- i64->id_vendor = i32->id_vendor;
- i64->id_device = i32->id_device;
+ i32->agp_version_major = i64->agp_version_major;
+ i32->agp_version_minor = i64->agp_version_minor;
+ i32->mode = i64->mode;
+ i32->aperture_base = i64->aperture_base;
+ i32->aperture_size = i64->aperture_size;
+ i32->memory_allowed = i64->memory_allowed;
+ i32->memory_used = i64->memory_used;
+ i32->id_vendor = i64->id_vendor;
+ i32->id_device = i64->id_device;
}
static int
@@ -636,7 +638,7 @@
if (error)
return error;
- info32to64(&i64,&i32);
+ info64to32(&i32, &i64);
return copyout(arg, &i32, sizeof(i32));
Home |
Main Index |
Thread Index |
Old Index