Кажется, что это функция записи из драйвера устройства.
Первый
printk(KERN_DEBUG "Data> |%s|\n", data);
Не делай этого! Никогда не обращайтесь к пользовательским данным напрямую!
Второй
char chars[s];
Сомневаюсь, что это допустимо C. Вам нужно либо указать размер во время компиляции, либо использовать kmalloc
Использование copy_from_user - это хорошо. Вы должны проверить на наличие ошибок и вернуть -EFAULT. Это нормально.
Так что просто попробуйте и распределите символы, и это должно сработать. Возможно, вы также захотите взглянуть на смещение, хотя для академических целей его можно изначально пропустить.