Ошибка неверного адреса означает, что указанное вами адресное местоположение неверно. В случае, описанном выше, я бы предположил, что это потому, что вы передаете копию info
вместо указателя на область памяти info
.
Глядя на документы, copy_to_user
определяется как
copy_to_user(void __user * to, const void * from, unsigned long n);
Так что если ваша переменная info
не является указателем, я бы обновил ваш код так:
if(copy_to_user(&info, &kernel_info, sizeof(struct prinfo)) ) {
//some stuff here i guess
}