mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-09 11:16:47 +00:00
fix pci_irq.c - memory leak - wrong irq_name allocated length (#367)
add function declaration to avoid compiling warning add extra packages need for build Co-authored-by: Yao Zhao <dragonlinux@gmail.com>
This commit is contained in:
parent
d9113303d8
commit
607783d741
@ -42,14 +42,17 @@ uint16_t c_irq_install(ul irq_num,void (*pci_irq_handler)(ul irq_num, ul paramet
|
|||||||
{
|
{
|
||||||
return EAGAIN;
|
return EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
hardware_intr_controller* pci_interrupt_controller = kmalloc(sizeof(hardware_intr_controller),0);
|
hardware_intr_controller* pci_interrupt_controller = kmalloc(sizeof(hardware_intr_controller),0);
|
||||||
|
if (pci_interrupt_controller) {
|
||||||
pci_interrupt_controller->enable = pci_irq_enable;
|
pci_interrupt_controller->enable = pci_irq_enable;
|
||||||
pci_interrupt_controller->disable = pci_irq_disable;
|
pci_interrupt_controller->disable = pci_irq_disable;
|
||||||
pci_interrupt_controller->install= pci_irq_install;
|
pci_interrupt_controller->install = pci_irq_install;
|
||||||
pci_interrupt_controller->uninstall= pci_irq_uninstall;
|
pci_interrupt_controller->uninstall = pci_irq_uninstall;
|
||||||
if(pci_irq_ack)
|
|
||||||
pci_interrupt_controller->ack = pci_irq_ack;
|
pci_interrupt_controller->ack = pci_irq_ack;
|
||||||
int namelen = sizeof(strlen(irq_name) + 1);
|
p->controller = pci_interrupt_controller;
|
||||||
|
}
|
||||||
|
size_t namelen = strlen(irq_name) + 1;
|
||||||
p->irq_name = (char *)kmalloc(namelen, 0);
|
p->irq_name = (char *)kmalloc(namelen, 0);
|
||||||
memset(p->irq_name, 0, namelen);
|
memset(p->irq_name, 0, namelen);
|
||||||
strncpy(p->irq_name, irq_name, namelen);
|
strncpy(p->irq_name, irq_name, namelen);
|
||||||
@ -73,12 +76,12 @@ void c_irq_uninstall(ul irq_num)
|
|||||||
{
|
{
|
||||||
kerror("irq install for pci irq: invalid irq num: %ld.", irq_num);
|
kerror("irq install for pci irq: invalid irq num: %ld.", irq_num);
|
||||||
}
|
}
|
||||||
if(p->irq_name!=NULL)
|
if(p->irq_name != NULL)
|
||||||
{
|
{
|
||||||
kfree(p->irq_name);
|
kfree(p->irq_name);
|
||||||
p->irq_name = NULL;
|
p->irq_name = NULL;
|
||||||
}
|
}
|
||||||
if(p->controller!=NULL)
|
if(p->controller != NULL)
|
||||||
{
|
{
|
||||||
kfree(p->controller);
|
kfree(p->controller);
|
||||||
p->controller = NULL;
|
p->controller = NULL;
|
||||||
|
@ -27,6 +27,7 @@ static uint64_t test_tsc_end = 0;
|
|||||||
extern uint64_t Cpu_tsc_freq; // 导出自cpu.c
|
extern uint64_t Cpu_tsc_freq; // 导出自cpu.c
|
||||||
|
|
||||||
extern struct rtc_time_t rtc_now; // 导出全局墙上时钟
|
extern struct rtc_time_t rtc_now; // 导出全局墙上时钟
|
||||||
|
extern uint64_t rs_update_timer_jiffies(uint64_t);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -89,7 +89,9 @@ case `cat /etc/os-release | grep '^NAME=' | cut -d'"' -f2` in
|
|||||||
wget
|
wget
|
||||||
;;
|
;;
|
||||||
"Arch"*)
|
"Arch"*)
|
||||||
sudo pacman -S --needed --noconfirm gcc make flex wget texinfo libmpc gmp mpfr
|
sudo pacman -S --needed --noconfirm \
|
||||||
|
gcc make flex wget texinfo libmpc gmp mpfr \
|
||||||
|
diffutils pkgconf which unzip
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user