]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Aug 2009 17:46:09 +0000 (10:46 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Aug 2009 17:46:09 +0000 (10:46 -0700)
* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6:
  [S390] KVM: Read buffer overflow
  [S390] kernel: Storing machine flags early in lowcore

arch/s390/kernel/early.c
arch/s390/kvm/sigp.c

index 8d15314381e04640bbf227ff045b9d9a782f22cf..cae14c499511c6f5358170906764a95045ed4b39 100644 (file)
@@ -208,6 +208,9 @@ static noinline __init void detect_machine_type(void)
                machine_flags |= MACHINE_FLAG_KVM;
        else
                machine_flags |= MACHINE_FLAG_VM;
+
+       /* Store machine flags for setting up lowcore early */
+       S390_lowcore.machine_flags = machine_flags;
 }
 
 static __init void early_pgm_check_handler(void)
index 36678835034d9f49a748f448fd943073e9974564..0ef81d6776e97c934792027415267ad95d579136 100644 (file)
@@ -169,7 +169,7 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address,
                             unsigned long *reg)
 {
        struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
-       struct kvm_s390_local_interrupt *li;
+       struct kvm_s390_local_interrupt *li = NULL;
        struct kvm_s390_interrupt_info *inti;
        int rc;
        u8 tmp;
@@ -189,9 +189,10 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address,
                return 2; /* busy */
 
        spin_lock(&fi->lock);
-       li = fi->local_int[cpu_addr];
+       if (cpu_addr < KVM_MAX_VCPUS)
+               li = fi->local_int[cpu_addr];
 
-       if ((cpu_addr >= KVM_MAX_VCPUS) || (li == NULL)) {
+       if (li == NULL) {
                rc = 1; /* incorrect state */
                *reg &= SIGP_STAT_INCORRECT_STATE;
                kfree(inti);