提交 23a83bfe 编写于 作者: D Dominik Brodowski 提交者: Linus Torvalds

[PATCH] pcmcia: check for invalid crc32 hashes in id_tables

Check for invalid crc32 hashes in drivers' id_tables if CONFIG_PCMCIA_DEBUG is
set.
Signed-off-by: NDominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 1ad275e3
......@@ -260,6 +260,41 @@ void cs_error(client_handle_t handle, int func, int ret)
}
EXPORT_SYMBOL(cs_error);
#ifdef CONFIG_PCMCIA_DEBUG
static void pcmcia_check_driver(struct pcmcia_driver *p_drv)
{
struct pcmcia_device_id *did = p_drv->id_table;
unsigned int i;
u32 hash;
while (did && did->match_flags) {
for (i=0; i<4; i++) {
if (!did->prod_id[i])
continue;
hash = crc32(0, did->prod_id[i], strlen(did->prod_id[i]));
if (hash == did->prod_id_hash[i])
continue;
printk(KERN_DEBUG "pcmcia: %s: invalid hash for "
"product string \"%s\": is 0x%x, should "
"be 0x%x\n", p_drv->drv.name, did->prod_id[i],
did->prod_id_hash[i], hash);
}
did++;
}
return;
}
#else
static inline void pcmcia_check_driver(struct pcmcia_driver *p_drv) {
return;
}
#endif
/*======================================================================*/
static struct pcmcia_driver * get_pcmcia_driver (dev_info_t *dev_info);
......@@ -296,6 +331,8 @@ int pcmcia_register_driver(struct pcmcia_driver *driver)
if (!driver)
return -EINVAL;
pcmcia_check_driver(driver);
/* initialize common fields */
driver->drv.bus = &pcmcia_bus_type;
driver->drv.owner = driver->owner;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册