Lines Matching refs:payload

54 struct payload {  struct
90 struct payload *data; /* The payload on which to act. */ argument
135 if ( !guest_handle_okay(upload->payload, upload->size) ) in verify_payload()
143 const struct payload *data; in is_patch()
172 const struct payload *data; in livepatch_symbols_lookup_by_name()
197 const struct payload *data; in livepatch_symbols_lookup()
265 static struct payload *find_payload(const char *name) in find_payload()
267 struct payload *data, *found = NULL; in find_payload()
287 static void free_payload_data(struct payload *payload) in free_payload_data() argument
290 if ( !payload->pages ) in free_payload_data()
293 vfree((void *)payload->text_addr); in free_payload_data()
295 payload->pages = 0; in free_payload_data()
316 static int move_payload(struct payload *payload, struct livepatch_elf *elf) in move_payload() argument
344 calc_section(&elf->sec[i], &payload->text_size, &offset[i]); in move_payload()
347 calc_section(&elf->sec[i], &payload->rw_size, &offset[i]); in move_payload()
350 calc_section(&elf->sec[i], &payload->ro_size, &offset[i]); in move_payload()
366 size = PAGE_ALIGN(payload->text_size) + PAGE_ALIGN(payload->rw_size) + in move_payload()
367 payload->ro_size; in move_payload()
378 rw_buf = text_buf + PAGE_ALIGN(payload->text_size); in move_payload()
379 ro_buf = rw_buf + PAGE_ALIGN(payload->rw_size); in move_payload()
381 payload->pages = size; in move_payload()
382 payload->text_addr = text_buf; in move_payload()
383 payload->rw_addr = rw_buf; in move_payload()
384 payload->ro_addr = ro_buf; in move_payload()
426 payload->safe_to_reapply = true; in move_payload()
433 static int secure_payload(struct payload *payload, struct livepatch_elf *elf) in secure_payload() argument
438 text_pages = PFN_UP(payload->text_size); in secure_payload()
442 rc = arch_livepatch_secure(payload->text_addr, text_pages, LIVEPATCH_VA_RX); in secure_payload()
446 rw_pages = PFN_UP(payload->rw_size); in secure_payload()
449 rc = arch_livepatch_secure(payload->rw_addr, rw_pages, LIVEPATCH_VA_RW); in secure_payload()
454 ro_pages = PFN_UP(payload->ro_size); in secure_payload()
456 rc = arch_livepatch_secure(payload->ro_addr, ro_pages, LIVEPATCH_VA_RO); in secure_payload()
458 ASSERT(ro_pages + rw_pages + text_pages == payload->pages); in secure_payload()
517 static int prepare_payload(struct payload *payload, in prepare_payload() argument
528 if ( !section_ok(elf, sec, sizeof(*payload->funcs)) ) in prepare_payload()
531 payload->funcs = sec->load_addr; in prepare_payload()
532 payload->nfuncs = sec->sec->sh_size / sizeof(*payload->funcs); in prepare_payload()
534 for ( i = 0; i < payload->nfuncs; i++ ) in prepare_payload()
538 f = &(payload->funcs[i]); in prepare_payload()
571 if ( !section_ok(elf, sec, sizeof(*payload->load_funcs)) ) in prepare_payload()
574 payload->load_funcs = sec->load_addr; in prepare_payload()
575 payload->n_load_funcs = sec->sec->sh_size / sizeof(*payload->load_funcs); in prepare_payload()
581 if ( !section_ok(elf, sec, sizeof(*payload->unload_funcs)) ) in prepare_payload()
584 payload->unload_funcs = sec->load_addr; in prepare_payload()
585 payload->n_unload_funcs = sec->sec->sh_size / sizeof(*payload->unload_funcs); in prepare_payload()
590 const struct payload *data; in prepare_payload()
598 &payload->id.p, &payload->id.len) ) in prepare_payload()
601 if ( !payload->id.len || !payload->id.p ) in prepare_payload()
608 ASSERT(data != payload); in prepare_payload()
609 if ( data->id.len == payload->id.len && in prepare_payload()
610 !memcmp(data->id.p, payload->id.p, data->id.len) ) in prepare_payload()
628 &payload->dep.p, &payload->dep.len) ) in prepare_payload()
631 if ( !payload->dep.len || !payload->dep.p ) in prepare_payload()
636 region = &payload->region; in prepare_payload()
639 region->start = payload->text_addr; in prepare_payload()
640 region->end = payload->text_addr + payload->text_size; in prepare_payload()
755 static int build_symbol_table(struct payload *payload, in build_symbol_table() argument
763 ASSERT(payload->nfuncs); in build_symbol_table()
805 for ( j = 0; j < payload->nfuncs; j++ ) in build_symbol_table()
807 if ( symtab[i].value == (unsigned long)payload->funcs[j].new_addr ) in build_symbol_table()
837 payload->symtab = symtab; in build_symbol_table()
838 payload->strtab = strtab; in build_symbol_table()
839 payload->nsyms = nsyms; in build_symbol_table()
844 static void free_payload(struct payload *data) in free_payload()
856 static int load_payload_data(struct payload *payload, void *raw, size_t len) in load_payload_data() argument
858 struct livepatch_elf elf = { .name = payload->name, .len = len }; in load_payload_data()
865 rc = move_payload(payload, &elf); in load_payload_data()
881 rc = prepare_payload(payload, &elf); in load_payload_data()
885 rc = build_symbol_table(payload, &elf); in load_payload_data()
889 rc = secure_payload(payload, &elf); in load_payload_data()
893 free_payload_data(payload); in load_payload_data()
903 struct payload *data, *found; in livepatch_upload()
912 data = xzalloc(struct payload); in livepatch_upload()
924 else if ( __copy_from_guest(raw_data, upload->payload, upload->size) ) in livepatch_upload()
960 struct payload *data; in livepatch_get()
992 struct payload *data; in livepatch_list()
1058 static int apply_payload(struct payload *data) in apply_payload()
1100 static int revert_payload(struct payload *data) in revert_payload()
1149 struct payload *data, *other, *tmp; in livepatch_do_action()
1206 static bool_t is_work_scheduled(const struct payload *data) in is_work_scheduled()
1213 static int schedule_work(struct payload *data, uint32_t cmd, uint32_t timeout) in schedule_work()
1311 struct payload *p; in check_for_livepatch_work()
1416 static int build_id_dep(struct payload *payload, bool_t internal) in build_id_dep() argument
1423 ASSERT(payload->dep.len && payload->dep.p); in build_id_dep()
1435 const struct payload *data; in build_id_dep()
1437 data = list_last_entry(&applied_list, struct payload, applied_list); in build_id_dep()
1444 if ( payload->dep.len != len || in build_id_dep()
1445 memcmp(id, payload->dep.p, len) ) in build_id_dep()
1448 LIVEPATCH, payload->name, name); in build_id_dep()
1457 struct payload *data; in livepatch_action()
1500 const struct payload *p; in livepatch_action()
1502 p = list_last_entry(&applied_list, struct payload, applied_list); in livepatch_action()
1614 struct payload *data; in livepatch_printall()