Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
0c492a6
dm snapshot: fix lockup in dm_exception_table_exit
PlaidCat Apr 8, 2025
1b426c6
virtio-net: correctly enable callback during start_xmit
PlaidCat Apr 8, 2025
2120e63
RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP
PlaidCat Apr 8, 2025
bca35e3
ovl: fix use inode directly in rcu-walk mode
PlaidCat Apr 8, 2025
0516f89
scsi: st: Don't set pos_unknown just after device recognition
PlaidCat Apr 8, 2025
8e09e99
mm: vmscan: account for free pages to prevent infinite Loop in thrott…
PlaidCat Apr 8, 2025
2480446
NFSD: Reset cb_seq_status after NFS4ERR_DELAY
PlaidCat Apr 8, 2025
5b691f9
Rebuild rocky8_10 with kernel-4.18.0-553.42.1.el8_10
PlaidCat Apr 8, 2025
cbd1a8c
net/mlx5: Suspend auxiliary devices only in case of PCI device suspend
PlaidCat Apr 8, 2025
2f605b9
net/mlx5: Reload auxiliary devices in pci error handlers
PlaidCat Apr 8, 2025
f2269ed
scsi: megaraid_sas: Fix for a potential deadlock
PlaidCat Apr 8, 2025
422132b
KVM: s390: vsie: Use virt_to_phys for facility control block
PlaidCat Apr 8, 2025
734fdc4
KVM: s390: vsie: Use virt_to_phys for crypto control block
PlaidCat Apr 8, 2025
1ece4cd
s390/uv: Panic for set and remove shared access UVC errors
PlaidCat Apr 8, 2025
cfb6780
KVM: s390: Fix SORTL and DFLTCC instruction format error in __insn32_…
PlaidCat Apr 8, 2025
4127086
KVM: s390: gaccess: Check if guest address is in memslot
PlaidCat Apr 8, 2025
fa2419a
KVM: s390: Change virtual to physical address access in diag 0x258 ha…
PlaidCat Apr 8, 2025
8b4d247
pps: Fix a use-after-free
PlaidCat Apr 8, 2025
ed4cca0
locking/atomic: Make test_and_*_bit() ordered on failure
PlaidCat Apr 8, 2025
483da7d
s390/module: Use s390_kernel_write() for late relocations
PlaidCat Apr 8, 2025
cbc0930
s390/module: fix loading modules with a lot of relocations
PlaidCat Apr 8, 2025
4c5325d
ALSA: usb-audio: Add sampling rates support for Mbox3
PlaidCat Apr 8, 2025
671344e
ALSA: usb-audio: Fix potential out-of-bound accesses for Extigy and M…
PlaidCat Apr 8, 2025
878b341
ALSA: usb-audio: Fix for sampling rates support for Mbox3
PlaidCat Apr 8, 2025
8eff822
ALSA: usb-audio: Fix a DMA to stack memory bug
PlaidCat Apr 8, 2025
eba05e7
HID: core: zero-initialize the report buffer
PlaidCat Apr 8, 2025
16dc638
Rebuild rocky8_10 with kernel-4.18.0-553.44.1.el8_10
PlaidCat Apr 8, 2025
08b90a9
net: smc: fix spurious error message from __sock_release()
PlaidCat Apr 8, 2025
e319a13
net/smc: support ipv4 mapped ipv6 addr client for smc-r v2
PlaidCat Apr 8, 2025
6a52195
gfs2: Decode missing glock flags in tracepoints
PlaidCat Apr 8, 2025
42f0816
gfs2: glock holder GL_NOPID fix
PlaidCat Apr 8, 2025
6ee1d82
can: bcm: Fix UAF in bcm_proc_show()
PlaidCat Apr 8, 2025
6cfe80e
gve: ignore nonrelevant GSO type bits when processing TSO headers
PlaidCat Apr 8, 2025
173a3af
gve: Clear napi->skb before dev_kfree_skb_any()
PlaidCat Apr 8, 2025
cb24f36
gve: Fix XDP TX completion handling when counters overflow
PlaidCat Apr 8, 2025
a58f9bb
gve: Fix an edge case for TSO skb validity check
PlaidCat Apr 8, 2025
31e6cae
gve: guard XDP xmit NDO on existence of xdp queues
PlaidCat Apr 8, 2025
3c37e46
gve: guard XSK operations on the existence of queues
PlaidCat Apr 8, 2025
a1a506d
gve: process XSK TX descriptors as part of RX NAPI
PlaidCat Apr 8, 2025
b30af13
gve: trigger RX NAPI instead of TX NAPI in gve_xsk_wakeup
PlaidCat Apr 8, 2025
f025379
Rebuild rocky8_10 with kernel-4.18.0-553.45.1.el8_10
PlaidCat Apr 8, 2025
2400e87
nouveau/fence: handle cross device fences properly
PlaidCat Apr 8, 2025
f4e4e76
arm64: cacheinfo: Avoid out-of-bounds write to cacheinfo array
PlaidCat Apr 8, 2025
b9d2beb
x86/mm: Fix VDSO and VVAR placement on 5-level paging machines
PlaidCat Apr 8, 2025
64cbbc8
s390/pci: Fix SR-IOV for PFs initially in standby
PlaidCat Apr 8, 2025
4296d0f
s390/pci: Pull search for parent PF out of zpci_iov_setup_virtfn()
PlaidCat Apr 8, 2025
82fdac2
s390/pci: Fix handling of isolated VFs
PlaidCat Apr 8, 2025
e622eef
Rebuild rocky8_10 with kernel-4.18.0-553.46.1.el8_10
PlaidCat Apr 8, 2025
d73cc17
bpf: Use raw_spinlock_t in ringbuf
PlaidCat Apr 8, 2025
bb7db8a
ethtool: runtime-resume netdev parent before ethtool ioctl ops
PlaidCat Apr 8, 2025
268406f
nfs: don't invalidate dentries on transient errors
PlaidCat Apr 8, 2025
01aef32
Rebuild rocky8_10 with kernel-4.18.0-553.47.1.el8_10
PlaidCat Apr 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Documentation/atomic_bitops.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ Like with atomic_t, the rule of thumb is:
- RMW operations that have a return value are fully ordered.

