summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsarthurdev <965089+sarthurdev@users.noreply.github.com>2025-08-18 21:57:08 +0200
committersarthurdev <965089+sarthurdev@users.noreply.github.com>2025-09-23 20:32:33 +0200
commit0476b6be11473a36e8e88d8ae3d983bb8168084b (patch)
tree3359a03da920638e87149682f8f2e29ac08b4f4a /src
parentc7074d3c84750d782c28eee78aa2295af6fb4879 (diff)
downloadvyos-1x-0476b6be11473a36e8e88d8ae3d983bb8168084b.tar.gz
vyos-1x-0476b6be11473a36e8e88d8ae3d983bb8168084b.zip
tpm: T7720: Handle encrypt failure and gracefully abort
Diffstat (limited to 'src')
-rwxr-xr-xsrc/helpers/vyos-config-encrypt.py47
1 files changed, 29 insertions, 18 deletions
diff --git a/src/helpers/vyos-config-encrypt.py b/src/helpers/vyos-config-encrypt.py
index 2e68638e9..71ec7bb73 100755
--- a/src/helpers/vyos-config-encrypt.py
+++ b/src/helpers/vyos-config-encrypt.py
@@ -28,7 +28,7 @@ from vyos.tpm import clear_tpm_key
from vyos.tpm import read_tpm_key
from vyos.tpm import write_tpm_key
from vyos.utils.io import ask_input, ask_yes_no
-from vyos.utils.process import cmd
+from vyos.utils.process import cmd, run
from vyos.defaults import directories
persistpath_cmd = '/opt/vyatta/sbin/vyos-persistpath'
@@ -96,28 +96,39 @@ def encrypt_config(key, recovery_key=None, is_tpm=True):
image_name = get_current_image()
image_path = os.path.join(luks_folder, image_name)
- # Create file for encrypted config
- cmd(f'fallocate -l {size}M {image_path}')
+ try:
+ # Create file for encrypted config
+ cmd(f'fallocate -l {size}M {image_path}')
- # Write TPM key for slot #1
- with NamedTemporaryFile(dir='/dev/shm', delete=False) as f:
- f.write(key)
- key_file = f.name
+ # Write TPM key for slot #1
+ with NamedTemporaryFile(dir='/dev/shm', delete=False) as f:
+ f.write(key)
+ key_file = f.name
- # Format and add main key to volume
- cmd(f'cryptsetup -q luksFormat {image_path} {key_file}')
+ # Format and add main key to volume
+ cmd(f'cryptsetup -q luksFormat {image_path} {key_file}')
- if recovery_key:
- # Write recovery key for slot 2
- with NamedTemporaryFile(dir='/dev/shm', delete=False) as f:
- f.write(recovery_key)
- recovery_key_file = f.name
+ if recovery_key:
+ # Write recovery key for slot 2
+ with NamedTemporaryFile(dir='/dev/shm', delete=False) as f:
+ f.write(recovery_key)
+ recovery_key_file = f.name
- cmd(f'cryptsetup -q luksAddKey {image_path} {recovery_key_file} --key-file={key_file}')
+ cmd(f'cryptsetup -q luksAddKey {image_path} {recovery_key_file} --key-file={key_file}')
- # Open encrypted volume and format with ext4
- cmd(f'cryptsetup -q open {image_path} vyos_config --key-file={key_file}')
- cmd('mkfs.ext4 /dev/mapper/vyos_config')
+ # Open encrypted volume and format with ext4
+ cmd(f'cryptsetup -q open {image_path} vyos_config --key-file={key_file}')
+ cmd('mkfs.ext4 /dev/mapper/vyos_config')
+ except Exception as e:
+ print('An error occurred while creating the encrypted config volume, aborting.')
+
+ if os.path.exists('/dev/mapper/vyos_config'):
+ run('cryptsetup -q close vyos_config')
+
+ if os.path.exists(image_path):
+ os.unlink(image_path)
+
+ raise e
with TemporaryDirectory() as d:
cmd(f'mount /dev/mapper/vyos_config {d}')