LINUX.ORG.RU

История изменений

Исправление WeSTMan, (текущая версия) :

Чего то я не понимаю, в исходниках нашел хороший пример:

skb2 = skb_copy_expand(skb, EEM_HLEN, ETH_FCS_LEN + padlen, GFP_ATOMIC);

dev_kfree_skb_any(skb);

skb = skb2;

if (!skb) return skb;

Сделал по примеру:

struct sk_buff *skb_copy;

skb_copy = skb_copy_expand(skb, skb_headroom(skb), skb->tail+extra_data_len, GFP_ATOMIC);

if (!skb_copy) {

printk("Not skb_copy :(\n");
						 
dev_kfree_skb(skb_copy);

return NF_DROP;

}

dev_kfree_skb(skb);

skb = skb_copy;

Получил ошибку:

BUG: unable to handle kernel NULL pointer dereference at 0000000000000048

А так же работу трейса

[31266.194001] [] ip_output+0x5f/0xd0

[31266.194515] [] ? __ip_local_out+0x52/0xf0

[31266.195050] [] ? ip_fragment.constprop.53+0x80/0x80

[31266.195570] [] ip_local_out+0x3b/0x50

[31266.196091] [] ip_send_skb+0x19/0x40

[31266.196611] [] udp_send_skb+0x16d/0x290

[31266.197128] [] udp_sendmsg+0x533/0xb20

[31266.197649] [] ? ip_reply_glue_bits+0x60/0x60

[31266.198172] [] ? aa_sock_msg_perm+0x5d/0x140

[31266.198727] [] inet_sendmsg+0x6d/0xa0

[31266.199094] [] sock_sendmsg+0x3e/0x50

[31266.199446] [] SYSC_sendto+0x102/0x190

[31266.199794] [] ? dentry_free+0x4e/0x90

[31266.200148] [] ? __dentry_kill+0x157/0x1e0

[31266.200623] [] SyS_sendto+0xe/0x10

[31266.201147] [] compat_SyS_socketcall+0x272/0x4c0

[31266.201673] [] ? do_gettimeofday+0x1a/0x50

[31266.202198] [] do_fast_syscall_32+0xb2/0x150

[31266.202723] [] sysenter_flags_fixed+0x8/0x15