- RMW operations that are conditional are unordered on FAILURE,
otherwise the above rules apply. In the case of test_and_{}_bit() operations,
otherwise the above rules apply. In the case of test_and_set_bit_lock(),
if the bit in memory is unchanged by the operation then it is deemed to have
failed.

Expand Down
2 changes: 1 addition & 1 deletion Makefile.rhelver
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ RHEL_MINOR = 10
#
# Use this spot to avoid future merge conflicts.
# Do not trim this comment.
RHEL_RELEASE = 553.40.1
RHEL_RELEASE = 553.47.1

#
# ZSTREAM
Expand Down
12 changes: 7 additions & 5 deletions arch/arm64/kernel/cacheinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,16 +101,18 @@ static int __populate_cache_leaves(unsigned int cpu)
unsigned int level, idx;
enum cache_type type;
struct cpu_cacheinfo *this_cpu_ci = get_cpu_cacheinfo(cpu);
struct cacheinfo *this_leaf = this_cpu_ci->info_list;
struct cacheinfo *infos = this_cpu_ci->info_list;

for (idx = 0, level = 1; level <= this_cpu_ci->num_levels &&
idx < this_cpu_ci->num_leaves; idx++, level++) {
idx < this_cpu_ci->num_leaves; level++) {
type = get_cache_type(level);
if (type == CACHE_TYPE_SEPARATE) {
ci_leaf_init(this_leaf++, CACHE_TYPE_DATA, level);
ci_leaf_init(this_leaf++, CACHE_TYPE_INST, level);
if (idx + 1 >= this_cpu_ci->num_leaves)
break;
ci_leaf_init(&infos[idx++], CACHE_TYPE_DATA, level);
ci_leaf_init(&infos[idx++], CACHE_TYPE_INST, level);
} else {
ci_leaf_init(this_leaf++, type, level);
ci_leaf_init(&infos[idx++], type, level);
}
}
return 0;
Expand Down
5 changes: 4 additions & 1 deletion arch/s390/include/asm/uv.h
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,10 @@ static inline int share(unsigned long addr, u16 cmd)

