vmalloc() a kmalloc() a muj modul do iptables
Dalibor Straka
dast na panelnet.cz
Čtvrtek Květen 20 12:03:41 CEST 2010
Ahoj,
pisu modul do iptables a zlobi me kmalloc(). Napada me, jestli jsem
nezanedbal nejakou systemovou vec. Pro zajimavost vmalloc() mi pro
jistotu spadne rovnou pri alokaci. V jinych modulech mi bezny kmalloc()
nezlobi, jen v tom zatracenym netfilteru. Zkracena verze:
static bool
rtfile_load(const struct xt_mtchk_param *par)
{
...
rtfile->master_index = kmalloc(65536, GFP_KERNEL);
if (!rtfile->master_index) {
printk(KERN_ERR "rtfile: out of memory \n");
goto err2;
}
rtfile->master_index[0xaabb] = 1234;
...
}
static bool
rtfile_match(const struct sk_buff *skb, const struct xt_match_param
*par)
{
...
const u16 *ip_2_byte = (u16 *)addr;
*ip_2_byte = 0xaabb;
printk("master_index[%x] %d, ",
*ip_2_byte, rtfile->master_index[*ip_2_byte])
match = rtfile->master_index[0xaabb];
printk("flags: %x, testing packet: %d.%d.%d.%d -> %d\n",
info->flags, addr[0], addr[1], addr[2], addr[3], match);
...
}
Clovek by cekal, ze v dmesg *NE*uvidi:
master_index[aabb] 1234, flags: 1, testing packet: 192.168.1.104 -> 1234
master_index[aabb] 0, flags: 1, testing packet: 192.168.1.104 -> 0
master_index[aabb] 0, flags: 1, testing packet: 192.168.1.104 -> 0
master_index[aabb] 37, flags: 1, testing packet: 192.168.1.104 -> 37
master_index[aabb] 37, flags: 1, testing packet: 192.168.1.104 -> 37
Neporadi nekdo?
Diky,
-- Dalibor Straka
Další informace o konferenci Linux