Skip to content

Commit

Permalink
Allow setting "none" kernel to use in-vm kernel in any virt_mode
Browse files Browse the repository at this point in the history
Automatically translate it to appropriate pvgrub flavor.

QubesOS/qubes-issues#5212
  • Loading branch information
marmarek committed Apr 24, 2024
1 parent 1313cb8 commit ba8bc65
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
8 changes: 7 additions & 1 deletion qubes/tests/vm/qubesvm.py
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ def test_220_include_in_backups(self):

@unittest.mock.patch('qubes.config.qubes_base_dir', '/tmp/qubes-test')
def test_250_kernel(self):
for kver in ("dummy", "dummy2"):
for kver in ("dummy", "dummy2", "pvgrub2", "pvgrub2-pvh"):
kernel_dir = '/tmp/qubes-test/vm-kernels/' + kver
os.makedirs(kernel_dir, exist_ok=True)
open(os.path.join(kernel_dir, 'vmlinuz'), 'w').close()
Expand All @@ -517,6 +517,12 @@ def test_250_kernel(self):
"dummy2")
del vm.kernel
self.assertPropertyDefaultValue(vm, 'kernel', "dummy")
vm.kernel = None
self.assertEqual(vm.kernel_path, "/tmp/qubes-test/vm-kernels/pvgrub2-pvh/vmlinuz")
vm.virt_mode = "pv"
self.assertEqual(vm.kernel_path, "/tmp/qubes-test/vm-kernels/pvgrub2/vmlinuz")
vm.virt_mode = "hvm"
self.assertIsNone(vm.kernel_path)

@qubes.tests.skipUnlessDom0
def test_251_kernel_invalid(self):
Expand Down
16 changes: 14 additions & 2 deletions qubes/vm/qubesvm.py
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,18 @@ def is_memory_balancing_possible(self):
@property
def kernel_path(self):
if not self.kernel:
if self.virt_mode == 'pvh':
return os.path.join(
qubes.config.qubes_base_dir,
qubes.config.system_path['qubes_kernels_base_dir'],
"pvgrub2-pvh",
"vmlinuz")
if self.virt_mode == "pv":
return os.path.join(
qubes.config.qubes_base_dir,
qubes.config.system_path['qubes_kernels_base_dir'],
"pvgrub2",
"vmlinuz")
return None
return self.storage.kernels_dir + "/vmlinuz"

Expand All @@ -1663,9 +1675,9 @@ def is_kernel_from_vm(self):
if self.virt_mode == 'hvm':
return not self.kernel

Check warning on line 1676 in qubes/vm/qubesvm.py

View check run for this annotation

Codecov / codecov/patch

qubes/vm/qubesvm.py#L1676

Added line #L1676 was not covered by tests
if self.virt_mode == 'pvh':
return self.kernel == 'pvgrub2-pvh'
return not self.kernel or self.kernel == 'pvgrub2-pvh'
if self.virt_mode == 'pv':
return self.kernel == 'pvgrub2'
return not self.kernel or self.kernel == 'pvgrub2'
assert False

Check warning on line 1681 in qubes/vm/qubesvm.py

View check run for this annotation

Codecov / codecov/patch

qubes/vm/qubesvm.py#L1681

Added line #L1681 was not covered by tests

@property
Expand Down

0 comments on commit ba8bc65

Please sign in to comment.