if (!uv_call(0, (u64)&uvcb))
return 0;
return -EINVAL;
pr_err("%s UVC failed (rc: 0x%x, rrc: 0x%x), possible hypervisor bug.\n",
uvcb.header.cmd == UVC_CMD_SET_SHARED_ACCESS ? "Share" : "Unshare",
uvcb.header.rc, uvcb.header.rrc);
panic("System security cannot be guaranteed unless the system panics now.\n");
}

/*
Expand Down
162 changes: 95 additions & 67 deletions arch/s390/kernel/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <linux/kasan.h>
#include <linux/moduleloader.h>
#include <linux/bug.h>
#include <linux/memory.h>
#include <asm/alternative.h>
#include <asm/nospec-branch.h>
#include <asm/facility.h>
Expand All @@ -29,7 +30,7 @@
#define DEBUGP(fmt , ...)
#endif

#define PLT_ENTRY_SIZE 20
#define PLT_ENTRY_SIZE 22

void *module_alloc(unsigned long size)
{
Expand Down Expand Up @@ -175,10 +176,12 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
}

static int apply_rela_bits(Elf_Addr loc, Elf_Addr val,
int sign, int bits, int shift)
int sign, int bits, int shift,
void *(*write)(void *dest, const void *src, size_t len))
{
unsigned long umax;
long min, max;
void *dest = (void *)loc;

if (val & ((1UL << shift) - 1))
return -ENOEXEC;
Expand All @@ -195,26 +198,33 @@ static int apply_rela_bits(Elf_Addr loc, Elf_Addr val,
return -ENOEXEC;
}

if (bits == 8)
*(unsigned char *) loc = val;
else if (bits == 12)
*(unsigned short *) loc = (val & 0xfff) |
if (bits == 8) {
unsigned char tmp = val;
write(dest, &tmp, 1);
} else if (bits == 12) {
unsigned short tmp = (val & 0xfff) |
(*(unsigned short *) loc & 0xf000);
else if (bits == 16)
*(unsigned short *) loc = val;
else if (bits == 20)
*(unsigned int *) loc = (val & 0xfff) << 16 |
(val & 0xff000) >> 4 |
(*(unsigned int *) loc & 0xf00000ff);
else if (bits == 32)
*(unsigned int *) loc = val;
else if (bits == 64)
*(unsigned long *) loc = val;
write(dest, &tmp, 2);
} else if (bits == 16) {
unsigned short tmp = val;
write(dest, &tmp, 2);
} else if (bits == 20) {
unsigned int tmp = (val & 0xfff) << 16 |
(val & 0xff000) >> 4 | (*(unsigned int *) loc & 0xf00000ff);
write(dest, &tmp, 4);
} else if (bits == 32) {
unsigned int tmp = val;
write(dest, &tmp, 4);
} else if (bits == 64) {
unsigned long tmp = val;
write(dest, &tmp, 8);
}
return 0;
}

static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
const char *strtab, struct module *me)
const char *strtab, struct module *me,
void *(*write)(void *dest, const void *src, size_t len))
{
struct mod_arch_syminfo *info;
Elf_Addr loc, val;
Expand Down Expand Up @@ -242,17 +252,17 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_64: /* Direct 64 bit. */
val += rela->r_addend;
if (r_type == R_390_8)
rc = apply_rela_bits(loc, val, 0, 8, 0);
rc = apply_rela_bits(loc, val, 0, 8, 0, write);
else if (r_type == R_390_12)
rc = apply_rela_bits(loc, val, 0, 12, 0);
rc = apply_rela_bits(loc, val, 0, 12, 0, write);
else if (r_type == R_390_16)
rc = apply_rela_bits(loc, val, 0, 16, 0);
rc = apply_rela_bits(loc, val, 0, 16, 0, write);
else if (r_type == R_390_20)
rc = apply_rela_bits(loc, val, 1, 20, 0);
rc = apply_rela_bits(loc, val, 1, 20, 0, write);
else if (r_type == R_390_32)
rc = apply_rela_bits(loc, val, 0, 32, 0);
rc = apply_rela_bits(loc, val, 0, 32, 0, write);
else if (r_type == R_390_64)
rc = apply_rela_bits(loc, val, 0, 64, 0);
rc = apply_rela_bits(loc, val, 0, 64, 0, write);
break;
case R_390_PC16: /* PC relative 16 bit. */
case R_390_PC16DBL: /* PC relative 16 bit shifted by 1. */
Expand All @@ -261,15 +271,15 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_PC64: /* PC relative 64 bit. */
val += rela->r_addend - loc;
if (r_type == R_390_PC16)
rc = apply_rela_bits(loc, val, 1, 16, 0);
rc = apply_rela_bits(loc, val, 1, 16, 0, write);
else if (r_type == R_390_PC16DBL)
rc = apply_rela_bits(loc, val, 1, 16, 1);
rc = apply_rela_bits(loc, val, 1, 16, 1, write);
else if (r_type == R_390_PC32DBL)
rc = apply_rela_bits(loc, val, 1, 32, 1);
rc = apply_rela_bits(loc, val, 1, 32, 1, write);
else if (r_type == R_390_PC32)
rc = apply_rela_bits(loc, val, 1, 32, 0);
rc = apply_rela_bits(loc, val, 1, 32, 0, write);
else if (r_type == R_390_PC64)
rc = apply_rela_bits(loc, val, 1, 64, 0);
rc = apply_rela_bits(loc, val, 1, 64, 0, write);
break;
case R_390_GOT12: /* 12 bit GOT offset. */
case R_390_GOT16: /* 16 bit GOT offset. */
Expand All @@ -284,33 +294,33 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_GOTPLT64: /* 64 bit offset to jump slot. */
case R_390_GOTPLTENT: /* 32 bit rel. offset to jump slot >> 1. */
if (info->got_initialized == 0) {
Elf_Addr *gotent;
Elf_Addr *gotent = me->core_layout.base +
me->arch.got_offset +
info->got_offset;

gotent = me->core_layout.base + me->arch.got_offset +
info->got_offset;
*gotent = val;
write(gotent, &val, sizeof(*gotent));
info->got_initialized = 1;
}
val = info->got_offset + rela->r_addend;
if (r_type == R_390_GOT12 ||
r_type == R_390_GOTPLT12)
rc = apply_rela_bits(loc, val, 0, 12, 0);
rc = apply_rela_bits(loc, val, 0, 12, 0, write);
else if (r_type == R_390_GOT16 ||
r_type == R_390_GOTPLT16)
rc = apply_rela_bits(loc, val, 0, 16, 0);
rc = apply_rela_bits(loc, val, 0, 16, 0, write);
else if (r_type == R_390_GOT20 ||
r_type == R_390_GOTPLT20)
rc = apply_rela_bits(loc, val, 1, 20, 0);
rc = apply_rela_bits(loc, val, 1, 20, 0, write);
else if (r_type == R_390_GOT32 ||
r_type == R_390_GOTPLT32)
rc = apply_rela_bits(loc, val, 0, 32, 0);
rc = apply_rela_bits(loc, val, 0, 32, 0, write);
else if (r_type == R_390_GOT64 ||
r_type == R_390_GOTPLT64)
rc = apply_rela_bits(loc, val, 0, 64, 0);
rc = apply_rela_bits(loc, val, 0, 64, 0, write);
else if (r_type == R_390_GOTENT ||
r_type == R_390_GOTPLTENT) {
val += (Elf_Addr) me->core_layout.base - loc;
rc = apply_rela_bits(loc, val, 1, 32, 1);
rc = apply_rela_bits(loc, val, 1, 32, 1, write);
}
break;
case R_390_PLT16DBL: /* 16 bit PC rel. PLT shifted by 1. */
Expand All @@ -321,25 +331,28 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
case R_390_PLTOFF32: /* 32 bit offset from GOT to PLT. */
case R_390_PLTOFF64: /* 16 bit offset from GOT to PLT. */
if (info->plt_initialized == 0) {
unsigned int *ip;
ip = me->core_layout.base + me->arch.plt_offset +
info->plt_offset;
ip[0] = 0x0d10e310; /* basr 1,0 */
ip[1] = 0x100a0004; /* lg 1,10(1) */
unsigned char insn[PLT_ENTRY_SIZE];
char *plt_base;
char *ip;

plt_base = me->core_layout.base + me->arch.plt_offset;
ip = plt_base + info->plt_offset;
*(int *)insn = 0x0d10e310; /* basr 1,0 */
*(int *)&insn[4] = 0x100c0004; /* lg 1,12(1) */
if (IS_ENABLED(CONFIG_EXPOLINE) && !nospec_disable) {
unsigned int *ij;
ij = me->core_layout.base +
me->arch.plt_offset +
me->arch.plt_size - PLT_ENTRY_SIZE;
ip[2] = 0xa7f40000 + /* j __jump_r1 */
(unsigned int)(u16)
(((unsigned long) ij - 8 -
(unsigned long) ip) / 2);
char *jump_r1;

jump_r1 = plt_base + me->arch.plt_size -
PLT_ENTRY_SIZE;
/* brcl 0xf,__jump_r1 */
*(short *)&insn[8] = 0xc0f4;
*(int *)&insn[10] = (jump_r1 - (ip + 8)) / 2;
} else {
ip[2] = 0x07f10000; /* br %r1 */
*(int *)&insn[8] = 0x07f10000; /* br %r1 */
}
ip[3] = (unsigned int) (val >> 32);
ip[4] = (unsigned int) val;
*(long *)&insn[14] = val;

write(ip, insn, sizeof(insn));
info->plt_initialized = 1;
}
if (r_type == R_390_PLTOFF16 ||
Expand All @@ -358,38 +371,38 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
val += rela->r_addend - loc;
}
if (r_type == R_390_PLT16DBL)
rc = apply_rela_bits(loc, val, 1, 16, 1);
rc = apply_rela_bits(loc, val, 1, 16, 1, write);
else if (r_type == R_390_PLTOFF16)
rc = apply_rela_bits(loc, val, 0, 16, 0);
rc = apply_rela_bits(loc, val, 0, 16, 0, write);
else if (r_type == R_390_PLT32DBL)
rc = apply_rela_bits(loc, val, 1, 32, 1);
rc = apply_rela_bits(loc, val, 1, 32, 1, write);
else if (r_type == R_390_PLT32 ||
r_type == R_390_PLTOFF32)
rc = apply_rela_bits(loc, val, 0, 32, 0);
rc = apply_rela_bits(loc, val, 0, 32, 0, write);
else if (r_type == R_390_PLT64 ||
r_type == R_390_PLTOFF64)
rc = apply_rela_bits(loc, val, 0, 64, 0);
rc = apply_rela_bits(loc, val, 0, 64, 0, write);
break;
case R_390_GOTOFF16: /* 16 bit offset to GOT. */
case R_390_GOTOFF32: /* 32 bit offset to GOT. */
case R_390_GOTOFF64: /* 64 bit offset to GOT. */
val = val + rela->r_addend -
((Elf_Addr) me->core_layout.base + me->arch.got_offset);
if (r_type == R_390_GOTOFF16)
rc = apply_rela_bits(loc, val, 0, 16, 0);
rc = apply_rela_bits(loc, val, 0, 16, 0, write);
else if (r_type == R_390_GOTOFF32)
rc = apply_rela_bits(loc, val, 0, 32, 0);
rc = apply_rela_bits(loc, val, 0, 32, 0, write);
else if (r_type == R_390_GOTOFF64)
rc = apply_rela_bits(loc, val, 0, 64, 0);
rc = apply_rela_bits(loc, val, 0, 64, 0, write);
break;
case R_390_GOTPC: /* 32 bit PC relative offset to GOT. */
case R_390_GOTPCDBL: /* 32 bit PC rel. off. to GOT shifted by 1. */
val = (Elf_Addr) me->core_layout.base + me->arch.got_offset +
rela->r_addend - loc;
if (r_type == R_390_GOTPC)
rc = apply_rela_bits(loc, val, 1, 32, 0);
rc = apply_rela_bits(loc, val, 1, 32, 0, write);
else if (r_type == R_390_GOTPCDBL)
rc = apply_rela_bits(loc, val, 1, 32, 1);
rc = apply_rela_bits(loc, val, 1, 32, 1, write);
break;
case R_390_COPY:
case R_390_GLOB_DAT: /* Create GOT entry. */
Expand All @@ -413,9 +426,10 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
return 0;
}

