Bläddra i källkod

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 <[email protected]>
zhaoyao73 1 år sedan
förälder
incheckning
607783d741

+ 11 - 8
kernel/src/driver/pci/pci_irq.c

@@ -42,14 +42,17 @@ uint16_t c_irq_install(ul irq_num,void (*pci_irq_handler)(ul irq_num, ul paramet
     {
         return EAGAIN;
     }
+
     hardware_intr_controller* pci_interrupt_controller = kmalloc(sizeof(hardware_intr_controller),0);
-    pci_interrupt_controller->enable = pci_irq_enable;
-    pci_interrupt_controller->disable = pci_irq_disable;
-    pci_interrupt_controller->install= pci_irq_install;
-    pci_interrupt_controller->uninstall= pci_irq_uninstall;
-    if(pci_irq_ack)
+    if (pci_interrupt_controller) {
+        pci_interrupt_controller->enable = pci_irq_enable;
+        pci_interrupt_controller->disable = pci_irq_disable;
+        pci_interrupt_controller->install = pci_irq_install;
+        pci_interrupt_controller->uninstall = pci_irq_uninstall;
         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);
     memset(p->irq_name, 0, 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);
     }
-    if(p->irq_name!=NULL)
+    if(p->irq_name != NULL)
     {
         kfree(p->irq_name);
         p->irq_name = NULL;
     }
-    if(p->controller!=NULL)
+    if(p->controller != NULL)
     {
         kfree(p->controller);
         p->controller = NULL;

+ 1 - 0
kernel/src/driver/timers/HPET/HPET.c

@@ -27,6 +27,7 @@ static uint64_t test_tsc_end = 0;
 extern uint64_t Cpu_tsc_freq; // 导出自cpu.c
 
 extern struct rtc_time_t rtc_now; // 导出全局墙上时钟
+extern uint64_t rs_update_timer_jiffies(uint64_t);
 
 enum
 {

+ 3 - 1
tools/build_gcc_toolchain.sh

@@ -89,7 +89,9 @@ case `cat /etc/os-release | grep '^NAME=' | cut -d'"' -f2` in
             wget
         ;;
     "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
         ;;
     *)
         ;;