From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1C61374E71 for ; Mon, 11 May 2026 11:38:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.73 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778499485; cv=none; b=F78Xh7OWphQOrnjGkwNi/trwSXYNQNPKEpUgGEC2A20rfhZQw+a0H7r0AuWi7ou3QBYWnXIKACZUSYW7VjYTbZiB+CdzHZX9JO4n+UZwZIbLtKMEggBOVn5EpiTJP+V/MPl4QQDmUIaCRU2gj2+R+j3GBS268a2x0dDkhMcThYM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778499485; c=relaxed/simple; bh=EOWmfLNuS8z2erR5IqiGNX4TFSQ82cXVDTp98cptEII=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=clwZWjjT9Kfd8qHj7UtpM/bOE9iCUaKfGH9HymIPVo8cYKzls0dpBuXagtLe2GZ1H0Yk2MBgkAgTRXGi2ImxIRJpvKftKb95DXR6HwVy7ChtFuUWRG00kCBJBzH0LEg0AJ/8sSEvs7IIS34VPsjO/idpH9BNaZ+EvshxPO93fvw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=jgo+LHj4; arc=none smtp.client-ip=209.85.128.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--tabba.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="jgo+LHj4" Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-48d0677b5f7so24032885e9.1 for ; Mon, 11 May 2026 04:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778499482; x=1779104282; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=135gcqRF2uJesg3YaRFV8E4Vlot8XdxjYp/uZeTNldQ=; b=jgo+LHj4sdm92JVUYbyWHxWDVAQ1yBt/SftnMUx2G5PRVgDd3wYvbjXAe/N/7KAQby K6r8c4jYShhJ1HmTr9S/s/smwcQP1P1xnM4QZxw+KuF2/Z6bAGk6MaRXWRbn3hcKprul sONiacZkl/BEYYWxf9au5RPzcvUB9p3kVPjIVPEz2uXrQWff8RidgtK0rZrs5C3p4olr xR1k/m3auNgoq9XaZt+YqNeGEH/y4Lwl82nE+SWEJdrccXbc2uKib5/Xz4E11v+LQc/K k3g/CW9X6cLhjB5dqkGMjZFWiPu4VYrAt1b8tddROV68W6ZA6nNu5etnQajKmTNT2tT3 zdBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778499482; x=1779104282; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=135gcqRF2uJesg3YaRFV8E4Vlot8XdxjYp/uZeTNldQ=; b=d+qNK4f8LIcy5tvepzrI9v0134uYv5Eaxjh44xls3z8mtyD7/+dFmkL18agWLnaIse L8FoPJOfKfEJ+3BnxXxRHEtz4Sz/mWk0riHSLr67o3ijnrJDBbC2kErDn5eNBxJCvyEH CijXeK7xDQy6SF+fjDZEIf84DWITPOe2k+sumB+G8GhbzpZS64nvln46VN73M5TQ/V9i UW/ZeV7Hz+YY7TwEhcVoi3Bl81BjA3zhr7+DzM9G1IJLMGNfl8fSoJD0OaGla4UlRBNk HzHhz5/WWLRtaRigbfjOpq2QkYdGUOI8xgKbXeGVZ2uFCPGr6LB3w76muaNEIPQtIN+T qpYw== X-Forwarded-Encrypted: i=1; AFNElJ+/WEsTCAODZfCWjyIuEAel++WEdwQWp5a5ZkfKwqsejzEpn9IX0aI4MSR/7/EJpTFnnwQYT9d+Z9kMJ2s=@vger.kernel.org X-Gm-Message-State: AOJu0YxQcIyHVjCWassJ1lY+Z7rIa5hCvb9o4P4BLq7Vzt+UQGBWYJ6h yYkKfrzlYuy7J4xJ+7g7gOPtH9WlN70JYpEDvjBY0KysA3T+CuKZTd33LjGyNy2i/iX1h/NqVsP hcw== X-Received: from wmor7.prod.google.com ([2002:a05:600c:4587:b0:488:a6d9:e91a]) (user=tabba job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:a305:b0:488:8bdd:cfcc with SMTP id 5b1f17b1804b1-48e51dd6025mr266717105e9.0.1778499482188; Mon, 11 May 2026 04:38:02 -0700 (PDT) Date: Mon, 11 May 2026 12:37:59 +0100 In-Reply-To: <20260511113759.610924-1-tabba@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260511113759.610924-1-tabba@google.com> X-Mailer: git-send-email 2.54.0.563.g4f69b47b94-goog Message-ID: <20260511113759.610924-3-tabba@google.com> Subject: [PATCH 2/2] KVM: selftests: Fix FD double-close in kvm_vm_release() From: Fuad Tabba To: Paolo Bonzini , Sean Christopherson , Shuah Khan Cc: Marc Zyngier , Oliver Upton , Will Deacon , Ackerley Tng , David Matlack , kvm@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" kvm_vm_release() closes vmp->fd and vmp->kvm_fd unconditionally, and kvm_vm_free() calls kvm_vm_release() at teardown. A test that calls kvm_vm_release() and then kvm_vm_free() without a vm_recreate_with_one_vcpu() in between double-closes both FDs. Since kvm_close() asserts on close() failure, the second close trips TEST_ASSERT and aborts the test, or, if the FD was recycled, silently closes an unrelated file. Guard the two closes in kvm_vm_release() by checking each FD against -1 and resetting it to -1 after closing, matching the existing kvm_stats_release() idiom. Existing in-tree callers all pass through vm_recreate_with_one_vcpu() before teardown, so they reassign the FDs and do not hit the bug today. Fixes: fa3899add105 ("kvm: selftests: add basic test for state save and restore") Signed-off-by: Fuad Tabba --- tools/testing/selftests/kvm/lib/kvm_util.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c index 2a76eca7029d..e44223714fd4 100644 --- a/tools/testing/selftests/kvm/lib/kvm_util.c +++ b/tools/testing/selftests/kvm/lib/kvm_util.c @@ -793,8 +793,14 @@ void kvm_vm_release(struct kvm_vm *vmp) list_for_each_entry_safe(vcpu, tmp, &vmp->vcpus, list) vm_vcpu_rm(vmp, vcpu); - kvm_close(vmp->fd); - kvm_close(vmp->kvm_fd); + if (vmp->fd >= 0) { + kvm_close(vmp->fd); + vmp->fd = -1; + } + if (vmp->kvm_fd >= 0) { + kvm_close(vmp->kvm_fd); + vmp->kvm_fd = -1; + } /* Free cached stats metadata and close FD */ kvm_stats_release(&vmp->stats); -- 2.54.0.563.g4f69b47b94-goog