Commit 81519421 authored by David Hildenbrand's avatar David Hildenbrand Committed by Cornelia Huck
Browse files

s390x/kvm: legacy_s390_alloc() only supports one allocation



We always allocate at a fixed address, a second allocation can therefore
of course never work. We would simply overwrite mappings.

This can e.g. happen in s390_memory_init(), if trying to allocate more
than > 8TB. Let's just bail out, as there is no need for supporting it
(legacy handling for z/VM).

Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
Message-Id: <20180628113817.30814-2-david@redhat.com>
Reviewed-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
parent d66b43c8
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -752,12 +752,20 @@ int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t ar, void *hostbuf,
 */
static void *legacy_s390_alloc(size_t size, uint64_t *align, bool shared)
{
    void *mem;
    static void *mem;

    if (mem) {
        /* we only support one allocation, which is enough for initial ram */
        return NULL;
    }

    mem = mmap((void *) 0x800000000ULL, size,
               PROT_EXEC|PROT_READ|PROT_WRITE,
               MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
    return mem == MAP_FAILED ? NULL : mem;
    if (mem == MAP_FAILED) {
        mem = NULL;
    }
    return mem;
}

static uint8_t const *sw_bp_inst;