From fee73f4e6d236a69f40e5c49e45f5f28a991d1ac Mon Sep 17 00:00:00 2001 From: Zheng Da Date: Sun, 8 Aug 2010 07:15:04 +0200 Subject: check emul_device_t object in all DS server RPCs. --- libmachdev/ds_routines.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libmachdev/ds_routines.c b/libmachdev/ds_routines.c index 71457e03..93ac7ecc 100644 --- a/libmachdev/ds_routines.c +++ b/libmachdev/ds_routines.c @@ -226,6 +226,8 @@ ds_device_write (device_t dev, mach_port_t reply_port, return D_INVALID_SIZE; device = mach_convert_port_to_device (dev); + if (device == NULL) + return D_INVALID_OPERATION; if (! device->emul_ops->write) { @@ -259,6 +261,8 @@ ds_device_write_inband (device_t dev, mach_port_t reply_port, return D_INVALID_SIZE; device = mach_convert_port_to_device (dev); + if (device == NULL) + return D_INVALID_OPERATION; if (! device->emul_ops->write_inband) { @@ -288,6 +292,8 @@ ds_device_read (device_t dev, mach_port_t reply_port, return D_NO_SUCH_DEVICE; device = mach_convert_port_to_device (dev); + if (device == NULL) + return D_INVALID_OPERATION; if (! device->emul_ops->read) { @@ -316,6 +322,8 @@ ds_device_read_inband (device_t dev, mach_port_t reply_port, return D_NO_SUCH_DEVICE; device = mach_convert_port_to_device (dev); + if (device == NULL) + return D_INVALID_OPERATION; if (! device->emul_ops->read_inband) { @@ -342,6 +350,8 @@ ds_device_set_status (device_t dev, dev_flavor_t flavor, return D_NO_SUCH_DEVICE; device = mach_convert_port_to_device (dev); + if (device == NULL) + return D_INVALID_OPERATION; if (! device->emul_ops->set_status) { @@ -367,6 +377,8 @@ ds_device_get_status (device_t dev, dev_flavor_t flavor, dev_status_t status, return D_NO_SUCH_DEVICE; device = mach_convert_port_to_device (dev); + if (device == NULL) + return D_INVALID_OPERATION; if (! device->emul_ops->get_status) { @@ -392,6 +404,8 @@ ds_device_set_filter (device_t dev, mach_port_t receive_port, int priority, return D_NO_SUCH_DEVICE; device = mach_convert_port_to_device (dev); + if (device == NULL) + return D_INVALID_OPERATION; if (! device->emul_ops->set_filter) { -- cgit v1.2.3