int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
static int __apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
unsigned int symindex, unsigned int relsec,
struct module *me)
struct module *me,
void *(*write)(void *dest, const void *src, size_t len))
{
Elf_Addr base;
Elf_Sym *symtab;
Expand All @@ -431,13 +445,27 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
n = sechdrs[relsec].sh_size / sizeof(Elf_Rela);

for (i = 0; i < n; i++, rela++) {
rc = apply_rela(rela, base, symtab, strtab, me);
rc = apply_rela(rela, base, symtab, strtab, me, write);
if (rc)
return rc;
}
return 0;
}

int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
unsigned int symindex, unsigned int relsec,
struct module *me)
{
bool early = me->state == MODULE_STATE_UNFORMED;
void *(*write)(void *, const void *, size_t) = memcpy;

if (!early)
write = s390_kernel_write;

return __apply_relocate_add(sechdrs, strtab, symindex, relsec, me,
write);
}

int module_finalize(const Elf_Ehdr *hdr,
const Elf_Shdr *sechdrs,
struct module *me)
Expand Down
2 changes: 1 addition & 1 deletion arch/s390/kvm/diag.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
vcpu->stat.instruction_diagnose_258++;
if (vcpu->run->s.regs.gprs[rx] & 7)
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
rc = read_guest_real(vcpu, vcpu->run->s.regs.gprs[rx], &parm, sizeof(parm));
if (rc)
return kvm_s390_inject_prog_cond(vcpu, rc);
if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258)
Expand Down
4 changes: 4 additions & 0 deletions arch/s390/kvm/gaccess.c
Original file line number Diff line number Diff line change
Expand Up @@ -993,6 +993,8 @@ static int access_guest_page(struct kvm *kvm, enum gacc_mode mode, gpa_t gpa,
const gfn_t gfn = gpa_to_gfn(gpa);
int rc;

if (!gfn_to_memslot(kvm, gfn))
return PGM_ADDRESSING;
if (mode == GACC_STORE)
rc = kvm_write_guest_page(kvm, gfn, data, offset, len);
else
Expand Down Expand Up @@ -1148,6 +1150,8 @@ int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra,
gra += fragment_len;
data += fragment_len;
}
if (rc > 0)
vcpu->arch.pgm.code = rc;
return rc;
}

Expand Down
Loading