syscalls: remove policy from handler checks
The various macros to do checks in system call handlers all
implictly would generate a kernel oops if a check failed.
This is undesirable for a few reasons:
* System call handlers that acquire resources in the handler
have no good recourse for cleanup if a check fails.
* In some cases we may want to propagate a return value back
to the caller instead of just killing the calling thread,
even though the base API doesn't do these checks.
These macros now all return a value, if nonzero is returned
the check failed. K_OOPS() now wraps these calls to generate
a kernel oops.
At the moment, the policy for all APIs has not changed. They
still all oops upon a failed check/
The macros now use the Z_ notation for private APIs.
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
diff --git a/drivers/adc/adc_handlers.c b/drivers/adc/adc_handlers.c
index 79f7d4c..b7051b9 100644
--- a/drivers/adc/adc_handlers.c
+++ b/drivers/adc/adc_handlers.c
@@ -7,34 +7,36 @@
#include <adc.h>
#include <syscall_handler.h>
-_SYSCALL_HANDLER(adc_enable, dev)
+Z_SYSCALL_HANDLER(adc_enable, dev)
{
- _SYSCALL_DRIVER_ADC(dev, enable);
+ Z_OOPS(Z_SYSCALL_DRIVER_ADC(dev, enable));
_impl_adc_enable((struct device *)dev);
return 0;
}
-_SYSCALL_HANDLER(adc_disable, dev)
+Z_SYSCALL_HANDLER(adc_disable, dev)
{
- _SYSCALL_DRIVER_ADC(dev, disable);
+ Z_OOPS(Z_SYSCALL_DRIVER_ADC(dev, disable));
_impl_adc_disable((struct device *)dev);
return 0;
}
-_SYSCALL_HANDLER(adc_read, dev, seq_table_p)
+Z_SYSCALL_HANDLER(adc_read, dev, seq_table_p)
{
struct adc_seq_entry *entry;
struct adc_seq_table *seq_table = (struct adc_seq_table *)seq_table_p;
int i;
- _SYSCALL_DRIVER_ADC(dev, read);
- _SYSCALL_MEMORY_READ(seq_table, sizeof(struct adc_seq_table));
- _SYSCALL_MEMORY_ARRAY_READ(seq_table->entries, seq_table->num_entries,
- sizeof(struct adc_seq_entry));
+ Z_OOPS(Z_SYSCALL_DRIVER_ADC(dev, read));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(seq_table, sizeof(struct adc_seq_table)));
+ Z_OOPS(Z_SYSCALL_MEMORY_ARRAY_READ(seq_table->entries,
+ seq_table->num_entries,
+ sizeof(struct adc_seq_entry)));
for (entry = seq_table->entries, i = 0; i < seq_table->num_entries;
i++, entry++) {
- _SYSCALL_MEMORY_WRITE(entry->buffer, entry->buffer_length);
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(entry->buffer,
+ entry->buffer_length));
}
return _impl_adc_read((struct device *)dev, seq_table);
diff --git a/drivers/aio/aio_comparator_handlers.c b/drivers/aio/aio_comparator_handlers.c
index c5e7aef..8026b7b 100644
--- a/drivers/aio/aio_comparator_handlers.c
+++ b/drivers/aio/aio_comparator_handlers.c
@@ -7,14 +7,14 @@
#include <syscall_handler.h>
#include <aio_comparator.h>
-_SYSCALL_HANDLER(aio_cmp_disable, dev, index)
+Z_SYSCALL_HANDLER(aio_cmp_disable, dev, index)
{
- _SYSCALL_DRIVER_AIO_CMP(dev, disable);
+ Z_OOPS(Z_SYSCALL_DRIVER_AIO_CMP(dev, disable));
return _impl_aio_cmp_disable((struct device *)dev, index);
}
-_SYSCALL_HANDLER(aio_cmp_get_pending_int, dev)
+Z_SYSCALL_HANDLER(aio_cmp_get_pending_int, dev)
{
- _SYSCALL_DRIVER_AIO_CMP(dev, get_pending_int);
+ Z_OOPS(Z_SYSCALL_DRIVER_AIO_CMP(dev, get_pending_int));
return _impl_aio_get_pending_int((struct device *)dev, index);
}
diff --git a/drivers/counter/counter_handlers.c b/drivers/counter/counter_handlers.c
index 3ba09ca..b3215fc 100644
--- a/drivers/counter/counter_handlers.c
+++ b/drivers/counter/counter_handlers.c
@@ -11,9 +11,9 @@
* instance and return an integral value
*/
#define COUNTER_HANDLER(name) \
- _SYSCALL_HANDLER(counter_ ## name, dev) \
+ Z_SYSCALL_HANDLER(counter_ ## name, dev) \
{ \
- _SYSCALL_DRIVER_COUNTER(dev, name); \
+ Z_OOPS(Z_SYSCALL_DRIVER_COUNTER(dev, name)); \
return _impl_counter_ ## name((struct device *)dev); \
}
diff --git a/drivers/dma/dma_handlers.c b/drivers/dma/dma_handlers.c
index 6454aa6..a85dab5 100644
--- a/drivers/dma/dma_handlers.c
+++ b/drivers/dma/dma_handlers.c
@@ -11,15 +11,15 @@
* the validity of the channel ID and returning -errno if it's bogus
*/
-_SYSCALL_HANDLER(dma_start, dev, channel)
+Z_SYSCALL_HANDLER(dma_start, dev, channel)
{
- _SYSCALL_DRIVER_DMA(dev, start);
+ Z_OOPS(Z_SYSCALL_DRIVER_DMA(dev, start));
return _impl_dma_start((struct device *)dev, channel);
}
-_SYSCALL_HANDLER(dma_stop, dev, channel)
+Z_SYSCALL_HANDLER(dma_stop, dev, channel)
{
- _SYSCALL_DRIVER_DMA(dev, stop);
+ Z_OOPS(Z_SYSCALL_DRIVER_DMA(dev, stop));
return _impl_dma_stop((struct device *)dev, channel);
}
diff --git a/drivers/entropy/entropy_handlers.c b/drivers/entropy/entropy_handlers.c
index c1a5492..b22cecc 100644
--- a/drivers/entropy/entropy_handlers.c
+++ b/drivers/entropy/entropy_handlers.c
@@ -7,10 +7,10 @@
#include <entropy.h>
#include <syscall_handler.h>
-_SYSCALL_HANDLER(entropy_get_entropy, dev, buffer, len)
+Z_SYSCALL_HANDLER(entropy_get_entropy, dev, buffer, len)
{
- _SYSCALL_DRIVER_ENTROPY(dev, get_entropy);
- _SYSCALL_MEMORY_WRITE(buffer, len);
+ Z_OOPS(Z_SYSCALL_DRIVER_ENTROPY(dev, get_entropy));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(buffer, len));
return _impl_entropy_get_entropy((struct device *)dev, (u8_t *)buffer,
len);
}
diff --git a/drivers/flash/flash_handlers.c b/drivers/flash/flash_handlers.c
index d7c2129..b0c7ec7 100644
--- a/drivers/flash/flash_handlers.c
+++ b/drivers/flash/flash_handlers.c
@@ -7,51 +7,51 @@
#include <syscall_handler.h>
#include <flash.h>
-_SYSCALL_HANDLER(flash_read, dev, offset, data, len)
+Z_SYSCALL_HANDLER(flash_read, dev, offset, data, len)
{
- _SYSCALL_DRIVER_FLASH(dev, read);
- _SYSCALL_MEMORY_WRITE(data, len);
+ Z_OOPS(Z_SYSCALL_DRIVER_FLASH(dev, read));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(data, len));
return _impl_flash_read((struct device *)dev, offset, (void *)data,
len);
}
-_SYSCALL_HANDLER(flash_write, dev, offset, data, len)
+Z_SYSCALL_HANDLER(flash_write, dev, offset, data, len)
{
- _SYSCALL_DRIVER_FLASH(dev, write);
- _SYSCALL_MEMORY_READ(data, len);
+ Z_OOPS(Z_SYSCALL_DRIVER_FLASH(dev, write));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(data, len));
return _impl_flash_write((struct device *)dev, offset,
(const void *)data, len);
}
-_SYSCALL_HANDLER(flash_write_protection_set, dev, enable)
+Z_SYSCALL_HANDLER(flash_write_protection_set, dev, enable)
{
- _SYSCALL_DRIVER_FLASH(dev, write_protection);
+ Z_OOPS(Z_SYSCALL_DRIVER_FLASH(dev, write_protection));
return _impl_flash_write_protection_set((struct device *)dev, enable);
}
-_SYSCALL_HANDLER1_SIMPLE(flash_get_write_block_size, K_OBJ_DRIVER_FLASH,
- struct device *);
+Z_SYSCALL_HANDLER1_SIMPLE(flash_get_write_block_size, K_OBJ_DRIVER_FLASH,
+ struct device *);
#ifdef CONFIG_FLASH_PAGE_LAYOUT
-_SYSCALL_HANDLER(flash_get_page_info_by_offs, dev, offs, info)
+Z_SYSCALL_HANDLER(flash_get_page_info_by_offs, dev, offs, info)
{
- _SYSCALL_DRIVER_FLASH(dev, page_layout);
- _SYSCALL_MEMORY_WRITE(info, sizeof(struct flash_pages_info));
+ Z_OOPS(Z_SYSCALL_DRIVER_FLASH(dev, page_layout));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(info, sizeof(struct flash_pages_info)));
return _impl_flash_get_page_info_by_offs((struct device *)dev, offs,
(struct flash_pages_info *)info);
}
-_SYSCALL_HANDLER(flash_get_page_info_by_idx, dev, idx, info)
+Z_SYSCALL_HANDLER(flash_get_page_info_by_idx, dev, idx, info)
{
- _SYSCALL_DRIVER_FLASH(dev, page_layout);
- _SYSCALL_MEMORY_WRITE(info, sizeof(struct flash_pages_info));
+ Z_OOPS(Z_SYSCALL_DRIVER_FLASH(dev, page_layout));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(info, sizeof(struct flash_pages_info)));
return _impl_flash_get_page_info_by_idx((struct device *)dev, idx,
(struct flash_pages_info *)info);
}
-_SYSCALL_HANDLER(flash_get_page_count, dev)
+Z_SYSCALL_HANDLER(flash_get_page_count, dev)
{
- _SYSCALL_DRIVER_FLASH(dev, page_layout);
+ Z_OOPS(Z_SYSCALL_DRIVER_FLASH(dev, page_layout));
return _impl_flash_get_page_count((struct device *)dev);
}
#endif
diff --git a/drivers/gpio/gpio_handlers.c b/drivers/gpio/gpio_handlers.c
index e48a9c4..625c188 100644
--- a/drivers/gpio/gpio_handlers.c
+++ b/drivers/gpio/gpio_handlers.c
@@ -7,42 +7,42 @@
#include <gpio.h>
#include <syscall_handler.h>
-_SYSCALL_HANDLER(gpio_config, port, access_op, pin, flags)
+Z_SYSCALL_HANDLER(gpio_config, port, access_op, pin, flags)
{
- _SYSCALL_DRIVER_GPIO(port, config);
+ Z_OOPS(Z_SYSCALL_DRIVER_GPIO(port, config));
return _impl_gpio_config((struct device *)port, access_op, pin, flags);
}
-_SYSCALL_HANDLER(gpio_write, port, access_op, pin, value)
+Z_SYSCALL_HANDLER(gpio_write, port, access_op, pin, value)
{
- _SYSCALL_DRIVER_GPIO(port, write);
+ Z_OOPS(Z_SYSCALL_DRIVER_GPIO(port, write));
return _impl_gpio_write((struct device *)port, access_op, pin, value);
}
-_SYSCALL_HANDLER(gpio_read, port, access_op, pin, value)
+Z_SYSCALL_HANDLER(gpio_read, port, access_op, pin, value)
{
- _SYSCALL_DRIVER_GPIO(port, read);
- _SYSCALL_MEMORY_WRITE(value, sizeof(u32_t));
+ Z_OOPS(Z_SYSCALL_DRIVER_GPIO(port, read));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(value, sizeof(u32_t)));
return _impl_gpio_read((struct device *)port, access_op, pin,
(u32_t *)value);
}
-_SYSCALL_HANDLER(gpio_enable_callback, port, access_op, pin)
+Z_SYSCALL_HANDLER(gpio_enable_callback, port, access_op, pin)
{
- _SYSCALL_DRIVER_GPIO(port, enable_callback);
+ Z_OOPS(Z_SYSCALL_DRIVER_GPIO(port, enable_callback));
return _impl_gpio_enable_callback((struct device *)port, access_op,
pin);
}
-_SYSCALL_HANDLER(gpio_disable_callback, port, access_op, pin)
+Z_SYSCALL_HANDLER(gpio_disable_callback, port, access_op, pin)
{
- _SYSCALL_DRIVER_GPIO(port, disable_callback);
+ Z_OOPS(Z_SYSCALL_DRIVER_GPIO(port, disable_callback));
return _impl_gpio_disable_callback((struct device *)port, access_op,
pin);
}
-_SYSCALL_HANDLER(gpio_get_pending_int, port)
+Z_SYSCALL_HANDLER(gpio_get_pending_int, port)
{
- _SYSCALL_DRIVER_GPIO(port, get_pending_int);
+ Z_OOPS(Z_SYSCALL_DRIVER_GPIO(port, get_pending_int));
return _impl_gpio_get_pending_int((struct device *)port);
}
diff --git a/drivers/i2c/i2c_handlers.c b/drivers/i2c/i2c_handlers.c
index de7068f..9671922 100644
--- a/drivers/i2c/i2c_handlers.c
+++ b/drivers/i2c/i2c_handlers.c
@@ -8,9 +8,9 @@
#include <string.h>
#include <syscall_handler.h>
-_SYSCALL_HANDLER(i2c_configure, dev, dev_config)
+Z_SYSCALL_HANDLER(i2c_configure, dev, dev_config)
{
- _SYSCALL_DRIVER_I2C(dev, configure);
+ Z_OOPS(Z_SYSCALL_DRIVER_I2C(dev, configure));
return _impl_i2c_configure((struct device *)dev, dev_config);
}
@@ -30,26 +30,27 @@
* that the target buffer be writable
*/
for (i = 0; i < num_msgs; i++) {
- _SYSCALL_MEMORY(copy[i].buf, copy[i].len,
- copy[i].flags & I2C_MSG_READ);
+ Z_OOPS(Z_SYSCALL_MEMORY(copy[i].buf, copy[i].len,
+ copy[i].flags & I2C_MSG_READ));
}
return _impl_i2c_transfer(dev, copy, num_msgs, addr);
}
-_SYSCALL_HANDLER(i2c_transfer, dev, msgs, num_msgs, addr)
+Z_SYSCALL_HANDLER(i2c_transfer, dev, msgs, num_msgs, addr)
{
- _SYSCALL_OBJ(dev, K_OBJ_DRIVER_I2C);
+ Z_OOPS(Z_SYSCALL_OBJ(dev, K_OBJ_DRIVER_I2C));
/* copy_msgs_and_transfer() will allocate a copy on the stack using
* VLA, so ensure this won't blow the stack. Most functions defined
* in i2c.h use only a handful of messages, so up to 32 messages
* should be more than sufficient.
*/
- _SYSCALL_VERIFY(num_msgs >= 1 && num_msgs < 32);
+ Z_OOPS(Z_SYSCALL_VERIFY(num_msgs >= 1 && num_msgs < 32));
/* We need to be able to read the overall array of messages */
- _SYSCALL_MEMORY_ARRAY_READ(msgs, num_msgs, sizeof(struct i2c_msg));
+ Z_OOPS(Z_SYSCALL_MEMORY_ARRAY_READ(msgs, num_msgs,
+ sizeof(struct i2c_msg)));
return copy_msgs_and_transfer((struct device *)dev,
(struct i2c_msg *)msgs,
diff --git a/drivers/ipm/ipm_handlers.c b/drivers/ipm/ipm_handlers.c
index 75bb8f8..48e4c4c 100644
--- a/drivers/ipm/ipm_handlers.c
+++ b/drivers/ipm/ipm_handlers.c
@@ -7,28 +7,28 @@
#include <syscall_handler.h>
#include <ipm.h>
-_SYSCALL_HANDLER(ipm_send, dev, wait, id, data, size)
+Z_SYSCALL_HANDLER(ipm_send, dev, wait, id, data, size)
{
- _SYSCALL_DRIVER_IPM(dev, send);
- _SYSCALL_MEMORY_READ(data, size);
+ Z_OOPS(Z_SYSCALL_DRIVER_IPM(dev, send));
+ Z_OOPS(Z_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)
+Z_SYSCALL_HANDLER(ipm_max_data_size_get, dev)
{
- _SYSCALL_DRIVER_IPM(dev, max_data_size_get);
+ Z_OOPS(Z_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)
+Z_SYSCALL_HANDLER(ipm_max_id_val_get, dev)
{
- _SYSCALL_DRIVER_IPM(dev, max_id_val_get);
+ Z_OOPS(Z_SYSCALL_DRIVER_IPM(dev, max_id_val_get));
return _impl_max_id_val_get((struct device *)dev);
}
-_SYSCALL_HANDLER(ipm_set_enabled, dev, enable)
+Z_SYSCALL_HANDLER(ipm_set_enabled, dev, enable)
{
- _SYSCALL_DRIVER_IPM(dev, set_enabled);
+ Z_OOPS(Z_SYSCALL_DRIVER_IPM(dev, set_enabled));
return _impl_ipm_set_enabled((struct device *)dev, enable);
}
diff --git a/drivers/led/led_handlers.c b/drivers/led/led_handlers.c
index d5ea70e..dbcf33b 100644
--- a/drivers/led/led_handlers.c
+++ b/drivers/led/led_handlers.c
@@ -7,27 +7,27 @@
#include <syscall_handler.h>
#include <led.h>
-_SYSCALL_HANDLER(led_blink, dev, led, delay_on, delay_off)
+Z_SYSCALL_HANDLER(led_blink, dev, led, delay_on, delay_off)
{
- _SYSCALL_DRIVER_LED(dev, blink);
+ Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, blink));
return _impl_led_blink((struct device *)dev, led, delay_on,
delay_off);
}
-_SYSCALL_HANDLER(led_set_brightness, dev, led, value)
+Z_SYSCALL_HANDLER(led_set_brightness, dev, led, value)
{
- _SYSCALL_DRIVER_LED(dev, set_brightness);
+ Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, set_brightness));
return _impl_led_set_brightness((struct device *)dev, led, value);
}
-_SYSCALL_HANDLER(led_on, dev, led)
+Z_SYSCALL_HANDLER(led_on, dev, led)
{
- _SYSCALL_DRIVER_LED(dev, on);
+ Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, on));
return _impl_led_on((struct device *)dev, led);
}
-_SYSCALL_HANDLER(led_off, dev, led)
+Z_SYSCALL_HANDLER(led_off, dev, led)
{
- _SYSCALL_DRIVER_LED(dev, off);
+ Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, off));
return _impl_led_off((struct device *)dev, led);
}
diff --git a/drivers/pwm/pwm_handlers.c b/drivers/pwm/pwm_handlers.c
index 5fe37de..df2239a 100644
--- a/drivers/pwm/pwm_handlers.c
+++ b/drivers/pwm/pwm_handlers.c
@@ -7,17 +7,17 @@
#include <syscall_handler.h>
#include <pwm.h>
-_SYSCALL_HANDLER(pwm_pin_set_cycles, dev, pwm, period, pulse)
+Z_SYSCALL_HANDLER(pwm_pin_set_cycles, dev, pwm, period, pulse)
{
- _SYSCALL_DRIVER_PWM(dev, pin_set);
+ Z_OOPS(Z_SYSCALL_DRIVER_PWM(dev, pin_set));
return _impl_pwm_pin_set_cycles((struct device *)dev, pwm, period,
pulse);
}
-_SYSCALL_HANDLER(pwm_get_cycles_per_sec, dev, pwm, cycles)
+Z_SYSCALL_HANDLER(pwm_get_cycles_per_sec, dev, pwm, cycles)
{
- _SYSCALL_DRIVER_PWM(dev, get_cycles_per_sec);
- _SYSCALL_MEMORY_WRITE(cycles, sizeof(u64_t));
+ Z_OOPS(Z_SYSCALL_DRIVER_PWM(dev, get_cycles_per_sec));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(cycles, sizeof(u64_t)));
return _impl_pwm_get_cycles_per_sec((struct device *)dev,
pwm, (u64_t *)cycles);
}
diff --git a/drivers/rtc/rtc_handlers.c b/drivers/rtc/rtc_handlers.c
index b5034d5..fea2f53 100644
--- a/drivers/rtc/rtc_handlers.c
+++ b/drivers/rtc/rtc_handlers.c
@@ -7,32 +7,32 @@
#include <syscall_handler.h>
#include <rtc.h>
-_SYSCALL_HANDLER(rtc_read, dev)
+Z_SYSCALL_HANDLER(rtc_read, dev)
{
- _SYSCALL_DRIVER_RTC(dev, read);
+ Z_OOPS(Z_SYSCALL_DRIVER_RTC(dev, read));
return _impl_rtc_read((struct device *)dev);
}
-_SYSCALL_HANDLER(rtc_enable, dev)
+Z_SYSCALL_HANDLER(rtc_enable, dev)
{
- _SYSCALL_DRIVER_RTC(dev, enable);
+ Z_OOPS(Z_SYSCALL_DRIVER_RTC(dev, enable));
return _impl_rtc_enable((struct device *)dev);
}
-_SYSCALL_HANDLER(rtc_disable, dev)
+Z_SYSCALL_HANDLER(rtc_disable, dev)
{
- _SYSCALL_DRIVER_RTC(dev, disable);
+ Z_OOPS(Z_SYSCALL_DRIVER_RTC(dev, disable));
return _impl_rtc_disable((struct device *)dev);
}
-_SYSCALL_HANDLER(rtc_set_alarm, dev, alarm_val)
+Z_SYSCALL_HANDLER(rtc_set_alarm, dev, alarm_val)
{
- _SYSCALL_DRIVER_RTC(dev, set_alarm);
+ Z_OOPS(Z_SYSCALL_DRIVER_RTC(dev, set_alarm));
return _impl_rtc_set_alarm((struct device *)dev, alarm_val);
}
-_SYSCALL_HANDLER(rtc_get_pending_int, dev)
+Z_SYSCALL_HANDLER(rtc_get_pending_int, dev)
{
- _SYSCALL_DRIVER_RTC(dev, get_pending_int);
+ Z_OOPS(Z_SYSCALL_DRIVER_RTC(dev, get_pending_int));
return _impl_rtc_get_pending_int((struct device *)dev);
}
diff --git a/drivers/sensor/sensor_handlers.c b/drivers/sensor/sensor_handlers.c
index 02676b3..94a1e4a 100644
--- a/drivers/sensor/sensor_handlers.c
+++ b/drivers/sensor/sensor_handlers.c
@@ -7,30 +7,30 @@
#include <sensor.h>
#include <syscall_handler.h>
-_SYSCALL_HANDLER(sensor_attr_set, dev, chan, attr, val)
+Z_SYSCALL_HANDLER(sensor_attr_set, dev, chan, attr, val)
{
- _SYSCALL_DRIVER_SENSOR(dev, attr_set);
- _SYSCALL_MEMORY_READ(val, sizeof(struct sensor_value));
+ Z_OOPS(Z_SYSCALL_DRIVER_SENSOR(dev, attr_set));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(val, sizeof(struct sensor_value)));
return _impl_sensor_attr_set((struct device *)dev, chan, attr,
(const struct sensor_value *)val);
}
-_SYSCALL_HANDLER(sensor_sample_sample_fetch, dev)
+Z_SYSCALL_HANDLER(sensor_sample_sample_fetch, dev)
{
- _SYSCALL_DRIVER_SENSOR(dev, sample_fetch);
+ Z_OOPS(Z_SYSCALL_DRIVER_SENSOR(dev, sample_fetch));
return _impl_sensor_sample_fetch((struct device *)dev);
}
-_SYSCALL_HANDLER(sensor_sample_fetch_chan, dev, type)
+Z_SYSCALL_HANDLER(sensor_sample_fetch_chan, dev, type)
{
- _SYSCALL_DRIVER_SENSOR(dev, sample_fetch);
+ Z_OOPS(Z_SYSCALL_DRIVER_SENSOR(dev, sample_fetch));
return _impl_sensor_sample_fetch_chan((struct device *)dev, type);
}
-_SYSCALL_HANDLER(sensor_channel_get, dev, chan, val)
+Z_SYSCALL_HANDLER(sensor_channel_get, dev, chan, val)
{
- _SYSCALL_DRIVER_SENSOR(dev, channel_get);
- _SYSCALL_MEMORY_WRITE(val, sizeof(struct sensor_value));
+ Z_OOPS(Z_SYSCALL_DRIVER_SENSOR(dev, channel_get));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(val, sizeof(struct sensor_value)));
return _impl_sensor_channel_get((struct device *)dev, chan,
(struct sensor_value *)val);
}
diff --git a/drivers/serial/uart_handlers.c b/drivers/serial/uart_handlers.c
index eb9d5c8..ac6e2de 100644
--- a/drivers/serial/uart_handlers.c
+++ b/drivers/serial/uart_handlers.c
@@ -8,31 +8,31 @@
#include <syscall_handler.h>
#define UART_SIMPLE(op_) \
- _SYSCALL_HANDLER(uart_ ## op_, dev) { \
- _SYSCALL_DRIVER_UART(dev, op_); \
+ Z_SYSCALL_HANDLER(uart_ ## op_, dev) { \
+ Z_OOPS(Z_SYSCALL_DRIVER_UART(dev, op_)); \
return _impl_uart_ ## op_((struct device *)dev); \
}
#define UART_SIMPLE_VOID(op_) \
- _SYSCALL_HANDLER(uart_ ## op_, dev) { \
- _SYSCALL_DRIVER_UART(dev, op_); \
+ Z_SYSCALL_HANDLER(uart_ ## op_, dev) { \
+ Z_OOPS(Z_SYSCALL_DRIVER_UART(dev, op_)); \
_impl_uart_ ## op_((struct device *)dev); \
return 0; \
}
UART_SIMPLE(err_check)
-_SYSCALL_HANDLER(uart_poll_in, dev, p_char)
+Z_SYSCALL_HANDLER(uart_poll_in, dev, p_char)
{
- _SYSCALL_DRIVER_UART(dev, poll_in);
- _SYSCALL_MEMORY_WRITE(p_char, sizeof(unsigned char));
+ Z_OOPS(Z_SYSCALL_DRIVER_UART(dev, poll_in));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(p_char, sizeof(unsigned char)));
return _impl_uart_poll_in((struct device *)dev,
(unsigned char *)p_char);
}
-_SYSCALL_HANDLER(uart_poll_out, dev, out_char)
+Z_SYSCALL_HANDLER(uart_poll_out, dev, out_char)
{
- _SYSCALL_DRIVER_UART(dev, poll_out);
+ Z_OOPS(Z_SYSCALL_DRIVER_UART(dev, poll_out));
return _impl_uart_poll_out((struct device *)dev, out_char);
}
@@ -48,25 +48,25 @@
#endif /* CONFIG_UART_INTERRUPT_DRIVEN */
#ifdef CONFIG_UART_LINE_CTRL
-_SYSCALL_HANDLER(uart_line_ctrl_set, dev, ctrl, val)
+Z_SYSCALL_HANDLER(uart_line_ctrl_set, dev, ctrl, val)
{
- _SYSCALL_DRIVER_UART(dev, line_ctrl_set);
+ Z_OOPS(Z_SYSCALL_DRIVER_UART(dev, line_ctrl_set));
return _impl_uart_line_ctrl_set((struct device *)dev, ctrl, val);
}
-_SYSCALL_HANDLER(uart_line_ctrl_get, dev, ctrl, val);
+Z_SYSCALL_HANDLER(uart_line_ctrl_get, dev, ctrl, val);
{
- _SYSCALL_DRIVER_UART(dev, line_ctrl_get);
- _SYSCALL_MEMORY_WRITE(val, sizeof(u32_t));
+ Z_OOPS(Z_SYSCALL_DRIVER_UART(dev, line_ctrl_get));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(val, sizeof(u32_t)));
return _impl_uart_line_ctrl_get((struct device *)dev, ctrl,
(u32_t *)val);
}
#endif /* CONFIG_UART_LINE_CTRL */
#ifdef CONFIG_UART_DRV_CMD
-_SYSCALL_HANDLER(uart_drv_cmd, dev, cmd, p)
+Z_SYSCALL_HANDLER(uart_drv_cmd, dev, cmd, p)
{
- _SYSCALL_DRIVER_UART(dev, drv_cmd);
+ Z_OOPS(Z_SYSCALL_DRIVER_UART(dev, drv_cmd));
return _impl_uart_drv_cmd((struct device *)dev, cmd, p);
}
#endif /* CONFIG_UART_DRV_CMD */
diff --git a/drivers/spi/spi_handlers.c b/drivers/spi/spi_handlers.c
index 8f1b5fe..30a4db8 100644
--- a/drivers/spi/spi_handlers.c
+++ b/drivers/spi/spi_handlers.c
@@ -22,9 +22,9 @@
}
/* Validate the array of struct spi_buf instances */
- _SYSCALL_MEMORY_ARRAY_READ(bufs->buffers,
- bufs->count,
- sizeof(struct spi_buf));
+ Z_OOPS(Z_SYSCALL_MEMORY_ARRAY_READ(bufs->buffers,
+ bufs->count,
+ sizeof(struct spi_buf)));;
/* Not worried abuot overflow here: _SYSCALL_MEMORY_ARRAY_READ()
* takes care of it.
@@ -39,7 +39,7 @@
*/
struct spi_buf *buf = &bufs->buffers[i];
- _SYSCALL_MEMORY(buf->buf, buf->len, writable);
+ Z_OOPS(Z_SYSCALL_MEMORY(buf->buf, buf->len, writable));
}
}
@@ -65,23 +65,24 @@
tx_bufs, rx_bufs);
}
-_SYSCALL_HANDLER(spi_transceive, dev, config_p, tx_bufs, rx_bufs)
+Z_SYSCALL_HANDLER(spi_transceive, dev, config_p, tx_bufs, rx_bufs)
{
const struct spi_config *config = (const struct spi_config *)config_p;
struct spi_buf_set tx_bufs_copy;
struct spi_buf_set rx_bufs_copy;
struct spi_config config_copy;
- _SYSCALL_MEMORY_READ(config, sizeof(*config));
- _SYSCALL_DRIVER_SPI(dev, transceive);
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(config, sizeof(*config)));
+ Z_OOPS(Z_SYSCALL_DRIVER_SPI(dev, transceive));
if (tx_bufs) {
const struct spi_buf_set *tx =
(const struct spi_buf_set *)tx_bufs;
- _SYSCALL_MEMORY_READ(tx_bufs, sizeof(struct spi_buf_set));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(tx_bufs,
+ sizeof(struct spi_buf_set)));
memcpy(&tx_bufs_copy, tx, sizeof(tx_bufs_copy));
- _SYSCALL_VERIFY(tx_bufs_copy.count < 32);
+ Z_OOPS(Z_SYSCALL_VERIFY(tx_bufs_copy.count < 32));
} else {
memset(&tx_bufs_copy, 0, sizeof(tx_bufs_copy));
}
@@ -90,9 +91,10 @@
const struct spi_buf_set *rx =
(const struct spi_buf_set *)rx_bufs;
- _SYSCALL_MEMORY_READ(rx_bufs, sizeof(struct spi_buf_set));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(rx_bufs,
+ sizeof(struct spi_buf_set)));
memcpy(&rx_bufs_copy, rx, sizeof(rx_bufs_copy));
- _SYSCALL_VERIFY(rx_bufs_copy.count < 32);
+ Z_OOPS(Z_SYSCALL_VERIFY(rx_bufs_copy.count < 32));
} else {
memset(&rx_bufs_copy, 0, sizeof(rx_bufs_copy));
}
@@ -101,9 +103,9 @@
if (config_copy.cs) {
const struct spi_cs_control *cs = config_copy.cs;
- _SYSCALL_MEMORY_READ(cs, sizeof(*cs));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(cs, sizeof(*cs)));
if (cs->gpio_dev) {
- _SYSCALL_OBJ(cs->gpio_dev, K_OBJ_DRIVER_GPIO);
+ Z_OOPS(Z_SYSCALL_OBJ(cs->gpio_dev, K_OBJ_DRIVER_GPIO));
}
}
@@ -117,11 +119,11 @@
ssf);
}
-_SYSCALL_HANDLER(spi_release, dev, config_p)
+Z_SYSCALL_HANDLER(spi_release, dev, config_p)
{
const struct spi_config *config = (const struct spi_config *)config_p;
- _SYSCALL_MEMORY_READ(config, sizeof(*config));
- _SYSCALL_DRIVER_SPI(dev, release);
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(config, sizeof(*config)));
+ Z_OOPS(Z_SYSCALL_DRIVER_SPI(dev, release));
return _impl_spi_release((struct device *)dev, config);
}
diff --git a/kernel/alert.c b/kernel/alert.c
index c97028c..6d7a3d0 100644
--- a/kernel/alert.c
+++ b/kernel/alert.c
@@ -92,7 +92,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_alert_send, K_OBJ_ALERT, struct k_alert *);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_alert_send, K_OBJ_ALERT, struct k_alert *);
#endif
int _impl_k_alert_recv(struct k_alert *alert, s32_t timeout)
@@ -101,9 +101,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_alert_recv, alert, timeout)
+Z_SYSCALL_HANDLER(k_alert_recv, alert, timeout)
{
- _SYSCALL_OBJ(alert, K_OBJ_ALERT);
+ Z_OOPS(Z_SYSCALL_OBJ(alert, K_OBJ_ALERT));
return _impl_k_alert_recv((struct k_alert *)alert, timeout);
}
#endif
diff --git a/kernel/include/syscall_handler.h b/kernel/include/syscall_handler.h
index 33ae31e..6a25f68 100644
--- a/kernel/include/syscall_handler.h
+++ b/kernel/include/syscall_handler.h
@@ -125,6 +125,27 @@
*/
void _k_object_uninit(void *obj);
+#define Z_OOPS(expr) \
+ do { \
+ if (expr) { \
+ _arch_syscall_oops(ssf); \
+ } \
+ } while (0)
+
+static inline __attribute__((warn_unused_result)) __printf_like(2, 3)
+bool z_syscall_verify_msg(bool expr, const char *fmt, ...)
+{
+ va_list ap;
+
+ if (expr) {
+ va_start(ap, fmt);
+ vprintk(fmt, ap);
+ va_end(ap);
+ }
+
+ return expr;
+}
+
/**
* @brief Runtime expression check for system call arguments
*
@@ -136,15 +157,11 @@
* oops
* @param fmt Printf-style format string (followed by appropriate variadic
* arguments) to print on verification failure
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_VERIFY_MSG(expr, fmt, ...) \
- do { \
- if (!(expr)) { \
- printk("FATAL: syscall %s failed check: " fmt "\n", \
- __func__, ##__VA_ARGS__); \
- _arch_syscall_oops(ssf); \
- } \
- } while (0)
+#define Z_SYSCALL_VERIFY_MSG(expr, fmt, ...) \
+ z_syscall_verify_msg(!(expr), "syscall %s failed check: " fmt "\n", \
+ __func__, ##__VA_ARGS__)
/**
* @brief Runtime expression check for system call arguments
@@ -154,14 +171,15 @@
*
* @param expr Boolean expression to verify, a false result will trigger an
* oops. A stringified version of this expression will be printed.
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_VERIFY(expr) _SYSCALL_VERIFY_MSG(expr, #expr)
+#define Z_SYSCALL_VERIFY(expr) Z_SYSCALL_VERIFY_MSG(expr, #expr)
-#define _SYSCALL_MEMORY(ptr, size, write) \
- _SYSCALL_VERIFY_MSG(!_arch_buffer_validate((void *)ptr, size, write), \
- "Memory region %p (size %u) %s access denied", \
- (void *)(ptr), (u32_t)(size), \
- write ? "write" : "read")
+#define Z_SYSCALL_MEMORY(ptr, size, write) \
+ Z_SYSCALL_VERIFY_MSG(!_arch_buffer_validate((void *)ptr, size, write), \
+ "Memory region %p (size %u) %s access denied", \
+ (void *)(ptr), (u32_t)(size), \
+ write ? "write" : "read")
/**
* @brief Runtime check that a user thread has read permission to a memory area
@@ -176,9 +194,10 @@
* @param size Size of the memory area
* @param write If the thread should be able to write to this memory, not just
* read it
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_MEMORY_READ(ptr, size) \
- _SYSCALL_MEMORY(ptr, size, 0)
+#define Z_SYSCALL_MEMORY_READ(ptr, size) \
+ Z_SYSCALL_MEMORY(ptr, size, 0)
/**
* @brief Runtime check that a user thread has write permission to a memory area
@@ -193,20 +212,21 @@
* @param size Size of the memory area
* @param write If the thread should be able to write to this memory, not just
* read it
+ * @param 0 on success, nonzero on failure
*/
-#define _SYSCALL_MEMORY_WRITE(ptr, size) \
- _SYSCALL_MEMORY(ptr, size, 1)
+#define Z_SYSCALL_MEMORY_WRITE(ptr, size) \
+ Z_SYSCALL_MEMORY(ptr, size, 1)
-#define _SYSCALL_MEMORY_ARRAY(ptr, nmemb, size, write) \
- do { \
+#define Z_SYSCALL_MEMORY_ARRAY(ptr, nmemb, size, write) \
+ ({ \
u32_t product; \
- _SYSCALL_VERIFY_MSG(!__builtin_umul_overflow((u32_t)(nmemb), \
- (u32_t)(size), \
- &product), \
- "%ux%u array is too large", \
- (u32_t)(nmemb), (u32_t)(size)); \
- _SYSCALL_MEMORY(ptr, product, write); \
- } while (0)
+ Z_SYSCALL_VERIFY_MSG(!__builtin_umul_overflow((u32_t)(nmemb), \
+ (u32_t)(size), \
+ &product), \
+ "%ux%u array is too large", \
+ (u32_t)(nmemb), (u32_t)(size)) || \
+ Z_SYSCALL_MEMORY(ptr, product, write); \
+ })
/**
* @brief Validate user thread has read permission for sized array
@@ -218,9 +238,10 @@
* @param ptr Memory area to examine
* @param nmemb Number of elements in the array
* @param size Size of each array element
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_MEMORY_ARRAY_READ(ptr, nmemb, size) \
- _SYSCALL_MEMORY_ARRAY(ptr, nmemb, size, 0)
+#define Z_SYSCALL_MEMORY_ARRAY_READ(ptr, nmemb, size) \
+ Z_SYSCALL_MEMORY_ARRAY(ptr, nmemb, size, 0)
/**
* @brief Validate user thread has read/write permission for sized array
@@ -232,9 +253,10 @@
* @param ptr Memory area to examine
* @param nmemb Number of elements in the array
* @param size Size of each array element
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_MEMORY_ARRAY_WRITE(ptr, nmemb, size) \
- _SYSCALL_MEMORY_ARRAY(ptr, nmemb, size, 1)
+#define Z_SYSCALL_MEMORY_ARRAY_WRITE(ptr, nmemb, size) \
+ Z_SYSCALL_MEMORY_ARRAY(ptr, nmemb, size, 1)
static inline int _obj_validation_check(struct _k_object *ko,
void *obj,
@@ -256,8 +278,8 @@
return ret;
}
-#define _SYSCALL_IS_OBJ(ptr, type, init) \
- _SYSCALL_VERIFY_MSG( \
+#define Z_SYSCALL_IS_OBJ(ptr, type, init) \
+ Z_SYSCALL_VERIFY_MSG( \
!_obj_validation_check(_k_object_find((void *)ptr), (void *)ptr, \
type, init), "access denied")
@@ -269,16 +291,17 @@
* @param ptr Untrusted device instance object pointer
* @param api_struct Name of the driver API struct (e.g. gpio_driver_api)
* @param op Driver operation (e.g. manage_callback)
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_DRIVER_OP(ptr, api_name, op) \
- do { \
+#define Z_SYSCALL_DRIVER_OP(ptr, api_name, op) \
+ ({ \
struct api_name *__device__ = (struct api_name *) \
((struct device *)ptr)->driver_api; \
- _SYSCALL_VERIFY_MSG(__device__->op != NULL, \
+ Z_SYSCALL_VERIFY_MSG(__device__->op != NULL, \
"Operation %s not defined for driver " \
"instance %p", \
# op, __device__); \
- } while (0)
+ })
/**
* @brief Runtime check kernel object pointer for non-init functions
@@ -289,9 +312,10 @@
*
* @param ptr Untrusted kernel object pointer
* @param type Expected kernel object type
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_OBJ(ptr, type) \
- _SYSCALL_IS_OBJ(ptr, type, _OBJ_INIT_TRUE)
+#define Z_SYSCALL_OBJ(ptr, type) \
+ Z_SYSCALL_IS_OBJ(ptr, type, _OBJ_INIT_TRUE)
/**
* @brief Runtime check kernel object pointer for non-init functions
@@ -301,10 +325,11 @@
*
* @param ptr Untrusted kernel object pointer
* @param type Expected kernel object type
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_OBJ_INIT(ptr, type) \
- _SYSCALL_IS_OBJ(ptr, type, _OBJ_INIT_ANY)
+#define Z_SYSCALL_OBJ_INIT(ptr, type) \
+ Z_SYSCALL_IS_OBJ(ptr, type, _OBJ_INIT_ANY)
/**
* @brief Runtime check kernel object pointer for non-init functions
@@ -316,10 +341,11 @@
*
* @param ptr Untrusted kernel object pointer
* @param type Expected kernel object type
+ * @return 0 on success, nonzero on failure
*/
-#define _SYSCALL_OBJ_NEVER_INIT(ptr, type) \
- _SYSCALL_IS_OBJ(ptr, type, _OBJ_INIT_FALSE)
+#define Z_SYSCALL_OBJ_NEVER_INIT(ptr, type) \
+ Z_SYSCALL_IS_OBJ(ptr, type, _OBJ_INIT_FALSE)
/*
* Handler definition macros
@@ -410,7 +436,7 @@
#define __SYSCALL_ARG_N(_1, _2, _3, _4, _5, _6, _7, N, ...) N
#define __SYSCALL_RSEQ_N() 6, 5, 4, 3, 2, 1, 0
-#define _SYSCALL_HANDLER(...) \
+#define Z_SYSCALL_HANDLER(...) \
_SYSCALL_CONCAT(__SYSCALL_HANDLER, \
_SYSCALL_NARG(__VA_ARGS__))(__VA_ARGS__)
@@ -420,25 +446,25 @@
* and call the implementation.
*/
-#define _SYSCALL_HANDLER1_SIMPLE(name_, obj_enum_, obj_type_) \
+#define Z_SYSCALL_HANDLER1_SIMPLE(name_, obj_enum_, obj_type_) \
__SYSCALL_HANDLER1(name_, arg1) { \
- _SYSCALL_OBJ(arg1, obj_enum_); \
+ Z_OOPS(Z_SYSCALL_OBJ(arg1, obj_enum_)); \
return (u32_t)_impl_ ## name_((obj_type_)arg1); \
}
-#define _SYSCALL_HANDLER1_SIMPLE_VOID(name_, obj_enum_, obj_type_) \
+#define Z_SYSCALL_HANDLER1_SIMPLE_VOID(name_, obj_enum_, obj_type_) \
__SYSCALL_HANDLER1(name_, arg1) { \
- _SYSCALL_OBJ(arg1, obj_enum_); \
+ Z_OOPS(Z_SYSCALL_OBJ(arg1, obj_enum_)); \
_impl_ ## name_((obj_type_)arg1); \
return 0; \
}
-#define _SYSCALL_HANDLER0_SIMPLE(name_) \
+#define Z_SYSCALL_HANDLER0_SIMPLE(name_) \
__SYSCALL_HANDLER0(name_) { \
return (u32_t)_impl_ ## name_(); \
}
-#define _SYSCALL_HANDLER0_SIMPLE_VOID(name_) \
+#define Z_SYSCALL_HANDLER0_SIMPLE_VOID(name_) \
__SYSCALL_HANDLER0(name_) { \
_impl_ ## name_(); \
return 0; \
diff --git a/kernel/msg_q.c b/kernel/msg_q.c
index 8c388a2..a14907c 100644
--- a/kernel/msg_q.c
+++ b/kernel/msg_q.c
@@ -89,9 +89,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_msgq_alloc_init, q, msg_size, max_msgs)
+Z_SYSCALL_HANDLER(k_msgq_alloc_init, q, msg_size, max_msgs)
{
- _SYSCALL_OBJ_NEVER_INIT(q, K_OBJ_MSGQ);
+ Z_OOPS(Z_SYSCALL_OBJ_NEVER_INIT(q, K_OBJ_MSGQ));
return _impl_k_msgq_alloc_init((struct k_msgq *)q, msg_size, max_msgs);
}
@@ -153,12 +153,12 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_msgq_put, msgq_p, data, timeout)
+Z_SYSCALL_HANDLER(k_msgq_put, msgq_p, data, timeout)
{
struct k_msgq *q = (struct k_msgq *)msgq_p;
- _SYSCALL_OBJ(q, K_OBJ_MSGQ);
- _SYSCALL_MEMORY_READ(data, q->msg_size);
+ Z_OOPS(Z_SYSCALL_OBJ(q, K_OBJ_MSGQ));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(data, q->msg_size));
return _impl_k_msgq_put(q, (void *)data, timeout);
}
@@ -172,12 +172,12 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_msgq_get_attrs, msgq_p, attrs)
+Z_SYSCALL_HANDLER(k_msgq_get_attrs, msgq_p, attrs)
{
struct k_msgq *q = (struct k_msgq *)msgq_p;
- _SYSCALL_OBJ(q, K_OBJ_MSGQ);
- _SYSCALL_MEMORY_WRITE(attrs, sizeof(struct k_msgq_attrs));
+ Z_OOPS(Z_SYSCALL_OBJ(q, K_OBJ_MSGQ));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(attrs, sizeof(struct k_msgq_attrs)));
_impl_k_msgq_get_attrs(q, (struct k_msgq_attrs *) attrs);
return 0;
}
@@ -234,12 +234,12 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_msgq_get, msgq_p, data, timeout)
+Z_SYSCALL_HANDLER(k_msgq_get, msgq_p, data, timeout)
{
struct k_msgq *q = (struct k_msgq *)msgq_p;
- _SYSCALL_OBJ(q, K_OBJ_MSGQ);
- _SYSCALL_MEMORY_WRITE(data, q->msg_size);
+ Z_OOPS(Z_SYSCALL_OBJ(q, K_OBJ_MSGQ));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(data, q->msg_size));
return _impl_k_msgq_get(q, (void *)data, timeout);
}
@@ -263,7 +263,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_msgq_purge, K_OBJ_MSGQ, struct k_msgq *);
-_SYSCALL_HANDLER1_SIMPLE(k_msgq_num_free_get, K_OBJ_MSGQ, struct k_msgq *);
-_SYSCALL_HANDLER1_SIMPLE(k_msgq_num_used_get, K_OBJ_MSGQ, struct k_msgq *);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_msgq_purge, K_OBJ_MSGQ, struct k_msgq *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_msgq_num_free_get, K_OBJ_MSGQ, struct k_msgq *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_msgq_num_used_get, K_OBJ_MSGQ, struct k_msgq *);
#endif
diff --git a/kernel/mutex.c b/kernel/mutex.c
index 5bdf5b9..a110201 100644
--- a/kernel/mutex.c
+++ b/kernel/mutex.c
@@ -82,9 +82,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_mutex_init, mutex)
+Z_SYSCALL_HANDLER(k_mutex_init, mutex)
{
- _SYSCALL_OBJ_INIT(mutex, K_OBJ_MUTEX);
+ Z_OOPS(Z_SYSCALL_OBJ_INIT(mutex, K_OBJ_MUTEX));
_impl_k_mutex_init((struct k_mutex *)mutex);
return 0;
@@ -192,9 +192,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_mutex_lock, mutex, timeout)
+Z_SYSCALL_HANDLER(k_mutex_lock, mutex, timeout)
{
- _SYSCALL_OBJ(mutex, K_OBJ_MUTEX);
+ Z_OOPS(Z_SYSCALL_OBJ(mutex, K_OBJ_MUTEX));
return _impl_k_mutex_lock((struct k_mutex *)mutex, (s32_t)timeout);
}
#endif
@@ -252,11 +252,11 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_mutex_unlock, mutex)
+Z_SYSCALL_HANDLER(k_mutex_unlock, mutex)
{
- _SYSCALL_OBJ(mutex, K_OBJ_MUTEX);
- _SYSCALL_VERIFY(((struct k_mutex *)mutex)->lock_count > 0);
- _SYSCALL_VERIFY(((struct k_mutex *)mutex)->owner == _current);
+ Z_OOPS(Z_SYSCALL_OBJ(mutex, K_OBJ_MUTEX));
+ Z_OOPS(Z_SYSCALL_VERIFY(((struct k_mutex *)mutex)->lock_count > 0));
+ Z_OOPS(Z_SYSCALL_VERIFY(((struct k_mutex *)mutex)->owner == _current));
_impl_k_mutex_unlock((struct k_mutex *)mutex);
return 0;
}
diff --git a/kernel/pipes.c b/kernel/pipes.c
index 66282bf..d77a527 100644
--- a/kernel/pipes.c
+++ b/kernel/pipes.c
@@ -165,9 +165,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_pipe_alloc_init, pipe, size)
+Z_SYSCALL_HANDLER(k_pipe_alloc_init, pipe, size)
{
- _SYSCALL_OBJ_NEVER_INIT(pipe, K_OBJ_PIPE);
+ Z_OOPS(Z_SYSCALL_OBJ_NEVER_INIT(pipe, K_OBJ_PIPE));
return _impl_k_pipe_alloc_init((struct k_pipe *)pipe, size);
}
@@ -714,16 +714,16 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_pipe_get,
+Z_SYSCALL_HANDLER(k_pipe_get,
pipe, data, bytes_to_read, bytes_read_p, min_xfer_p, timeout)
{
size_t *bytes_read = (size_t *)bytes_read_p;
size_t min_xfer = (size_t)min_xfer_p;
- _SYSCALL_OBJ(pipe, K_OBJ_PIPE);
- _SYSCALL_MEMORY_WRITE(bytes_read, sizeof(*bytes_read));
- _SYSCALL_MEMORY_WRITE((void *)data, bytes_to_read);
- _SYSCALL_VERIFY(min_xfer <= bytes_to_read);
+ Z_OOPS(Z_SYSCALL_OBJ(pipe, K_OBJ_PIPE));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(bytes_read, sizeof(*bytes_read)));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE((void *)data, bytes_to_read));
+ Z_OOPS(Z_SYSCALL_VERIFY(min_xfer <= bytes_to_read));
return _impl_k_pipe_get((struct k_pipe *)pipe, (void *)data,
bytes_to_read, bytes_read, min_xfer,
@@ -743,16 +743,16 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_pipe_put, pipe, data, bytes_to_write, bytes_written_p,
+Z_SYSCALL_HANDLER(k_pipe_put, pipe, data, bytes_to_write, bytes_written_p,
min_xfer_p, timeout)
{
size_t *bytes_written = (size_t *)bytes_written_p;
size_t min_xfer = (size_t)min_xfer_p;
- _SYSCALL_OBJ(pipe, K_OBJ_PIPE);
- _SYSCALL_MEMORY_WRITE(bytes_written, sizeof(*bytes_written));
- _SYSCALL_MEMORY_READ((void *)data, bytes_to_write);
- _SYSCALL_VERIFY(min_xfer <= bytes_to_write);
+ Z_OOPS(Z_SYSCALL_OBJ(pipe, K_OBJ_PIPE));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(bytes_written, sizeof(*bytes_written)));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ((void *)data, bytes_to_write));
+ Z_OOPS(Z_SYSCALL_VERIFY(min_xfer <= bytes_to_write));
return _impl_k_pipe_put((struct k_pipe *)pipe, (void *)data,
bytes_to_write, bytes_written, min_xfer,
diff --git a/kernel/queue.c b/kernel/queue.c
index 426588f..3426277 100644
--- a/kernel/queue.c
+++ b/kernel/queue.c
@@ -94,11 +94,11 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_queue_init, queue_ptr)
+Z_SYSCALL_HANDLER(k_queue_init, queue_ptr)
{
struct k_queue *queue = (struct k_queue *)queue_ptr;
- _SYSCALL_OBJ_NEVER_INIT(queue, K_OBJ_QUEUE);
+ Z_OOPS(Z_SYSCALL_OBJ_NEVER_INIT(queue, K_OBJ_QUEUE));
_impl_k_queue_init(queue);
return 0;
}
@@ -138,8 +138,8 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_queue_cancel_wait, K_OBJ_QUEUE,
- struct k_queue *);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_queue_cancel_wait, K_OBJ_QUEUE,
+ struct k_queue *);
#endif
static int queue_insert(struct k_queue *queue, void *prev, void *data,
@@ -204,9 +204,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_queue_alloc_append, queue, data)
+Z_SYSCALL_HANDLER(k_queue_alloc_append, queue, data)
{
- _SYSCALL_OBJ(queue, K_OBJ_QUEUE);
+ Z_OOPS(Z_SYSCALL_OBJ(queue, K_OBJ_QUEUE));
return _impl_k_queue_alloc_append((struct k_queue *)queue,
(void *)data);
@@ -219,9 +219,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_queue_alloc_prepend, queue, data)
+Z_SYSCALL_HANDLER(k_queue_alloc_prepend, queue, data)
{
- _SYSCALL_OBJ(queue, K_OBJ_QUEUE);
+ Z_OOPS(Z_SYSCALL_OBJ(queue, K_OBJ_QUEUE));
return _impl_k_queue_alloc_prepend((struct k_queue *)queue,
(void *)data);
@@ -338,16 +338,16 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_queue_get, queue, timeout_p)
+Z_SYSCALL_HANDLER(k_queue_get, queue, timeout_p)
{
s32_t timeout = timeout_p;
- _SYSCALL_OBJ(queue, K_OBJ_QUEUE);
+ Z_OOPS(Z_SYSCALL_OBJ(queue, K_OBJ_QUEUE));
return (u32_t)_impl_k_queue_get((struct k_queue *)queue, timeout);
}
-_SYSCALL_HANDLER1_SIMPLE(k_queue_is_empty, K_OBJ_QUEUE, struct k_queue *);
-_SYSCALL_HANDLER1_SIMPLE(k_queue_peek_head, K_OBJ_QUEUE, struct k_queue *);
-_SYSCALL_HANDLER1_SIMPLE(k_queue_peek_tail, K_OBJ_QUEUE, struct k_queue *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_queue_is_empty, K_OBJ_QUEUE, struct k_queue *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_queue_peek_head, K_OBJ_QUEUE, struct k_queue *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_queue_peek_tail, K_OBJ_QUEUE, struct k_queue *);
#endif /* CONFIG_USERSPACE */
diff --git a/kernel/sched.c b/kernel/sched.c
index 3bd82c4..ef7a685 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -354,8 +354,8 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE(k_thread_priority_get, K_OBJ_THREAD,
- struct k_thread *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_thread_priority_get, K_OBJ_THREAD,
+ struct k_thread *);
#endif
void _impl_k_thread_priority_set(k_tid_t tid, int prio)
@@ -375,16 +375,16 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_thread_priority_set, thread_p, prio)
+Z_SYSCALL_HANDLER(k_thread_priority_set, thread_p, prio)
{
struct k_thread *thread = (struct k_thread *)thread_p;
- _SYSCALL_OBJ(thread, K_OBJ_THREAD);
- _SYSCALL_VERIFY_MSG(_is_valid_prio(prio, NULL),
- "invalid thread priority %d", (int)prio);
- _SYSCALL_VERIFY_MSG((s8_t)prio >= thread->base.prio,
- "thread priority may only be downgraded (%d < %d)",
- prio, thread->base.prio);
+ Z_OOPS(Z_SYSCALL_OBJ(thread, K_OBJ_THREAD));
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(_is_valid_prio(prio, NULL),
+ "invalid thread priority %d", (int)prio));
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG((s8_t)prio >= thread->base.prio,
+ "thread priority may only be downgraded (%d < %d)",
+ prio, thread->base.prio));
_impl_k_thread_priority_set((k_tid_t)thread, prio);
return 0;
@@ -438,7 +438,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER0_SIMPLE_VOID(k_yield);
+Z_SYSCALL_HANDLER0_SIMPLE_VOID(k_yield);
#endif
void _impl_k_sleep(s32_t duration)
@@ -472,13 +472,13 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_sleep, duration)
+Z_SYSCALL_HANDLER(k_sleep, duration)
{
/* FIXME there were some discussions recently on whether we should
* relax this, thread would be unscheduled until k_wakeup issued
*/
- _SYSCALL_VERIFY_MSG(duration != K_FOREVER,
- "sleeping forever not allowed");
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(duration != K_FOREVER,
+ "sleeping forever not allowed"));
_impl_k_sleep(duration);
return 0;
@@ -510,7 +510,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_wakeup, K_OBJ_THREAD, k_tid_t);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_wakeup, K_OBJ_THREAD, k_tid_t);
#endif
k_tid_t _impl_k_current_get(void)
@@ -519,7 +519,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER0_SIMPLE(k_current_get);
+Z_SYSCALL_HANDLER0_SIMPLE(k_current_get);
#endif
#ifdef CONFIG_TIMESLICING
@@ -591,7 +591,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER0_SIMPLE(k_is_preempt_thread);
+Z_SYSCALL_HANDLER0_SIMPLE(k_is_preempt_thread);
#endif
#ifdef CONFIG_SMP
diff --git a/kernel/sem.c b/kernel/sem.c
index 3a93cb2..142f5c0 100644
--- a/kernel/sem.c
+++ b/kernel/sem.c
@@ -73,10 +73,10 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_sem_init, sem, initial_count, limit)
+Z_SYSCALL_HANDLER(k_sem_init, sem, initial_count, limit)
{
- _SYSCALL_OBJ_INIT(sem, K_OBJ_SEM);
- _SYSCALL_VERIFY(limit != 0 && initial_count <= limit);
+ Z_OOPS(Z_SYSCALL_OBJ_INIT(sem, K_OBJ_SEM));
+ Z_OOPS(Z_SYSCALL_VERIFY(limit != 0 && initial_count <= limit));
_impl_k_sem_init((struct k_sem *)sem, initial_count, limit);
return 0;
}
@@ -139,7 +139,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_sem_give, K_OBJ_SEM, struct k_sem *);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_sem_give, K_OBJ_SEM, struct k_sem *);
#endif
int _impl_k_sem_take(struct k_sem *sem, s32_t timeout)
@@ -163,12 +163,12 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_sem_take, sem, timeout)
+Z_SYSCALL_HANDLER(k_sem_take, sem, timeout)
{
- _SYSCALL_OBJ(sem, K_OBJ_SEM);
+ Z_OOPS(Z_SYSCALL_OBJ(sem, K_OBJ_SEM));
return _impl_k_sem_take((struct k_sem *)sem, timeout);
}
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_sem_reset, K_OBJ_SEM, struct k_sem *);
-_SYSCALL_HANDLER1_SIMPLE(k_sem_count_get, K_OBJ_SEM, struct k_sem *);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_sem_reset, K_OBJ_SEM, struct k_sem *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_sem_count_get, K_OBJ_SEM, struct k_sem *);
#endif
diff --git a/kernel/stack.c b/kernel/stack.c
index 77effa0..25e51aa 100644
--- a/kernel/stack.c
+++ b/kernel/stack.c
@@ -74,10 +74,10 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_stack_alloc_init, stack, num_entries)
+Z_SYSCALL_HANDLER(k_stack_alloc_init, stack, num_entries)
{
- _SYSCALL_OBJ_NEVER_INIT(stack, K_OBJ_STACK);
- _SYSCALL_VERIFY(num_entries > 0);
+ Z_OOPS(Z_SYSCALL_OBJ_NEVER_INIT(stack, K_OBJ_STACK));
+ Z_OOPS(Z_SYSCALL_VERIFY(num_entries > 0));
_impl_k_stack_alloc_init((struct k_stack *)stack, num_entries);
return 0;
@@ -122,12 +122,13 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_stack_push, stack_p, data)
+Z_SYSCALL_HANDLER(k_stack_push, stack_p, data)
{
struct k_stack *stack = (struct k_stack *)stack_p;
- _SYSCALL_OBJ(stack, K_OBJ_STACK);
- _SYSCALL_VERIFY_MSG(stack->next != stack->top, "stack is full");
+ Z_OOPS(Z_SYSCALL_OBJ(stack, K_OBJ_STACK));
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(stack->next != stack->top,
+ "stack is full"));
_impl_k_stack_push(stack, data);
return 0;
@@ -162,10 +163,10 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_stack_pop, stack, data, timeout)
+Z_SYSCALL_HANDLER(k_stack_pop, stack, data, timeout)
{
- _SYSCALL_OBJ(stack, K_OBJ_STACK);
- _SYSCALL_MEMORY_WRITE(data, sizeof(u32_t));
+ Z_OOPS(Z_SYSCALL_OBJ(stack, K_OBJ_STACK));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(data, sizeof(u32_t)));
return _impl_k_stack_pop((struct k_stack *)stack, (u32_t *)data,
timeout);
diff --git a/kernel/sys_clock.c b/kernel/sys_clock.c
index 192fa8d..6c4afb4 100644
--- a/kernel/sys_clock.c
+++ b/kernel/sys_clock.c
@@ -79,10 +79,10 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_uptime_get_32)
+Z_SYSCALL_HANDLER(k_uptime_get_32)
{
#ifdef CONFIG_TICKLESS_KERNEL
- _SYSCALL_VERIFY(_sys_clock_always_on);
+ Z_OOPS(Z_SYSCALL_VERIFY(_sys_clock_always_on));
#endif
return _impl_k_uptime_get_32();
}
@@ -126,11 +126,11 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_uptime_get, ret_p)
+Z_SYSCALL_HANDLER(k_uptime_get, ret_p)
{
u64_t *ret = (u64_t *)ret_p;
- _SYSCALL_MEMORY_WRITE(ret, sizeof(*ret));
+ Z_OOPS(Z_SYSCALL_MEMORY_WRITE(ret, sizeof(*ret)));
*ret = _impl_k_uptime_get();
return 0;
}
diff --git a/kernel/thread.c b/kernel/thread.c
index 2c8863f..cdc074b 100644
--- a/kernel/thread.c
+++ b/kernel/thread.c
@@ -131,7 +131,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_thread_custom_data_set, data)
+Z_SYSCALL_HANDLER(k_thread_custom_data_set, data)
{
_impl_k_thread_custom_data_set((void *)data);
return 0;
@@ -144,7 +144,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER0_SIMPLE(k_thread_custom_data_get);
+Z_SYSCALL_HANDLER0_SIMPLE(k_thread_custom_data_get);
#endif /* CONFIG_USERSPACE */
#endif /* CONFIG_THREAD_CUSTOM_DATA */
@@ -224,7 +224,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_thread_start, K_OBJ_THREAD, struct k_thread *);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_thread_start, K_OBJ_THREAD, struct k_thread *);
#endif
#endif
@@ -336,8 +336,8 @@
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_thread_create,
- new_thread_p, stack_p, stack_size, entry, p1, more_args)
+Z_SYSCALL_HANDLER(k_thread_create,
+ new_thread_p, stack_p, stack_size, entry, p1, more_args)
{
int prio;
u32_t options, delay;
@@ -352,12 +352,12 @@
k_thread_stack_t *stack = (k_thread_stack_t *)stack_p;
/* The thread and stack objects *must* be in an uninitialized state */
- _SYSCALL_OBJ_NEVER_INIT(new_thread, K_OBJ_THREAD);
+ Z_OOPS(Z_SYSCALL_OBJ_NEVER_INIT(new_thread, K_OBJ_THREAD));
stack_object = _k_object_find(stack);
- _SYSCALL_VERIFY_MSG(!_obj_validation_check(stack_object, stack,
- K_OBJ__THREAD_STACK_ELEMENT,
- _OBJ_INIT_FALSE),
- "bad stack object");
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(!_obj_validation_check(stack_object, stack,
+ K_OBJ__THREAD_STACK_ELEMENT,
+ _OBJ_INIT_FALSE),
+ "bad stack object"));
#ifndef CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT
/* Verify that the stack size passed in is OK by computing the total
@@ -368,20 +368,21 @@
* size and not allocated in addition to the stack size
*/
guard_size = (u32_t)K_THREAD_STACK_BUFFER(stack) - (u32_t)stack;
- _SYSCALL_VERIFY_MSG(!__builtin_uadd_overflow(guard_size, stack_size,
- &total_size),
- "stack size overflow (%u+%u)", stack_size,
- guard_size);
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(!__builtin_uadd_overflow(guard_size,
+ stack_size,
+ &total_size),
+ "stack size overflow (%u+%u)", stack_size,
+ guard_size));
#else
total_size = stack_size;
#endif
/* They really ought to be equal, make this more strict? */
- _SYSCALL_VERIFY_MSG(total_size <= stack_object->data,
- "stack size %u is too big, max is %u",
- total_size, stack_object->data);
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(total_size <= stack_object->data,
+ "stack size %u is too big, max is %u",
+ total_size, stack_object->data));
/* Verify the struct containing args 6-10 */
- _SYSCALL_MEMORY_READ(margs, sizeof(*margs));
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(margs, sizeof(*margs)));
/* Stash struct arguments in local variables to prevent switcheroo
* attacks
@@ -394,14 +395,15 @@
/* User threads may only create other user threads and they can't
* be marked as essential
*/
- _SYSCALL_VERIFY(options & K_USER);
- _SYSCALL_VERIFY(!(options & K_ESSENTIAL));
+ Z_OOPS(Z_SYSCALL_VERIFY(options & K_USER));
+ Z_OOPS(Z_SYSCALL_VERIFY(!(options & K_ESSENTIAL)));
/* Check validity of prio argument; must be the same or worse priority
* than the caller
*/
- _SYSCALL_VERIFY(_is_valid_prio(prio, NULL));
- _SYSCALL_VERIFY(_is_prio_lower_or_equal(prio, _current->base.prio));
+ Z_OOPS(Z_SYSCALL_VERIFY(_is_valid_prio(prio, NULL)));
+ Z_OOPS(Z_SYSCALL_VERIFY(_is_prio_lower_or_equal(prio,
+ _current->base.prio)));
_setup_new_thread((struct k_thread *)new_thread, stack, stack_size,
(k_thread_entry_t)entry, (void *)p1,
@@ -438,7 +440,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE(k_thread_cancel, K_OBJ_THREAD, struct k_thread *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_thread_cancel, K_OBJ_THREAD, struct k_thread *);
#endif
void _k_thread_single_suspend(struct k_thread *thread)
@@ -464,7 +466,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_thread_suspend, K_OBJ_THREAD, k_tid_t);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_thread_suspend, K_OBJ_THREAD, k_tid_t);
#endif
void _k_thread_single_resume(struct k_thread *thread)
@@ -483,7 +485,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_thread_resume, K_OBJ_THREAD, k_tid_t);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_thread_resume, K_OBJ_THREAD, k_tid_t);
#endif
void _k_thread_single_abort(struct k_thread *thread)
diff --git a/kernel/thread_abort.c b/kernel/thread_abort.c
index 85fea8a..e3cc872 100644
--- a/kernel/thread_abort.c
+++ b/kernel/thread_abort.c
@@ -52,12 +52,12 @@
#endif
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_thread_abort, thread_p)
+Z_SYSCALL_HANDLER(k_thread_abort, thread_p)
{
struct k_thread *thread = (struct k_thread *)thread_p;
- _SYSCALL_OBJ(thread, K_OBJ_THREAD);
- _SYSCALL_VERIFY_MSG(!(thread->base.user_options & K_ESSENTIAL),
- "aborting essential thread %p", thread);
+ Z_OOPS(Z_SYSCALL_OBJ(thread, K_OBJ_THREAD));
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(!(thread->base.user_options & K_ESSENTIAL),
+ "aborting essential thread %p", thread));
_impl_k_thread_abort((struct k_thread *)thread);
return 0;
diff --git a/kernel/timer.c b/kernel/timer.c
index ea1ac6b..6b4a573 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -133,16 +133,16 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_timer_start, timer, duration_p, period_p)
+Z_SYSCALL_HANDLER(k_timer_start, timer, duration_p, period_p)
{
s32_t duration, period;
duration = (s32_t)duration_p;
period = (s32_t)period_p;
- _SYSCALL_VERIFY(duration >= 0 && period >= 0 &&
- (duration != 0 || period != 0));
- _SYSCALL_OBJ(timer, K_OBJ_TIMER);
+ Z_OOPS(Z_SYSCALL_VERIFY(duration >= 0 && period >= 0 &&
+ (duration != 0 || period != 0)));
+ Z_OOPS(Z_SYSCALL_OBJ(timer, K_OBJ_TIMER));
_impl_k_timer_start((struct k_timer *)timer, duration, period);
return 0;
}
@@ -178,7 +178,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE_VOID(k_timer_stop, K_OBJ_TIMER, struct k_timer *);
+Z_SYSCALL_HANDLER1_SIMPLE_VOID(k_timer_stop, K_OBJ_TIMER, struct k_timer *);
#endif
u32_t _impl_k_timer_status_get(struct k_timer *timer)
@@ -193,7 +193,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE(k_timer_status_get, K_OBJ_TIMER, struct k_timer *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_timer_status_get, K_OBJ_TIMER, struct k_timer *);
#endif
u32_t _impl_k_timer_status_sync(struct k_timer *timer)
@@ -225,7 +225,7 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE(k_timer_status_sync, K_OBJ_TIMER, struct k_timer *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_timer_status_sync, K_OBJ_TIMER, struct k_timer *);
#endif
s32_t _timeout_remaining_get(struct _timeout *timeout)
@@ -256,12 +256,12 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER1_SIMPLE(k_timer_remaining_get, K_OBJ_TIMER, struct k_timer *);
-_SYSCALL_HANDLER1_SIMPLE(k_timer_user_data_get, K_OBJ_TIMER, struct k_timer *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_timer_remaining_get, K_OBJ_TIMER, struct k_timer *);
+Z_SYSCALL_HANDLER1_SIMPLE(k_timer_user_data_get, K_OBJ_TIMER, struct k_timer *);
-_SYSCALL_HANDLER(k_timer_user_data_set, timer, user_data)
+Z_SYSCALL_HANDLER(k_timer_user_data_set, timer, user_data)
{
- _SYSCALL_OBJ(timer, K_OBJ_TIMER);
+ Z_OOPS(Z_SYSCALL_OBJ(timer, K_OBJ_TIMER));
_impl_k_timer_user_data_set((struct k_timer *)timer, (void *)user_data);
return 0;
}
diff --git a/kernel/userspace_handler.c b/kernel/userspace_handler.c
index 0866d1f..358474e 100644
--- a/kernel/userspace_handler.c
+++ b/kernel/userspace_handler.c
@@ -36,34 +36,36 @@
* To avoid double _k_object_find() lookups, we don't call the implementation
* function, but call a level deeper.
*/
-_SYSCALL_HANDLER(k_object_access_grant, object, thread)
+Z_SYSCALL_HANDLER(k_object_access_grant, object, thread)
{
struct _k_object *ko;
- _SYSCALL_OBJ_INIT(thread, K_OBJ_THREAD);
+ Z_OOPS(Z_SYSCALL_OBJ_INIT(thread, K_OBJ_THREAD));
ko = validate_any_object((void *)object);
- _SYSCALL_VERIFY_MSG(ko, "object %p access denied", (void *)object);
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(ko, "object %p access denied",
+ (void *)object));
_thread_perms_set(ko, (struct k_thread *)thread);
return 0;
}
-_SYSCALL_HANDLER(k_object_release, object)
+Z_SYSCALL_HANDLER(k_object_release, object)
{
struct _k_object *ko;
ko = validate_any_object((void *)object);
- _SYSCALL_VERIFY_MSG(ko, "object %p access denied", (void *)object);
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(ko, "object %p access denied",
+ (void *)object));
_thread_perms_clear(ko, _current);
return 0;
}
-_SYSCALL_HANDLER(k_object_alloc, otype)
+Z_SYSCALL_HANDLER(k_object_alloc, otype)
{
- _SYSCALL_VERIFY_MSG(otype > K_OBJ_ANY && otype < K_OBJ_LAST &&
- otype != K_OBJ__THREAD_STACK_ELEMENT,
- "bad object type %d requested", otype);
+ Z_OOPS(Z_SYSCALL_VERIFY_MSG(otype > K_OBJ_ANY && otype < K_OBJ_LAST &&
+ otype != K_OBJ__THREAD_STACK_ELEMENT,
+ "bad object type %d requested", otype));
return (u32_t)_impl_k_object_alloc(otype);
}
diff --git a/misc/printk.c b/misc/printk.c
index a1aa4be..e9ee67d 100644
--- a/misc/printk.c
+++ b/misc/printk.c
@@ -305,9 +305,9 @@
}
#ifdef CONFIG_USERSPACE
-_SYSCALL_HANDLER(k_str_out, c, n)
+Z_SYSCALL_HANDLER(k_str_out, c, n)
{
- _SYSCALL_MEMORY_READ(c, n);
+ Z_OOPS(Z_SYSCALL_MEMORY_READ(c, n));
_impl_k_str_out((char *)c, n);
return 0;
diff --git a/scripts/gen_kobject_list.py b/scripts/gen_kobject_list.py
index df4ab44..5e53db6 100755
--- a/scripts/gen_kobject_list.py
+++ b/scripts/gen_kobject_list.py
@@ -120,18 +120,17 @@
driver_macro_tpl = """
-#define _SYSCALL_DRIVER_%(driver_upper)s(ptr, op) _SYSCALL_DRIVER_GEN(ptr, op, %(driver_lower)s, %(driver_upper)s)
+#define Z_SYSCALL_DRIVER_%(driver_upper)s(ptr, op) Z_SYSCALL_DRIVER_GEN(ptr, op, %(driver_lower)s, %(driver_upper)s)
"""
def write_validation_output(fp):
fp.write("#ifndef __DRIVER_VALIDATION_GEN_H__\n")
fp.write("#define __DRIVER_VALIDATION_GEN_H__\n")
- fp.write("""#define _SYSCALL_DRIVER_GEN(ptr, op, driver_lower_case, driver_upper_case) \\
- do { \\
- _SYSCALL_OBJ(ptr, K_OBJ_DRIVER_##driver_upper_case); \\
- _SYSCALL_DRIVER_OP(ptr, driver_lower_case##_driver_api, op); \\
- } while (0)\n\n""");
+ fp.write("""#define Z_SYSCALL_DRIVER_GEN(ptr, op, driver_lower_case, driver_upper_case) \\
+ (Z_SYSCALL_OBJ(ptr, K_OBJ_DRIVER_##driver_upper_case) || \\
+ Z_SYSCALL_DRIVER_OP(ptr, driver_lower_case##_driver_api, op))
+ """)
for subsystem in subsystems:
subsystem = subsystem.replace("_driver_api", "")