URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5632
[ Назад ]

Исходное сообщение
"copy_from_user"

Отправлено Doomer , 11-Авг-06 17:51 
Какие могут возникать ошибки в ходе выполнения этой функции?

Точнее из-за чего данные могут быть не скопированы если делать это так:


buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma);
    if (!buf) {
        retval = -ENOMEM;
        goto error;
    }
    if (col=copy_from_user(buf, user_buffer, sizeof(*user_buffer))) {
        retval = -EFAULT;
        goto error;
    }
Fedora Core 4.

В общем заканчивается функция retval равным -EFAULT;


Содержание

Сообщения в этом обсуждении
"copy_from_user"
Отправлено jd , 13-Авг-06 03:39 
>Какие могут возникать ошибки в ходе выполнения этой функции?
>
>Точнее из-за чего данные могут быть не скопированы если делать это так:

Не совсем к делу относится, но у вас user_buffer какого типа? (я про sizeof(*user_buffer))

А по теме: это может быть, например, из-за того, что user_buffer не указывает на валидную память в пространстве процесса, из которого вы обращаетесь к драйверу. Например если этот код у вас в какой-нибудь функции write() и вы ей передаёте левый указатель вместо нормального буфера.


"copy_from_user"
Отправлено phpcoder , 14-Авг-06 09:27 
-if (col=copy_from_user(buf, user_buffer, sizeof(*user_buffer))) {
+if ( (col=copy_from_user(buf, user_buffer, sizeof(*user_buffer))) ) {