backups: do not hardcode limit values in the code (#771)
Also introduce limit for stderr read from VM (anti DoS protection).
This commit is contained in:
parent
b85cd0448f
commit
a2037a4985
@ -39,6 +39,11 @@ from multiprocessing import Queue,Process
|
|||||||
|
|
||||||
BACKUP_DEBUG = False
|
BACKUP_DEBUG = False
|
||||||
|
|
||||||
|
# Maximum size of error message get from process stderr (including VM process)
|
||||||
|
MAX_STDERR_BYTES = 1024
|
||||||
|
# header + qubes.xml max size
|
||||||
|
HEADER_QUBES_XML_MAX_SIZE = 1024 * 1024
|
||||||
|
|
||||||
def get_disk_usage(file_or_dir):
|
def get_disk_usage(file_or_dir):
|
||||||
if not os.path.exists(file_or_dir):
|
if not os.path.exists(file_or_dir):
|
||||||
return 0
|
return 0
|
||||||
@ -492,7 +497,7 @@ def backup_do(base_backup_dir, files_to_backup, passphrase,
|
|||||||
send_proc.terminate()
|
send_proc.terminate()
|
||||||
if run_error == "VM" and vmproc:
|
if run_error == "VM" and vmproc:
|
||||||
raise QubesException("Failed to write the backup, VM output:\n" +
|
raise QubesException("Failed to write the backup, VM output:\n" +
|
||||||
vmproc.stderr.read())
|
vmproc.stderr.read(MAX_STDERR_BYTES))
|
||||||
else:
|
else:
|
||||||
raise QubesException("Failed to perform backup: error in "+ \
|
raise QubesException("Failed to perform backup: error in "+ \
|
||||||
run_error)
|
run_error)
|
||||||
@ -930,7 +935,7 @@ def restore_vm_dirs (backup_source, restore_tmpdir, passphrase, vms_dirs, vms,
|
|||||||
raise QubesException(
|
raise QubesException(
|
||||||
"ERROR: unable to read the qubes backup {0} " \
|
"ERROR: unable to read the qubes backup {0} " \
|
||||||
"because of a VM error: {1}".format(
|
"because of a VM error: {1}".format(
|
||||||
backup_source, vmproc.stderr.read()))
|
backup_source, vmproc.stderr.read(MAX_STDERR_BYTES)))
|
||||||
|
|
||||||
if filename and filename!="EOF":
|
if filename and filename!="EOF":
|
||||||
raise QubesException("Premature end of archive, the last file was %s" % filename)
|
raise QubesException("Premature end of archive, the last file was %s" % filename)
|
||||||
@ -1007,7 +1012,7 @@ def backup_restore_header(source, passphrase,
|
|||||||
passphrase=passphrase,
|
passphrase=passphrase,
|
||||||
vms_dirs=extract_filter,
|
vms_dirs=extract_filter,
|
||||||
vms=None,
|
vms=None,
|
||||||
vms_size=40000,
|
vms_size=HEADER_QUBES_XML_MAX_SIZE,
|
||||||
print_callback=print_callback,
|
print_callback=print_callback,
|
||||||
error_callback=error_callback,
|
error_callback=error_callback,
|
||||||
progress_callback=None,
|
progress_callback=None,
|
||||||
|
Loading…
Reference in New Issue
Block a user