реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> pskb_may_pull()
romez777
сообщение Jun 22 2017, 12:52
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Комментарии к коду pskb_may_pull() на http://elixir.free-electrons.com/linux/lat.../skbuff.c#L1610 говорят, что функция может изменить skb указатели. Если так, то после выполнения этого API, нужно обновлять указатели, например, на L3/L4 заголовки. Но я просмотрел примеры использования функции в ядре, и не нашел чтобы это делали. Почему?
Go to the top of the page
 
+Quote Post
Olej
сообщение Jun 23 2017, 20:23
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(romez777 @ Jun 22 2017, 15:52) *
Комментарии к коду pskb_may_pull() на http://elixir.free-electrons.com/linux/lat.../skbuff.c#L1610 говорят, что функция может изменить skb указатели. Если так, то после выполнения этого API, нужно обновлять указатели, например, на L3/L4 заголовки.

Комментарии говорят совсем о другом, о том, что очередь сокетных буферов может быть изменена (переставлена, перетасована). Но это вовсе не значит, что изменится хоть один конкретный struct sk_buff*.

Но!
Кроме того, если вы лезете в такую глубину, то:
- должны бы знать, что API ядра, начинающиеся с __ (2-х _) предназначены для внутреннего использования, а не для сторонних вызовов в качестве API;
- должны бы прочитать, в тех же комментариях, что это вызов сложный, экзотика и вызывается только в исключительных случаях.
Go to the top of the page
 
+Quote Post
romez777
сообщение Jul 7 2017, 21:06
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



QUOTE (Olej @ Jun 24 2017, 00:23) *
Комментарии говорят совсем о другом, о том, что очередь сокетных буферов может быть изменена (переставлена, перетасована). Но это вовсе не значит, что изменится хоть один конкретный struct sk_buff*.

Комментарии к функции дважды это упоминают:

CODE
/**
*    __pskb_pull_tail - advance tail of skb header
* ...
*    All the pointers pointing into skb header may change and must be
*    reloaded after call to this function.
*/

/* Moves tail of skb head forward, copying data from fragmented part,
* when it is necessary.
* 1. It may fail due to malloc failure.
* 2. It may change skb pointers.
* ...
*/


Функция изменяет как минимум два указателя, tail и data_len, это видно из кода.

QUOTE
Но![/b]
Кроме того, если вы лезете в такую глубину, то:
- должны бы знать, что API ядра, начинающиеся с __ (2-х _) предназначены для внутреннего использования, а не для сторонних вызовов в качестве API;


Такого правила, "высеченного в камне", нет. Использование функций с "__" префиксом широко практикуется в драйверах, там где это оправданно, например исключить проверки и валидации входных параметров, поскольку это уже сделано в коде драйвера. Более того, __pskb_pull_tail() экспортируемый символ, следовательно может использоваться.

QUOTE
- должны бы прочитать, в тех же комментариях, что это вызов сложный, экзотика и вызывается только в исключительных случаях.

Эта функция вызывается из pskb_may_pull(), в чем экзотика?
Go to the top of the page
 
+Quote Post
Olej
сообщение Jul 13 2017, 16:50
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(romez777 @ Jul 8 2017, 00:06) *
Комментарии к функции дважды это упоминают:
Функция изменяет как минимум два указателя, tail и data_len, это видно из кода.

Вы указатели и то на что они указывают - различаете? laughing.gif

Цитата(romez777 @ Jul 8 2017, 00:06) *
Такого правила, "высеченного в камне", нет.

Есть.
Читайте матчасть. smile3046.gif

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 06:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016