The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"создание копии переменной в пространстве ядра Linux"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"создание копии переменной в пространстве ядра Linux"  
Сообщение от Gekt0r (??) on 23-Апр-07, 11:25 
Всем привет.
Мне надо скопировать переменную в пространстве ядра Линукс.
Есть переменная *buf типа sk_buff. Мне надо сделать ее копию. Я делаю так:

struct sk_buff *new_buff; //создание новой переменной
newbuf = kmalloc (sizeof(&buf), GFP_KERNEL);//выделение под нее памяти
memcpy (&newbuf, &buf, sizeof(&buf)); //копирование области памяти

Однако такая схема почему-то не ведет к копированию переменной buf. При изменении новой переменной newbuf изменяется и исходная.
Вопрос: где я ошибаюсь?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "создание копии переменной в пространстве ядра Linux"  
Сообщение от dronord (ok) on 23-Апр-07, 18:40 
Может здесь нужно копировать не адреса, а данные?
Т.е.
newbuf = kmalloc (sizeof(buf), GFP_KERNEL);//выделение под нее памяти
memcpy (newbuf, buf, sizeof(buf)); //копирование области памяти
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "создание копии переменной в пространстве ядра Linux"  
Сообщение от Michelnok (ok) on 28-Апр-07, 16:53 

>
newbuf = kmalloc (sizeof(buf), GFP_KERNEL);//выделение под нее памяти 
>memcpy (newbuf, buf, sizeof(buf)); //копирование области памяти

Конкретно для sk_buf и это тоже работать не будет, при копировании sk_buf недостаточно sizeof(struct sk_buf).
Автору вопроса - должны быть специальные функции для создания копий sk_buf, посмотрите внимательно в заголовочном файле. Ну а Ваш код совершенно некоректен. Вы копируете в указатель на структуру первые 4 байта (или 8, если размер указателя 64 бита) из структуры. В лучшем случае будет утечка (memcpy затирает результат kmalloc), в худшем Вы пойдете по мусору, попытавшись обратиться по new_buf->somefield, со всеми вытекающими последствиями...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру