mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
hw/intc/xics: Add a check for an invalid server id
A malformed IVE value can result in an invalid server field being passed to icp_irq(). The function assumes the server id is valid and may access invalid state otherwise, potentially leading to a crash. Fix this by validating the server id before using it and ignoring invalid values. Reported-by: Zexiang Zhang <chan9yan9@gmail.com> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3324 Signed-off-by: Zexiang Zhang <chan9yan9@gmail.com> Signed-off-by: Gautam Menghani <gautam@linux.ibm.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260428103645.50617-1-Gautam.Menghani@ibm.com Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/log.h"
|
||||
#include "qapi/error.h"
|
||||
#include "trace.h"
|
||||
#include "qemu/timer.h"
|
||||
@@ -222,6 +223,13 @@ void icp_irq(ICSState *ics, int server, int nr, uint8_t priority)
|
||||
|
||||
trace_xics_icp_irq(server, nr, priority);
|
||||
|
||||
if (!icp) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "XICS: invalid server %d for IRQ 0x%x\n",
|
||||
server, nr);
|
||||
ics_reject(ics, nr);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((priority >= CPPR(icp))
|
||||
|| (XISR(icp) && (icp->pending_priority <= priority))) {
|
||||
ics_reject(ics, nr);
|
||||
|
||||
Reference in New Issue
Block a user