@@ -277,6 +277,7 @@ def __init__(self, index, v2p, disk, key, name, dna=DNA):
277
277
dict_header_vaddr = self .DICT_VSTRIDE * (index + 1 )
278
278
self .index = index
279
279
self .vaddr = dict_header_vaddr
280
+ self .num_keys = 0
280
281
if dict_header_vaddr in v2p :
281
282
self .valid = True
282
283
pp = v2p [dict_header_vaddr ]
@@ -302,7 +303,11 @@ def __init__(self, index, v2p, disk, key, name, dna=DNA):
302
303
logging .info ("decrypt dict '{}' with {} keys and {} free_key_index" .format (self .name , self .num_keys , self .free_key_index ))
303
304
logging .debug ("dict header len: {}" .format (i - 4 )) # subtract 4 because of the journal
304
305
except ValueError :
305
- logging .error ("basisdicts: couldn't decrypt vpage @ {:x} ppage @ {:x}" .format (dict_header_vaddr , v2p [dict_header_vaddr ]))
306
+ logging .error ("\n " ) # make some whitespace so this stands out in the logs
307
+ logging .error ("**** basisdicts: encountered an invalid dict root record. Data loss may have occurred!" )
308
+ logging .error ("**** couldn't decrypt vpage @ {:x} ppage @ {:x} in basis {}, dna {}" .format (dict_header_vaddr , v2p [dict_header_vaddr ], name , dna ))
309
+ logging .error ("****** partial dump: {}\n " .format (disk [pp :pp + 64 ].hex ()))
310
+ self .valid = False
306
311
307
312
if self .num_keys > 0 :
308
313
keys_found = 0
@@ -708,17 +713,23 @@ def decode_fscb(img, keys, FSCB_LEN_PAGES=2, dna=DNA):
708
713
fscb_start = None
709
714
pg = 0
710
715
for page in pages :
716
+ logging .debug ("FSCB page {}: {}" .format (pg , page [:40 ].hex ()))
711
717
if bytearray (page [:32 ]) == bytearray ([0xff ] * 32 ):
718
+ logging .debug (" ...page is blank" )
712
719
# page is blank
713
720
pass
714
721
elif bytearray (page [:16 ]) == bytearray ([0xff ] * 16 ):
722
+ logging .debug (" ...page is spaceupdate" )
715
723
space_update .append (page [16 :])
716
724
else :
717
725
if fscb_start == None :
726
+ logging .debug (" ...page is start of FSCB" )
718
727
fscb_start = pg
728
+ else :
729
+ logging .debug (" ...page is more FSCB data" )
719
730
pg += 1
720
731
721
- if fscb_start :
732
+ if fscb_start is not None :
722
733
logging .debug ("Found FSCB at {:x}" .format (fscb_start ))
723
734
fscb_enc = img [fscb_start * 4096 : (fscb_start + FSCB_LEN_PAGES ) * 4096 ]
724
735
# print("data: {}".format(fscb_enc.hex()))
0 commit comments