diff --git a/kernelmq/process.c b/kernelmq/process.c index f80bfda..1858998 100644 --- a/kernelmq/process.c +++ b/kernelmq/process.c @@ -71,6 +71,10 @@ enum KernelMQ_Process_Error KernelMQ_Process_create_from_kernel( return KERNELMQ_PROCESS_ERROR_ADDR_TOO_BIG; } + if (base + size - 1 != limit) { + return KERNELMQ_PROCESS_ERROR_INVALID_AREA; + } + process->areas[area_index].base = base; process->areas[area_index].size = size; process->areas[area_index].limit = limit; @@ -108,6 +112,10 @@ enum KernelMQ_Process_Error KernelMQ_Process_create_from_module( return KERNELMQ_PROCESS_ERROR_ADDR_TOO_BIG; } + if (base + size - 1 != limit) { + return KERNELMQ_PROCESS_ERROR_INVALID_AREA; + } + process->areas[0].base = base; process->areas[0].size = size; process->areas[0].limit = limit; diff --git a/kernelmq/process.h b/kernelmq/process.h index 4860e6a..9480830 100644 --- a/kernelmq/process.h +++ b/kernelmq/process.h @@ -18,8 +18,9 @@ enum KernelMQ_Process_Error { KERNELMQ_PROCESS_ERROR_OK = 0, KERNELMQ_PROCESS_ERROR_CMDLINE_TOO_LONG = 1, KERNELMQ_PROCESS_ERROR_ADDR_TOO_BIG = 2, - KERNELMQ_PROCESS_ERROR_KERNEL_AREAS_LENGTH_TOO_LONG = 3, - KERNELMQ_PROCESS_ERROR_MODULES_TOO_MANY = 4, + KERNELMQ_PROCESS_ERROR_INVALID_AREA = 3, + KERNELMQ_PROCESS_ERROR_KERNEL_AREAS_LENGTH_TOO_LONG = 4, + KERNELMQ_PROCESS_ERROR_MODULES_TOO_MANY = 5, }; enum KernelMQ_Process_CreatedFrom {