zephyr/drivers/ipm/ipm_handlers.c
Leandro Pereira c200367b68 drivers: Perform a runtime check if a driver is capable of an operation
Driver APIs might not implement all operations, making it possible for
a user thread to get the kernel to execute a function at 0x00000000.

Perform runtime checks in all the driver handlers, checking if they're
capable of performing the requested operation.

Fixes #6907.

Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
2018-04-26 02:57:12 +05:30

35 lines
800 B
C

/*
* Copyright (c) 2017 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <syscall_handler.h>
#include <ipm.h>
_SYSCALL_HANDLER(ipm_send, dev, wait, id, data, size)
{
_SYSCALL_DRIVER_IPM(dev, send);
_SYSCALL_MEMORY_READ(data, size);
return _impl_ipm_send((struct device *)dev, wait, id,
(const void *)data, size);
}
_SYSCALL_HANDLER(ipm_max_data_size_get, dev)
{
_SYSCALL_DRIVER_IPM(dev, max_data_size_get);
return _impl_max_data_size_get((struct device *)dev);
}
_SYSCALL_HANDLER(ipm_max_id_val_get, dev)
{
_SYSCALL_DRIVER_IPM(dev, max_id_val_get);
return _impl_max_id_val_get((struct device *)dev);
}
_SYSCALL_HANDLER(ipm_set_enabled, dev, enable)
{
_SYSCALL_DRIVER_IPM(dev, set_enabled);
return _impl_ipm_set_enabled((struct device *)dev, enable);
}