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