From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 D83B4275111 for ; Wed, 1 Oct 2025 10:26:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759314379; cv=none; b=aTv0kXL85nWDFX4p8Zm3S5uzBW8VsXTGJxvCvoX0yRV90yy7NSHlSPS2eOhnw0FfDiKmg0A0vsQFExY6+GfCujjFNsK1ZFRUuGOH2F1jCXrzAh445SDg9cMWwKjTZPFMveCu0cwOOq2+WfxnIUCI+PE+u2NRVp+XO8GACELIcVw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759314379; c=relaxed/simple; bh=8yD0KyHjri3QH9RK4HyNaJiWhDXUozznQkpMAzjO4ug=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=p7+EZiVzIOVZe4n9VeqfzHe+bpEwRpveJzqDKn6OiuM6AU1588PNfB0ua8kSm9bJ6gvYu42PHLef5AyarqEfMYfwx4GnDddlMFO5xffcH1zXbhnBepiVRdgjW/hlGieehtho1zLxrseHGTTvdWPsAqa2iZYjihWVinnA/k74E6o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=z8JGxV7R; arc=none smtp.client-ip=209.85.214.202 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--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="z8JGxV7R" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-272ed8c106eso46231785ad.2 for ; Wed, 01 Oct 2025 03:26:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1759314377; x=1759919177; 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=RSeamtURp7luZ5+zPShFxKdfm9ffQoU6mLL1dQ5PHbg=; b=z8JGxV7ROEj53f+XZfywA/QOxcSWh8pF1moLMI99MnD/BvI3x3oVTZ1UQyGlDqz19L uFn7P+5VAjB8A0xe6sX4dRuHyiYFXzQ4GGpq6Nozbren5oxTjS9aDMxfoZbUSMItES4W vnJxvgh2IbPJ8QsVrQXona0CJqIumwkx13Xd09mMlEztVDuf+wrO9oL3d+ySvpE2rPmg DbGzUBNmsPWF31jCXfrhfbyICou8eF1H0PZC27Mfj82TzVfaUdP7W9SAcWs0p5YWhlrH vjQD5CMWtpM+JjGXpAlWI+XApg1QexDeeiEnXW+o0w9bgCYMF3+uYPvgLKiYouHhlTU5 8mlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759314377; x=1759919177; 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=RSeamtURp7luZ5+zPShFxKdfm9ffQoU6mLL1dQ5PHbg=; b=GWXI/G15GXcz7HpBWNhgPg3O4cFTOZBuRzQJmKQKdJUAZLzaE9zDL1ePh2dq6YnCDH CjA/PIUuaIh4W5G2deZ49EoI+5kdrHD73lcA/dwl21oIOrvRCl0I90wc6TRS+k7jwa9B kNN+INUxXNNN3917CdalpoEzTmlyjfPTvUGW/CLv6iGlSGuEOTEnEr17vberZ4/AOprr i+qBZFCgVI6tJ7vMAimg1zbENK8CtTp3XM5Mej85qQbE4GGYmeNHEcw8wjX7UgGJyAJz jry+bdjBREtOskvca0SvxEmxbEAYJqi6UtKaBPupnpSGXcQ6Zs5lxRr0KobCA8jv73pY Qmzg== X-Forwarded-Encrypted: i=1; AJvYcCW3XvXHUrpX5ztkyDZCGBVxLwQn6ZF+eRduP6DT1obOUGB3PcOONyvEKJfXWqPQXrB2phQVh3AQtTuZdjA=@vger.kernel.org X-Gm-Message-State: AOJu0YzsmxdWk9+9hkg0QpRZBuSzlJGcRgE+7sOLSpnoHFRSuGCtzTqp NgGjU00WtBHGdqVn/wXT0w4Up2WkEBKF83Sr9sZXxM/YT2FUeu5axdtmmx8TRWZLbnhF4he4vnQ 5bhegRUPgxJX7dncoxRFrET5h6w== X-Google-Smtp-Source: AGHT+IE7DzZayHrClR+Aot7d4WgnPUURYPZhOmhZOVrGWNSHGmEgGCqiK4VXVX+wYtoX7OwswOw3ykMm9CqdFzYwnA== X-Received: from pjzp24.prod.google.com ([2002:a17:90b:118:b0:32e:3830:65f2]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:244c:b0:25a:24f2:af00 with SMTP id d9443c01a7336-28e7f276e28mr43250165ad.12.1759314377137; Wed, 01 Oct 2025 03:26:17 -0700 (PDT) Date: Wed, 01 Oct 2025 10:26:16 +0000 In-Reply-To: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250926163114.2626257-1-seanjc@google.com> <20250926163114.2626257-7-seanjc@google.com> Message-ID: Subject: Re: [PATCH 6/6] KVM: selftests: Verify that faulting in private guest_memfd memory fails From: Ackerley Tng To: Sean Christopherson Cc: Paolo Bonzini , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, David Hildenbrand , Fuad Tabba Content-Type: text/plain; charset="UTF-8" Sean Christopherson writes: > On Tue, Sep 30, 2025, Ackerley Tng wrote: >> Sean Christopherson writes: >> >> [...snip...] >> >> >> At some point, sigaction, sigsetjmp, etc could perhaps even be further >> wrapped. For testing memory_failure() for guest_memfd we will want to >> check for SIGBUS on memory failure injection instead of on host fault. >> >> Would be nice if it looked like this (maybe not in this patch series): >> >> + TEST_ASSERT_WILL_SIGBUS(READ_ONCE(mem[i])) >> + TEST_ASSERT_WILL_SIGBUS(WRITE_ONCE(mem[i])) >> + TEST_ASSERT_WILL_SIGBUS(madvise(MADV_HWPOISON)) > > Ooh, me likey. Definitely can do it now. Using a macro means we can print out > the actual action that didn't generate a SIGUBS, e.g. hacking the test to read > byte 0 generates: > > '(void)READ_ONCE(mem[0])' should have triggered SIGBUS > > Hmm, how about TEST_EXPECT_SIGBUS? TEST_ASSERT_xxx() typically asserts on a > value, i.e. on the result of a previous action. And s/WILL/EXPECT to make it > clear that the action is expected to SIGBUS _now_. > > And if we use a descriptive global variable, we can extract the macro to e.g. > test_util.h or kvm_util.h (not sure we want to do that right away; probably best > left to the future). > > static sigjmp_buf expect_sigbus_jmpbuf; > void fault_sigbus_handler(int signum) > { > siglongjmp(expect_sigbus_jmpbuf, 1); > } > > #define TEST_EXPECT_SIGBUS(action) \ > do { \ > struct sigaction sa_old, sa_new = { \ > .sa_handler = fault_sigbus_handler, \ > }; \ > \ > sigaction(SIGBUS, &sa_new, &sa_old); \ > if (sigsetjmp(expect_sigbus_jmpbuf, 1) == 0) { \ > action; \ > TEST_FAIL("'%s' should have triggered SIGBUS", #action); \ > } \ > sigaction(SIGBUS, &sa_old, NULL); \ > } while (0) > > static void test_fault_sigbus(int fd, size_t accessible_size, size_t map_size) > { > const char val = 0xaa; > char *mem; > size_t i; > > mem = kvm_mmap(map_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd); > > TEST_EXPECT_SIGBUS(memset(mem, val, map_size)); > TEST_EXPECT_SIGBUS((void)READ_ONCE(mem[accessible_size])); > > for (i = 0; i < accessible_size; i++) > TEST_ASSERT_EQ(READ_ONCE(mem[i]), val); > > kvm_munmap(mem, map_size); > } > Awesome! Thanks! And thanks for the explanations on the other suggestions. >> >> [...snip...] >>