Это не нормально, потому что copy_from_user()
копирует из текущего пользовательского процесса (что должно быть очевидно, так как невозможно определить, из какого пользовательского процесса копировать).
В системном вызове, вызываемом процессом вашего пользовательского пространства, это нормально, потому что текущий процесс - это процесс вашего пользовательского пространства.Однако в потоке ядра текущий процесс может быть любым другим процессом в системе - поэтому вы копируете из памяти случайного процесса, поэтому вы получаете мусор.
Если вы хотите разделить память междуядро и пользовательский процесс, правильный способ сделать это - kernel выделить его, а затем разрешить процессу пользовательского пространства отобразить его в свое адресное пространство с помощью mmap()
.Поток ядра и процесс пространства пользователя будут использовать разные указатели для ссылки на область памяти - поток ядра будет использовать указатель на память, выделенную в адресном пространстве ядра, а процесс пространства пользователя будет использовать указатель на область памяти, возвращаемую mmap()
.