i8-stream-rhel^2
changed/i8c-stream-rhel/qemu-kvm-6.2.0-40.module+el8.9.0+20867+9a6a0901.2
parent
3363442cdf
commit
e31f77cf11
@ -0,0 +1,69 @@
|
||||
From fcae66b573ba4b4ddaea9a067703f3292c4e7e87 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Huth <thuth@redhat.com>
|
||||
Date: Thu, 23 Nov 2023 14:42:00 +0100
|
||||
Subject: [PATCH 4/5] dump: Add arch cleanup function
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RH-Author: Thomas Huth <thuth@redhat.com>
|
||||
RH-MergeRequest: 328: Fix problem that secure execution guest remains in "paused" state after failed dump [8.9.z]
|
||||
RH-Jira: RHEL-17253
|
||||
RH-Acked-by: Cédric Le Goater <clg@redhat.com>
|
||||
RH-Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
RH-Commit: [2/3] 4e9640c7dd37155fec6fb6747d212b9862da53ee
|
||||
|
||||
JIRA: https://issues.redhat.com/browse/RHEL-17253
|
||||
|
||||
commit e72629e5149aba6f44122ea6d2a803ef136a0c6b
|
||||
Author: Janosch Frank <frankja@linux.ibm.com>
|
||||
Date: Thu Nov 9 12:04:42 2023 +0000
|
||||
|
||||
dump: Add arch cleanup function
|
||||
|
||||
Some architectures (s390x) need to cleanup after a failed dump to be
|
||||
able to continue to run the vm. Add a cleanup function pointer and
|
||||
call it if it's set.
|
||||
|
||||
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
|
||||
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||||
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
Message-ID: <20231109120443.185979-3-frankja@linux.ibm.com>
|
||||
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||||
|
||||
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||||
---
|
||||
dump/dump.c | 4 ++++
|
||||
include/sysemu/dump-arch.h | 1 +
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/dump/dump.c b/dump/dump.c
|
||||
index 5dee060b73..93edb89547 100644
|
||||
--- a/dump/dump.c
|
||||
+++ b/dump/dump.c
|
||||
@@ -100,6 +100,10 @@ uint64_t cpu_to_dump64(DumpState *s, uint64_t val)
|
||||
|
||||
static int dump_cleanup(DumpState *s)
|
||||
{
|
||||
+ if (s->dump_info.arch_cleanup_fn) {
|
||||
+ s->dump_info.arch_cleanup_fn(s);
|
||||
+ }
|
||||
+
|
||||
guest_phys_blocks_free(&s->guest_phys_blocks);
|
||||
memory_mapping_list_free(&s->list);
|
||||
close(s->fd);
|
||||
diff --git a/include/sysemu/dump-arch.h b/include/sysemu/dump-arch.h
|
||||
index 59bbc9be38..743916e46c 100644
|
||||
--- a/include/sysemu/dump-arch.h
|
||||
+++ b/include/sysemu/dump-arch.h
|
||||
@@ -24,6 +24,7 @@ typedef struct ArchDumpInfo {
|
||||
void (*arch_sections_add_fn)(DumpState *s);
|
||||
uint64_t (*arch_sections_write_hdr_fn)(DumpState *s, uint8_t *buff);
|
||||
int (*arch_sections_write_fn)(DumpState *s, uint8_t *buff);
|
||||
+ void (*arch_cleanup_fn)(DumpState *s);
|
||||
} ArchDumpInfo;
|
||||
|
||||
struct GuestPhysBlockList; /* memory_mapping.h */
|
||||
--
|
||||
2.41.0
|
||||
|
@ -0,0 +1,610 @@
|
||||
From 6faf4c2a88adb32367e26ef011c002b51a8be4a7 Mon Sep 17 00:00:00 2001
|
||||
From: Jon Maloy <jmaloy@redhat.com>
|
||||
Date: Thu, 23 Nov 2023 11:30:46 -0500
|
||||
Subject: [PATCH 1/5] net: Provide MemReentrancyGuard * to qemu_new_nic()
|
||||
|
||||
RH-Author: Jon Maloy <jmaloy@redhat.com>
|
||||
RH-MergeRequest: 332: net: Provide MemReentrancyGuard * to qemu_new_nic()
|
||||
RH-Jira: RHEL-16095
|
||||
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
|
||||
RH-Commit: [1/2] 6440d74b952eb0e8e1ab7e18774ed4a12a2eafe2 (redhat/rhel/src/qemu-kvm/jons-qemu-kvm-2)
|
||||
|
||||
Jira: https://issues.redhat.com/browse/RHEL-16095
|
||||
CVE: CVE-2023-3019
|
||||
Upstream: Merged
|
||||
Conflicts: hw/net/hw/net/xen_nic.c seems to have undergone significant changes upstream,
|
||||
so the change had to be manually adapted to the old code.
|
||||
|
||||
commit 7d0fefdf81f5973334c344f6b8e1896c309dff66
|
||||
Author: Akihiko Odaki <akihiko.odaki@daynix.com>
|
||||
Date: Thu Jun 1 12:18:58 2023 +0900
|
||||
|
||||
net: Provide MemReentrancyGuard * to qemu_new_nic()
|
||||
|
||||
Recently MemReentrancyGuard was added to DeviceState to record that the
|
||||
device is engaging in I/O. The network device backend needs to update it
|
||||
when delivering a packet to a device.
|
||||
|
||||
In preparation for such a change, add MemReentrancyGuard * as a
|
||||
parameter of qemu_new_nic().
|
||||
|
||||
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
|
||||
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
|
||||
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||
|
||||
Signed-off-by: Jon Maloy <jmaloy@redhat.com>
|
||||
---
|
||||
hw/net/allwinner-sun8i-emac.c | 3 ++-
|
||||
hw/net/allwinner_emac.c | 3 ++-
|
||||
hw/net/cadence_gem.c | 3 ++-
|
||||
hw/net/dp8393x.c | 3 ++-
|
||||
hw/net/e1000.c | 3 ++-
|
||||
hw/net/e1000e.c | 2 +-
|
||||
hw/net/eepro100.c | 4 +++-
|
||||
hw/net/etraxfs_eth.c | 3 ++-
|
||||
hw/net/fsl_etsec/etsec.c | 3 ++-
|
||||
hw/net/ftgmac100.c | 3 ++-
|
||||
hw/net/i82596.c | 2 +-
|
||||
hw/net/imx_fec.c | 2 +-
|
||||
hw/net/lan9118.c | 3 ++-
|
||||
hw/net/mcf_fec.c | 3 ++-
|
||||
hw/net/mipsnet.c | 3 ++-
|
||||
hw/net/msf2-emac.c | 3 ++-
|
||||
hw/net/ne2000-isa.c | 3 ++-
|
||||
hw/net/ne2000-pci.c | 3 ++-
|
||||
hw/net/npcm7xx_emc.c | 3 ++-
|
||||
hw/net/opencores_eth.c | 3 ++-
|
||||
hw/net/pcnet.c | 3 ++-
|
||||
hw/net/rocker/rocker_fp.c | 4 ++--
|
||||
hw/net/rtl8139.c | 3 ++-
|
||||
hw/net/smc91c111.c | 3 ++-
|
||||
hw/net/spapr_llan.c | 3 ++-
|
||||
hw/net/stellaris_enet.c | 3 ++-
|
||||
hw/net/sungem.c | 2 +-
|
||||
hw/net/sunhme.c | 3 ++-
|
||||
hw/net/tulip.c | 3 ++-
|
||||
hw/net/virtio-net.c | 6 ++++--
|
||||
hw/net/vmxnet3.c | 2 +-
|
||||
hw/net/xen_nic.c | 3 ++-
|
||||
hw/net/xgmac.c | 3 ++-
|
||||
hw/net/xilinx_axienet.c | 3 ++-
|
||||
hw/net/xilinx_ethlite.c | 3 ++-
|
||||
hw/usb/dev-network.c | 3 ++-
|
||||
include/net/net.h | 1 +
|
||||
net/net.c | 1 +
|
||||
38 files changed, 72 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/hw/net/allwinner-sun8i-emac.c b/hw/net/allwinner-sun8i-emac.c
|
||||
index ff611f18fb..9d0885ee15 100644
|
||||
--- a/hw/net/allwinner-sun8i-emac.c
|
||||
+++ b/hw/net/allwinner-sun8i-emac.c
|
||||
@@ -810,7 +810,8 @@ static void allwinner_sun8i_emac_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_allwinner_sun8i_emac_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/allwinner_emac.c b/hw/net/allwinner_emac.c
|
||||
index ddddf35c45..b3d73143bf 100644
|
||||
--- a/hw/net/allwinner_emac.c
|
||||
+++ b/hw/net/allwinner_emac.c
|
||||
@@ -453,7 +453,8 @@ static void aw_emac_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_aw_emac_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
fifo8_create(&s->rx_fifo, RX_FIFO_SIZE);
|
||||
diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
|
||||
index 24b3a0ff66..cb61a76417 100644
|
||||
--- a/hw/net/cadence_gem.c
|
||||
+++ b/hw/net/cadence_gem.c
|
||||
@@ -1633,7 +1633,8 @@ static void gem_realize(DeviceState *dev, Error **errp)
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
|
||||
s->nic = qemu_new_nic(&net_gem_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
|
||||
if (s->jumbo_max_len > MAX_FRAME_SIZE) {
|
||||
error_setg(errp, "jumbo-max-len is greater than %d",
|
||||
diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c
|
||||
index 45b954e46c..abfcc6f69f 100644
|
||||
--- a/hw/net/dp8393x.c
|
||||
+++ b/hw/net/dp8393x.c
|
||||
@@ -943,7 +943,8 @@ static void dp8393x_realize(DeviceState *dev, Error **errp)
|
||||
"dp8393x-regs", SONIC_REG_COUNT << s->it_shift);
|
||||
|
||||
s->nic = qemu_new_nic(&net_dp83932_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
s->watchdog = timer_new_ns(QEMU_CLOCK_VIRTUAL, dp8393x_watchdog, s);
|
||||
diff --git a/hw/net/e1000.c b/hw/net/e1000.c
|
||||
index 282d01e374..86da1ae39e 100644
|
||||
--- a/hw/net/e1000.c
|
||||
+++ b/hw/net/e1000.c
|
||||
@@ -1733,7 +1733,8 @@ static void pci_e1000_realize(PCIDevice *pci_dev, Error **errp)
|
||||
macaddr);
|
||||
|
||||
d->nic = qemu_new_nic(&net_e1000_info, &d->conf,
|
||||
- object_get_typename(OBJECT(d)), dev->id, d);
|
||||
+ object_get_typename(OBJECT(d)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, d);
|
||||
|
||||
qemu_format_nic_info_str(qemu_get_queue(d->nic), macaddr);
|
||||
|
||||
diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c
|
||||
index d35bc1f0b0..c6096fa848 100644
|
||||
--- a/hw/net/e1000e.c
|
||||
+++ b/hw/net/e1000e.c
|
||||
@@ -340,7 +340,7 @@ e1000e_init_net_peer(E1000EState *s, PCIDevice *pci_dev, uint8_t *macaddr)
|
||||
int i;
|
||||
|
||||
s->nic = qemu_new_nic(&net_e1000e_info, &s->conf,
|
||||
- object_get_typename(OBJECT(s)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(s)), dev->id, &dev->mem_reentrancy_guard, s);
|
||||
|
||||
s->core.max_queue_num = s->conf.peers.queues ? s->conf.peers.queues - 1 : 0;
|
||||
|
||||
diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c
|
||||
index 16e95ef9cc..16ca4dda04 100644
|
||||
--- a/hw/net/eepro100.c
|
||||
+++ b/hw/net/eepro100.c
|
||||
@@ -1865,7 +1865,9 @@ static void e100_nic_realize(PCIDevice *pci_dev, Error **errp)
|
||||
nic_reset(s);
|
||||
|
||||
s->nic = qemu_new_nic(&net_eepro100_info, &s->conf,
|
||||
- object_get_typename(OBJECT(pci_dev)), pci_dev->qdev.id, s);
|
||||
+ object_get_typename(OBJECT(pci_dev)),
|
||||
+ pci_dev->qdev.id,
|
||||
+ &pci_dev->qdev.mem_reentrancy_guard, s);
|
||||
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
TRACE(OTHER, logout("%s\n", qemu_get_queue(s->nic)->info_str));
|
||||
diff --git a/hw/net/etraxfs_eth.c b/hw/net/etraxfs_eth.c
|
||||
index 1b82aec794..ba57a978d1 100644
|
||||
--- a/hw/net/etraxfs_eth.c
|
||||
+++ b/hw/net/etraxfs_eth.c
|
||||
@@ -618,7 +618,8 @@ static void etraxfs_eth_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_etraxfs_info, &s->conf,
|
||||
- object_get_typename(OBJECT(s)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(s)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
s->phy.read = tdk_read;
|
||||
diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c
|
||||
index bd9d62b559..f790613b52 100644
|
||||
--- a/hw/net/fsl_etsec/etsec.c
|
||||
+++ b/hw/net/fsl_etsec/etsec.c
|
||||
@@ -391,7 +391,8 @@ static void etsec_realize(DeviceState *dev, Error **errp)
|
||||
eTSEC *etsec = ETSEC_COMMON(dev);
|
||||
|
||||
etsec->nic = qemu_new_nic(&net_etsec_info, &etsec->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, etsec);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, etsec);
|
||||
qemu_format_nic_info_str(qemu_get_queue(etsec->nic), etsec->conf.macaddr.a);
|
||||
|
||||
etsec->ptimer = ptimer_init(etsec_timer_hit, etsec, PTIMER_POLICY_DEFAULT);
|
||||
diff --git a/hw/net/ftgmac100.c b/hw/net/ftgmac100.c
|
||||
index 25685ba3a9..781e7f352e 100644
|
||||
--- a/hw/net/ftgmac100.c
|
||||
+++ b/hw/net/ftgmac100.c
|
||||
@@ -1111,7 +1111,8 @@ static void ftgmac100_realize(DeviceState *dev, Error **errp)
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
|
||||
s->nic = qemu_new_nic(&net_ftgmac100_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/i82596.c b/hw/net/i82596.c
|
||||
index ec21e2699a..dc64246f75 100644
|
||||
--- a/hw/net/i82596.c
|
||||
+++ b/hw/net/i82596.c
|
||||
@@ -743,7 +743,7 @@ void i82596_common_init(DeviceState *dev, I82596State *s, NetClientInfo *info)
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
}
|
||||
s->nic = qemu_new_nic(info, &s->conf, object_get_typename(OBJECT(dev)),
|
||||
- dev->id, s);
|
||||
+ dev->id, &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
if (USE_TIMER) {
|
||||
diff --git a/hw/net/imx_fec.c b/hw/net/imx_fec.c
|
||||
index 9c7035bc94..ed19ee9350 100644
|
||||
--- a/hw/net/imx_fec.c
|
||||
+++ b/hw/net/imx_fec.c
|
||||
@@ -1310,7 +1310,7 @@ static void imx_eth_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
s->nic = qemu_new_nic(&imx_eth_net_info, &s->conf,
|
||||
object_get_typename(OBJECT(dev)),
|
||||
- dev->id, s);
|
||||
+ dev->id, &dev->mem_reentrancy_guard, s);
|
||||
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c
|
||||
index 6aff424cbe..942bce9ae6 100644
|
||||
--- a/hw/net/lan9118.c
|
||||
+++ b/hw/net/lan9118.c
|
||||
@@ -1354,7 +1354,8 @@ static void lan9118_realize(DeviceState *dev, Error **errp)
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
|
||||
s->nic = qemu_new_nic(&net_lan9118_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
s->eeprom[0] = 0xa5;
|
||||
for (i = 0; i < 6; i++) {
|
||||
diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c
|
||||
index 25e3e453ab..a6be7bf413 100644
|
||||
--- a/hw/net/mcf_fec.c
|
||||
+++ b/hw/net/mcf_fec.c
|
||||
@@ -643,7 +643,8 @@ static void mcf_fec_realize(DeviceState *dev, Error **errp)
|
||||
mcf_fec_state *s = MCF_FEC_NET(dev);
|
||||
|
||||
s->nic = qemu_new_nic(&net_mcf_fec_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/mipsnet.c b/hw/net/mipsnet.c
|
||||
index 2ade72dea0..8e925de867 100644
|
||||
--- a/hw/net/mipsnet.c
|
||||
+++ b/hw/net/mipsnet.c
|
||||
@@ -255,7 +255,8 @@ static void mipsnet_realize(DeviceState *dev, Error **errp)
|
||||
sysbus_init_irq(sbd, &s->irq);
|
||||
|
||||
s->nic = qemu_new_nic(&net_mipsnet_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/msf2-emac.c b/hw/net/msf2-emac.c
|
||||
index 9278fdce0b..1efa3dbf01 100644
|
||||
--- a/hw/net/msf2-emac.c
|
||||
+++ b/hw/net/msf2-emac.c
|
||||
@@ -527,7 +527,8 @@ static void msf2_emac_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_msf2_emac_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/ne2000-isa.c b/hw/net/ne2000-isa.c
|
||||
index dd6f6e34d3..30bd20c293 100644
|
||||
--- a/hw/net/ne2000-isa.c
|
||||
+++ b/hw/net/ne2000-isa.c
|
||||
@@ -74,7 +74,8 @@ static void isa_ne2000_realizefn(DeviceState *dev, Error **errp)
|
||||
ne2000_reset(s);
|
||||
|
||||
s->nic = qemu_new_nic(&net_ne2000_isa_info, &s->c,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->c.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/ne2000-pci.c b/hw/net/ne2000-pci.c
|
||||
index 9e5d10859a..4f8a699081 100644
|
||||
--- a/hw/net/ne2000-pci.c
|
||||
+++ b/hw/net/ne2000-pci.c
|
||||
@@ -71,7 +71,8 @@ static void pci_ne2000_realize(PCIDevice *pci_dev, Error **errp)
|
||||
|
||||
s->nic = qemu_new_nic(&net_ne2000_info, &s->c,
|
||||
object_get_typename(OBJECT(pci_dev)),
|
||||
- pci_dev->qdev.id, s);
|
||||
+ pci_dev->qdev.id,
|
||||
+ &pci_dev->qdev.mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->c.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/npcm7xx_emc.c b/hw/net/npcm7xx_emc.c
|
||||
index 7c892f820f..dd1d0ad3bc 100644
|
||||
--- a/hw/net/npcm7xx_emc.c
|
||||
+++ b/hw/net/npcm7xx_emc.c
|
||||
@@ -802,7 +802,8 @@ static void npcm7xx_emc_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&emc->conf.macaddr);
|
||||
emc->nic = qemu_new_nic(&net_npcm7xx_emc_info, &emc->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, emc);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, emc);
|
||||
qemu_format_nic_info_str(qemu_get_queue(emc->nic), emc->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c
|
||||
index 0b3dc3146e..f96d6ea2cc 100644
|
||||
--- a/hw/net/opencores_eth.c
|
||||
+++ b/hw/net/opencores_eth.c
|
||||
@@ -732,7 +732,8 @@ static void sysbus_open_eth_realize(DeviceState *dev, Error **errp)
|
||||
sysbus_init_irq(sbd, &s->irq);
|
||||
|
||||
s->nic = qemu_new_nic(&net_open_eth_info, &s->conf,
|
||||
- object_get_typename(OBJECT(s)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(s)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
}
|
||||
|
||||
static void qdev_open_eth_reset(DeviceState *dev)
|
||||
diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c
|
||||
index dcd3fc4948..da910a70bf 100644
|
||||
--- a/hw/net/pcnet.c
|
||||
+++ b/hw/net/pcnet.c
|
||||
@@ -1718,7 +1718,8 @@ void pcnet_common_init(DeviceState *dev, PCNetState *s, NetClientInfo *info)
|
||||
s->poll_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, pcnet_poll_timer, s);
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
- s->nic = qemu_new_nic(info, &s->conf, object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ s->nic = qemu_new_nic(info, &s->conf, object_get_typename(OBJECT(dev)),
|
||||
+ dev->id, &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
/* Initialize the PROM */
|
||||
diff --git a/hw/net/rocker/rocker_fp.c b/hw/net/rocker/rocker_fp.c
|
||||
index cbeed65bd5..0d21948ada 100644
|
||||
--- a/hw/net/rocker/rocker_fp.c
|
||||
+++ b/hw/net/rocker/rocker_fp.c
|
||||
@@ -241,8 +241,8 @@ FpPort *fp_port_alloc(Rocker *r, char *sw_name,
|
||||
port->conf.bootindex = -1;
|
||||
port->conf.peers = *peers;
|
||||
|
||||
- port->nic = qemu_new_nic(&fp_port_info, &port->conf,
|
||||
- sw_name, NULL, port);
|
||||
+ port->nic = qemu_new_nic(&fp_port_info, &port->conf, sw_name, NULL,
|
||||
+ &DEVICE(r)->mem_reentrancy_guard, port);
|
||||
qemu_format_nic_info_str(qemu_get_queue(port->nic),
|
||||
port->conf.macaddr.a);
|
||||
|
||||
diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c
|
||||
index 3ffb9dd22c..a3565c7159 100644
|
||||
--- a/hw/net/rtl8139.c
|
||||
+++ b/hw/net/rtl8139.c
|
||||
@@ -3400,7 +3400,8 @@ static void pci_rtl8139_realize(PCIDevice *dev, Error **errp)
|
||||
s->eeprom.contents[9] = s->conf.macaddr.a[4] | s->conf.macaddr.a[5] << 8;
|
||||
|
||||
s->nic = qemu_new_nic(&net_rtl8139_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), d->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), d->id,
|
||||
+ &d->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
s->cplus_txbuffer = NULL;
|
||||
diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c
|
||||
index ad778cd8fc..4eda971ef3 100644
|
||||
--- a/hw/net/smc91c111.c
|
||||
+++ b/hw/net/smc91c111.c
|
||||
@@ -783,7 +783,8 @@ static void smc91c111_realize(DeviceState *dev, Error **errp)
|
||||
sysbus_init_irq(sbd, &s->irq);
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_smc91c111_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
/* ??? Save/restore. */
|
||||
}
|
||||
diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c
|
||||
index a6876a936d..475d5f3a34 100644
|
||||
--- a/hw/net/spapr_llan.c
|
||||
+++ b/hw/net/spapr_llan.c
|
||||
@@ -325,7 +325,8 @@ static void spapr_vlan_realize(SpaprVioDevice *sdev, Error **errp)
|
||||
memcpy(&dev->perm_mac.a, &dev->nicconf.macaddr.a, sizeof(dev->perm_mac.a));
|
||||
|
||||
dev->nic = qemu_new_nic(&net_spapr_vlan_info, &dev->nicconf,
|
||||
- object_get_typename(OBJECT(sdev)), sdev->qdev.id, dev);
|
||||
+ object_get_typename(OBJECT(sdev)), sdev->qdev.id,
|
||||
+ &sdev->qdev.mem_reentrancy_guard, dev);
|
||||
qemu_format_nic_info_str(qemu_get_queue(dev->nic), dev->nicconf.macaddr.a);
|
||||
|
||||
dev->rxp_timer = timer_new_us(QEMU_CLOCK_VIRTUAL, spapr_vlan_flush_rx_queue,
|
||||
diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
|
||||
index 8dd60783d8..6768a6912f 100644
|
||||
--- a/hw/net/stellaris_enet.c
|
||||
+++ b/hw/net/stellaris_enet.c
|
||||
@@ -492,7 +492,8 @@ static void stellaris_enet_realize(DeviceState *dev, Error **errp)
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
|
||||
s->nic = qemu_new_nic(&net_stellaris_enet_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/sungem.c b/hw/net/sungem.c
|
||||
index 3684a4d733..c12d44e9dc 100644
|
||||
--- a/hw/net/sungem.c
|
||||
+++ b/hw/net/sungem.c
|
||||
@@ -1361,7 +1361,7 @@ static void sungem_realize(PCIDevice *pci_dev, Error **errp)
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_sungem_info, &s->conf,
|
||||
object_get_typename(OBJECT(dev)),
|
||||
- dev->id, s);
|
||||
+ dev->id, &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic),
|
||||
s->conf.macaddr.a);
|
||||
}
|
||||
diff --git a/hw/net/sunhme.c b/hw/net/sunhme.c
|
||||
index fc34905f87..fa98528d71 100644
|
||||
--- a/hw/net/sunhme.c
|
||||
+++ b/hw/net/sunhme.c
|
||||
@@ -892,7 +892,8 @@ static void sunhme_realize(PCIDevice *pci_dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_sunhme_info, &s->conf,
|
||||
- object_get_typename(OBJECT(d)), d->id, s);
|
||||
+ object_get_typename(OBJECT(d)), d->id,
|
||||
+ &d->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/tulip.c b/hw/net/tulip.c
|
||||
index ca69f7ea5e..985c4c14a4 100644
|
||||
--- a/hw/net/tulip.c
|
||||
+++ b/hw/net/tulip.c
|
||||
@@ -981,7 +981,8 @@ static void pci_tulip_realize(PCIDevice *pci_dev, Error **errp)
|
||||
|
||||
s->nic = qemu_new_nic(&net_tulip_info, &s->c,
|
||||
object_get_typename(OBJECT(pci_dev)),
|
||||
- pci_dev->qdev.id, s);
|
||||
+ pci_dev->qdev.id,
|
||||
+ &pci_dev->qdev.mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->c.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
|
||||
index ddaa8fa122..f5f07f8e63 100644
|
||||
--- a/hw/net/virtio-net.c
|
||||
+++ b/hw/net/virtio-net.c
|
||||
@@ -3512,10 +3512,12 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
|
||||
* Happen when virtio_net_set_netclient_name has been called.
|
||||
*/
|
||||
n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
|
||||
- n->netclient_type, n->netclient_name, n);
|
||||
+ n->netclient_type, n->netclient_name,
|
||||
+ &dev->mem_reentrancy_guard, n);
|
||||
} else {
|
||||
n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, n);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, n);
|
||||
}
|
||||
|
||||
for (i = 0; i < n->max_queue_pairs; i++) {
|
||||
diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
|
||||
index f65af4e9ef..d4df039c55 100644
|
||||
--- a/hw/net/vmxnet3.c
|
||||
+++ b/hw/net/vmxnet3.c
|
||||
@@ -2078,7 +2078,7 @@ static void vmxnet3_net_init(VMXNET3State *s)
|
||||
|
||||
s->nic = qemu_new_nic(&net_vmxnet3_info, &s->conf,
|
||||
object_get_typename(OBJECT(s)),
|
||||
- d->id, s);
|
||||
+ d->id, &d->mem_reentrancy_guard, s);
|
||||
|
||||
s->peer_has_vhdr = vmxnet3_peer_has_vnet_hdr(s);
|
||||
s->tx_sop = true;
|
||||
diff --git a/hw/net/xen_nic.c b/hw/net/xen_nic.c
|
||||
index 5c815b4f0c..3d0b7820d3 100644
|
||||
--- a/hw/net/xen_nic.c
|
||||
+++ b/hw/net/xen_nic.c
|
||||
@@ -294,7 +294,8 @@ static int net_init(struct XenLegacyDevice *xendev)
|
||||
}
|
||||
|
||||
netdev->nic = qemu_new_nic(&net_xen_info, &netdev->conf,
|
||||
- "xen", NULL, netdev);
|
||||
+ "xen", NULL,
|
||||
+ &xendev->qdev.mem_reentrancy_guard, netdev);
|
||||
|
||||
snprintf(qemu_get_queue(netdev->nic)->info_str,
|
||||
sizeof(qemu_get_queue(netdev->nic)->info_str),
|
||||
diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c
|
||||
index 0ab6ae91aa..1f4f277d84 100644
|
||||
--- a/hw/net/xgmac.c
|
||||
+++ b/hw/net/xgmac.c
|
||||
@@ -402,7 +402,8 @@ static void xgmac_enet_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_xgmac_enet_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
s->regs[XGMAC_ADDR_HIGH(0)] = (s->conf.macaddr.a[5] << 8) |
|
||||
diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c
|
||||
index 990ff3a1c2..8a34243803 100644
|
||||
--- a/hw/net/xilinx_axienet.c
|
||||
+++ b/hw/net/xilinx_axienet.c
|
||||
@@ -968,7 +968,8 @@ static void xilinx_enet_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_xilinx_enet_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
|
||||
tdk_init(&s->TEMAC.phy);
|
||||
diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c
|
||||
index 6e09f7e422..80cb869e22 100644
|
||||
--- a/hw/net/xilinx_ethlite.c
|
||||
+++ b/hw/net/xilinx_ethlite.c
|
||||
@@ -235,7 +235,8 @@ static void xilinx_ethlite_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_xilinx_ethlite_info, &s->conf,
|
||||
- object_get_typename(OBJECT(dev)), dev->id, s);
|
||||
+ object_get_typename(OBJECT(dev)), dev->id,
|
||||
+ &dev->mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
}
|
||||
|
||||
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
|
||||
index 6c49c16015..ae447a8bc3 100644
|
||||
--- a/hw/usb/dev-network.c
|
||||
+++ b/hw/usb/dev-network.c
|
||||
@@ -1362,7 +1362,8 @@ static void usb_net_realize(USBDevice *dev, Error **errp)
|
||||
|
||||
qemu_macaddr_default_if_unset(&s->conf.macaddr);
|
||||
s->nic = qemu_new_nic(&net_usbnet_info, &s->conf,
|
||||
- object_get_typename(OBJECT(s)), s->dev.qdev.id, s);
|
||||
+ object_get_typename(OBJECT(s)), s->dev.qdev.id,
|
||||
+ &s->dev.qdev.mem_reentrancy_guard, s);
|
||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->conf.macaddr.a);
|
||||
snprintf(s->usbstring_mac, sizeof(s->usbstring_mac),
|
||||
"%02x%02x%02x%02x%02x%02x",
|
||||
diff --git a/include/net/net.h b/include/net/net.h
|
||||
index 523136c7ac..1457b6c014 100644
|
||||
--- a/include/net/net.h
|
||||
+++ b/include/net/net.h
|
||||
@@ -145,6 +145,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
|
||||
NICConf *conf,
|
||||
const char *model,
|
||||
const char *name,
|
||||
+ MemReentrancyGuard *reentrancy_guard,
|
||||
void *opaque);
|
||||
void qemu_del_nic(NICState *nic);
|
||||
NetClientState *qemu_get_subqueue(NICState *nic, int queue_index);
|
||||
diff --git a/net/net.c b/net/net.c
|
||||
index f0d14dbfc1..669e194c4b 100644
|
||||
--- a/net/net.c
|
||||
+++ b/net/net.c
|
||||
@@ -299,6 +299,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
|
||||
NICConf *conf,
|
||||
const char *model,
|
||||
const char *name,
|
||||
+ MemReentrancyGuard *reentrancy_guard,
|
||||
void *opaque)
|
||||
{
|
||||
NetClientState **peers = conf->peers.ncs;
|
||||
--
|
||||
2.41.0
|
||||
|
@ -0,0 +1,104 @@
|
||||
From 91657da5f5ebadfffe069feedf96342a1dd3d6a6 Mon Sep 17 00:00:00 2001
|
||||
From: Jon Maloy <jmaloy@redhat.com>
|
||||
Date: Thu, 23 Nov 2023 11:30:46 -0500
|
||||
Subject: [PATCH 2/5] net: Update MemReentrancyGuard for NIC
|
||||
|
||||
RH-Author: Jon Maloy <jmaloy@redhat.com>
|
||||
RH-MergeRequest: 332: net: Provide MemReentrancyGuard * to qemu_new_nic()
|
||||
RH-Jira: RHEL-16095
|
||||
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
|
||||
RH-Commit: [2/2] 849dd7ccd91e20bd1c700769e299943e2886bf63 (redhat/rhel/src/qemu-kvm/jons-qemu-kvm-2)
|
||||
|
||||
Jira: https://issues.redhat.com/browse/RHEL-16095
|
||||
CVE: CVE-2023-3019
|
||||
Upstream: Merged
|
||||
|
||||
commit 9050f976e447444ea6ee2ba12c9f77e4b0dc54bc
|
||||
Author: Akihiko Odaki <akihiko.odaki@daynix.com>
|
||||
Date: Thu Jun 1 12:18:59 2023 +0900
|
||||
|
||||
net: Update MemReentrancyGuard for NIC
|
||||
|
||||
Recently MemReentrancyGuard was added to DeviceState to record that the
|
||||
device is engaging in I/O. The network device backend needs to update it
|
||||
when delivering a packet to a device.
|
||||
|
||||
This implementation follows what bottom half does, but it does not add
|
||||
a tracepoint for the case that the network device backend started
|
||||
delivering a packet to a device which is already engaging in I/O. This
|
||||
is because such reentrancy frequently happens for
|
||||
qemu_flush_queued_packets() and is insignificant.
|
||||
|
||||
Fixes: CVE-2023-3019
|
||||
Reported-by: Alexander Bulekov <alxndr@bu.edu>
|
||||
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
|
||||
Acked-by: Alexander Bulekov <alxndr@bu.edu>
|
||||
Signed-off-by: Jason Wang <jasowang@redhat.com>
|
||||
|
||||
Signed-off-by: Jon Maloy <jmaloy@redhat.com>
|
||||
---
|
||||
include/net/net.h | 1 +
|
||||
net/net.c | 14 ++++++++++++++
|
||||
2 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/include/net/net.h b/include/net/net.h
|
||||
index 1457b6c014..11d4564ea1 100644
|
||||
--- a/include/net/net.h
|
||||
+++ b/include/net/net.h
|
||||
@@ -112,6 +112,7 @@ struct NetClientState {
|
||||
typedef struct NICState {
|
||||
NetClientState *ncs;
|
||||
NICConf *conf;
|
||||
+ MemReentrancyGuard *reentrancy_guard;
|
||||
void *opaque;
|
||||
bool peer_deleted;
|
||||
} NICState;
|
||||
diff --git a/net/net.c b/net/net.c
|
||||
index 669e194c4b..b3008a52b7 100644
|
||||
--- a/net/net.c
|
||||
+++ b/net/net.c
|
||||
@@ -312,6 +312,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
|
||||
nic = g_malloc0(info->size + sizeof(NetClientState) * queues);
|
||||
nic->ncs = (void *)nic + info->size;
|
||||
nic->conf = conf;
|
||||
+ nic->reentrancy_guard = reentrancy_guard,
|
||||
nic->opaque = opaque;
|
||||
|
||||
for (i = 0; i < queues; i++) {
|
||||
@@ -767,6 +768,7 @@ static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
|
||||
int iovcnt,
|
||||
void *opaque)
|
||||
{
|
||||
+ MemReentrancyGuard *owned_reentrancy_guard;
|
||||
NetClientState *nc = opaque;
|
||||
int ret;
|
||||
|
||||
@@ -779,12 +781,24 @@ static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ if (nc->info->type != NET_CLIENT_DRIVER_NIC ||
|
||||
+ qemu_get_nic(nc)->reentrancy_guard->engaged_in_io) {
|
||||
+ owned_reentrancy_guard = NULL;
|
||||
+ } else {
|
||||
+ owned_reentrancy_guard = qemu_get_nic(nc)->reentrancy_guard;
|
||||
+ owned_reentrancy_guard->engaged_in_io = true;
|
||||
+ }
|
||||
+
|
||||
if (nc->info->receive_iov && !(flags & QEMU_NET_PACKET_FLAG_RAW)) {
|
||||
ret = nc->info->receive_iov(nc, iov, iovcnt);
|
||||
} else {
|
||||
ret = nc_sendv_compat(nc, iov, iovcnt, flags);
|
||||
}
|
||||
|
||||
+ if (owned_reentrancy_guard) {
|
||||
+ owned_reentrancy_guard->engaged_in_io = false;
|
||||
+ }
|
||||
+
|
||||
if (ret == 0) {
|
||||
nc->receive_disabled = 1;
|
||||
}
|
||||
--
|
||||
2.41.0
|
||||
|
@ -0,0 +1,84 @@
|
||||
From 71e2e6883aa9df8d6eeed7b02100de18c8a188cc Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Huth <thuth@redhat.com>
|
||||
Date: Thu, 23 Nov 2023 14:42:00 +0100
|
||||
Subject: [PATCH 5/5] target/s390x/arch_dump: Add arch cleanup function for PV
|
||||
dumps
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RH-Author: Thomas Huth <thuth@redhat.com>
|
||||
RH-MergeRequest: 328: Fix problem that secure execution guest remains in "paused" state after failed dump [8.9.z]
|
||||
RH-Jira: RHEL-17253
|
||||
RH-Acked-by: Cédric Le Goater <clg@redhat.com>
|
||||
RH-Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
RH-Commit: [3/3] bf89f114bb5dd48fb9cdd96a63d2986bab090d20
|
||||
|
||||
JIRA: https://issues.redhat.com/browse/RHEL-17253
|
||||
|
||||
commit d12a91e0baafce7b1cbacff7cf9339eeb0011732
|
||||
Author: Janosch Frank <frankja@linux.ibm.com>
|
||||
Date: Thu Nov 9 12:04:43 2023 +0000
|
||||
|
||||
target/s390x/arch_dump: Add arch cleanup function for PV dumps
|
||||
|
||||
PV dumps block vcpu runs until dump end is reached. If there's an
|
||||
error between PV dump init and PV dump end the vm will never be able
|
||||
to run again. One example of such an error is insufficient disk space
|
||||
for the dump file.
|
||||
|
||||
Let's add a cleanup function that tries to do a dump end. The dump
|
||||
completion data is discarded but there's no point in writing it to a
|
||||
file anyway if there's a possibility that other PV dump data is
|
||||
missing.
|
||||
|
||||
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
|
||||
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||||
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
|
||||
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
Message-ID: <20231109120443.185979-4-frankja@linux.ibm.com>
|
||||
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||||
|
||||
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||||
---
|
||||
target/s390x/arch_dump.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c
|
||||
index 7cdd4b7167..3b1f178dc3 100644
|
||||
--- a/target/s390x/arch_dump.c
|
||||
+++ b/target/s390x/arch_dump.c
|
||||
@@ -439,6 +439,22 @@ static int arch_sections_write(DumpState *s, uint8_t *buff)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void arch_cleanup(DumpState *s)
|
||||
+{
|
||||
+ g_autofree uint8_t *buff = NULL;
|
||||
+ int rc;
|
||||
+
|
||||
+ if (!pv_dump_initialized) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ buff = g_malloc(kvm_s390_pv_dmp_get_size_completion_data());
|
||||
+ rc = kvm_s390_dump_completion_data(buff);
|
||||
+ if (!rc) {
|
||||
+ pv_dump_initialized = false;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int cpu_get_dump_info(ArchDumpInfo *info,
|
||||
const struct GuestPhysBlockList *guest_phys_blocks)
|
||||
{
|
||||
@@ -454,6 +470,7 @@ int cpu_get_dump_info(ArchDumpInfo *info,
|
||||
info->arch_sections_add_fn = *arch_sections_add;
|
||||
info->arch_sections_write_hdr_fn = *arch_sections_write_hdr;
|
||||
info->arch_sections_write_fn = *arch_sections_write;
|
||||
+ info->arch_cleanup_fn = *arch_cleanup;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.41.0
|
||||
|
@ -0,0 +1,56 @@
|
||||
From fc235f783f58aec7460fcb6d23e8373596b85c97 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Huth <thuth@redhat.com>
|
||||
Date: Thu, 23 Nov 2023 14:42:00 +0100
|
||||
Subject: [PATCH 3/5] target/s390x/dump: Remove unneeded dump info function
|
||||
pointer init
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RH-Author: Thomas Huth <thuth@redhat.com>
|
||||
RH-MergeRequest: 328: Fix problem that secure execution guest remains in "paused" state after failed dump [8.9.z]
|
||||
RH-Jira: RHEL-17253
|
||||
RH-Acked-by: Cédric Le Goater <clg@redhat.com>
|
||||
RH-Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
RH-Commit: [1/3] 458e457a8257e685acb91eb68b6ff6b9aa0a4f4d
|
||||
|
||||
JIRA: https://issues.redhat.com/browse/RHEL-17253
|
||||
|
||||
commit 816644b1219900875f47d7adf9bfb283f1b29aa0
|
||||
Author: Janosch Frank <frankja@linux.ibm.com>
|
||||
Date: Thu Nov 9 12:04:41 2023 +0000
|
||||
|
||||
target/s390x/dump: Remove unneeded dump info function pointer init
|
||||
|
||||
dump_state_prepare() now sets the function pointers to NULL so we only
|
||||
need to touch them if we're going to use them.
|
||||
|
||||
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
|
||||
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||||
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
||||
Message-ID: <20231109120443.185979-2-frankja@linux.ibm.com>
|
||||
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||||
|
||||
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
||||
---
|
||||
target/s390x/arch_dump.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c
|
||||
index a7c44ba49d..7cdd4b7167 100644
|
||||
--- a/target/s390x/arch_dump.c
|
||||
+++ b/target/s390x/arch_dump.c
|
||||
@@ -454,10 +454,6 @@ int cpu_get_dump_info(ArchDumpInfo *info,
|
||||
info->arch_sections_add_fn = *arch_sections_add;
|
||||
info->arch_sections_write_hdr_fn = *arch_sections_write_hdr;
|
||||
info->arch_sections_write_fn = *arch_sections_write;
|
||||
- } else {
|
||||
- info->arch_sections_add_fn = NULL;
|
||||
- info->arch_sections_write_hdr_fn = NULL;
|
||||
- info->arch_sections_write_fn = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.41.0
|
||||
|
Loading…
Reference in new issue