Как я понял - идет фрагментация? Или что-то с указателем :(

И почему то я получил неверные данные:

tail - 176 | end - 192

[31986.663522] skb copy success copied

[31986.664141] tail - 196 | end - 704

Тут видно, что не хватает 4 байт, но почему end = 704?

Исправление WeSTMan, :

Чего то я не понимаю, в исходниках нашел хороший пример:

skb2 = skb_copy_expand(skb, EEM_HLEN, ETH_FCS_LEN + padlen, GFP_ATOMIC);

dev_kfree_skb_any(skb);

skb = skb2;

if (!skb) return skb;

Сделал по примеру:

struct sk_buff *skb_copy;

skb_copy = skb_copy_expand(skb, skb_headroom(skb), skb->tail+extra_data_len, GFP_ATOMIC);

if (!skb_copy) {

printk("Not skb_copy :(\n");
						 
dev_kfree_skb(skb_copy);

return NF_DROP;

}

dev_kfree_skb(skb);

skb = skb_copy;

Получил ошибку:

BUG: unable to handle kernel NULL pointer dereference at 0000000000000048

А так же работу трейса

[31266.194001] [] ip_output+0x5f/0xd0

[31266.194515] [] ? __ip_local_out+0x52/0xf0

[31266.195050] [] ? ip_fragment.constprop.53+0x80/0x80

[31266.195570] [] ip_local_out+0x3b/0x50

[31266.196091] [] ip_send_skb+0x19/0x40

[31266.196611] [] udp_send_skb+0x16d/0x290

[31266.197128] [] udp_sendmsg+0x533/0xb20

[31266.197649] [] ? ip_reply_glue_bits+0x60/0x60

[31266.198172] [] ? aa_sock_msg_perm+0x5d/0x140

[31266.198727] [] inet_sendmsg+0x6d/0xa0

[31266.199094] [] sock_sendmsg+0x3e/0x50

[31266.199446] [] SYSC_sendto+0x102/0x190

[31266.199794] [] ? dentry_free+0x4e/0x90

[31266.200148] [] ? __dentry_kill+0x157/0x1e0

[31266.200623] [] SyS_sendto+0xe/0x10

[31266.201147] [] compat_SyS_socketcall+0x272/0x4c0

[31266.201673] [] ? do_gettimeofday+0x1a/0x50

[31266.202198] [] do_fast_syscall_32+0xb2/0x150

[31266.202723] [] sysenter_flags_fixed+0x8/0x15

Как я понял - идет фрагментация? Или что-то с указателем :(

И почему то я получил неверные данные tail - 176 | end - 192

[31986.663522] skb copy success copied

[31986.664141] tail - 196 | end - 704

Тут видно, что не хватает 4 байт, но почему end = 704?

Исправление WeSTMan, :

Чего то я не понимаю, в исходниках нашел хороший пример:

skb2 = skb_copy_expand(skb, EEM_HLEN, ETH_FCS_LEN + padlen, GFP_ATOMIC);

dev_kfree_skb_any(skb);

skb = skb2;

if (!skb) return skb;

Сделал по примеру:

struct sk_buff *skb_copy;

skb_copy = skb_copy_expand(skb, skb_headroom(skb), skb->tail+extra_data_len, GFP_ATOMIC);

if (!skb_copy) {

printk("Not skb_copy :(\n");
						 
dev_kfree_skb(skb_copy);

return NF_DROP;

}

dev_kfree_skb(skb);

skb = skb_copy;

Получил ошибку:

BUG: unable to handle kernel NULL pointer dereference at 0000000000000048

А так же работу трейса

[31266.194001] [] ip_output+0x5f/0xd0

[31266.194515] [] ? __ip_local_out+0x52/0xf0

[31266.195050] [] ? ip_fragment.constprop.53+0x80/0x80

[31266.195570] [] ip_local_out+0x3b/0x50

[31266.196091] [] ip_send_skb+0x19/0x40

[31266.196611] [] udp_send_skb+0x16d/0x290

[31266.197128] [] udp_sendmsg+0x533/0xb20

[31266.197649] [] ? ip_reply_glue_bits+0x60/0x60

[31266.198172] [] ? aa_sock_msg_perm+0x5d/0x140

[31266.198727] [] inet_sendmsg+0x6d/0xa0

[31266.199094] [] sock_sendmsg+0x3e/0x50

[31266.199446] [] SYSC_sendto+0x102/0x190

[31266.199794] [] ? dentry_free+0x4e/0x90

[31266.200148] [] ? __dentry_kill+0x157/0x1e0

[31266.200623] [] SyS_sendto+0xe/0x10

[31266.201147] [] compat_SyS_socketcall+0x272/0x4c0

[31266.201673] [] ? do_gettimeofday+0x1a/0x50

[31266.202198] [] do_fast_syscall_32+0xb2/0x150

[31266.202723] [] sysenter_flags_fixed+0x8/0x15

Как я понял - идет фрагментация? Или что-то с указателем :(

Исходная версия WeSTMan, :

Чего то я не понимаю, в исходниках нашел хороший пример:

skb2 = skb_copy_expand(skb, EEM_HLEN, ETH_FCS_LEN + padlen, GFP_ATOMIC);

dev_kfree_skb_any(skb);

skb = skb2;

if (!skb) return skb;

Сделал по примеру: struct sk_buff *skb_copy;

skb_copy = skb_copy_expand(skb, skb_headroom(skb), skb->tail+extra_data_len, GFP_ATOMIC);

if (!skb_copy) {

printk("Not skb_copy :(\n");
						 
dev_kfree_skb(skb_copy);

return NF_DROP;

}

dev_kfree_skb(skb);

skb = skb_copy;

Получил ошибку:

BUG: unable to handle kernel NULL pointer dereference at 0000000000000048

А так же работу трейса

[31266.194001] [] ip_output+0x5f/0xd0

[31266.194515] [] ? __ip_local_out+0x52/0xf0

[31266.195050] [] ? ip_fragment.constprop.53+0x80/0x80

[31266.195570] [] ip_local_out+0x3b/0x50

[31266.196091] [] ip_send_skb+0x19/0x40

[31266.196611] [] udp_send_skb+0x16d/0x290

[31266.197128] [] udp_sendmsg+0x533/0xb20

[31266.197649] [] ? ip_reply_glue_bits+0x60/0x60

[31266.198172] [] ? aa_sock_msg_perm+0x5d/0x140

[31266.198727] [] inet_sendmsg+0x6d/0xa0

[31266.199094] [] sock_sendmsg+0x3e/0x50

[31266.199446] [] SYSC_sendto+0x102/0x190

[31266.199794] [] ? dentry_free+0x4e/0x90

[31266.200148] [] ? __dentry_kill+0x157/0x1e0

[31266.200623] [] SyS_sendto+0xe/0x10

[31266.201147] [] compat_SyS_socketcall+0x272/0x4c0

[31266.201673] [] ? do_gettimeofday+0x1a/0x50

[31266.202198] [] do_fast_syscall_32+0xb2/0x150

[31266.202723] [] sysenter_flags_fixed+0x8/0x15

Как я понял - идет фрагментация? Или что-то с указателем :(