diff --git a/common/include/measurement.h b/common/include/measurement.h index d48eef33e9135e85d80378ff57847b94ce40b23f..ec241d12cfd390360ea953aac2b35eff779674d4 100644 --- a/common/include/measurement.h +++ b/common/include/measurement.h @@ -38,7 +38,7 @@ enum measurement_data_type { * typedef message_data_type_t - Alias for uint32_t representing the measurement * data type. */ -typedef uint32_t measurement_data_type_t; +typedef uint8_t measurement_data_type_t; /** * typedef measurement_data_t - Union to hold different types of measurement diff --git a/kernel/kmod.c b/kernel/kmod.c index 7dfff87ac8ce66fe498460abf36b8b06a56998c8..806a5ea69fa1764ae8dbceefb640b7af0bfe9d0c 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -72,7 +72,7 @@ static void prepare_for_sending(void) { uint8_t *bytes = (uint8_t *)packet->data.measurements; for (size_t i = 0; i < sizeof(measurement_t) * packet->data.count; i++) { - send_buffer[bytes[3 + i]] = bytes[i]; + send_buffer[3 + i] = bytes[i]; } bytes = (uint8_t *)&packet->crc; @@ -87,37 +87,29 @@ static void prepare_for_sending(void) { static ssize_t device_write(struct file *filp, const char *input, size_t length, loff_t *offset) { - if (length != sizeof(data_t)) { - printk(KERN_ALERT "lkm: Tried to write more bytes than allowed\n"); + data_t temp_data; + + if (copy_from_user(&temp_data, input, sizeof(data_t))) { return -EFAULT; } - if (((data_t *)input)->count >= MAX_MEASUREMENTS) { + if (temp_data.count >= MAX_MEASUREMENTS) { printk(KERN_ALERT "lkm: Tried to write more measurements than allowed\n"); return -EFAULT; } - if (copy_from_user((void *)&(packet->data.sender_id), - (void *)&(((data_t *)input)->sender_id), - sizeof(uint8_t))) { - return -EFAULT; - } + packet->data.sender_id = temp_data.sender_id; + packet->data.count = temp_data.count; - if (copy_from_user((void *)&(packet->data.count), - (void *)&(((data_t *)input)->count), sizeof(uint8_t))) { - return -EFAULT; - } - - if (copy_from_user((void *)packet->data.measurements, - (void *)((data_t *)input)->measurements, - sizeof(measurement_t) * packet->data.count)) { - return -EFAULT; + if (temp_data.measurements != NULL) { + if (copy_from_user(packet->data.measurements, temp_data.measurements, + sizeof(measurement_t) * temp_data.count)) { + return -EFAULT; + } } prepare_for_sending(); - printk(KERN_INFO "lkm: received write of size %zu\n", length); - return length; }