#define INJECT_F_RETVAL 0x04
#define INJECT_F_DELAY_ENTER 0x08
#define INJECT_F_DELAY_EXIT 0x10
+#define INJECT_F_SYSCALL 0x20
+
+#define INJECT_ACTION_FLAGS \
+ (INJECT_F_SIGNAL \
+ |INJECT_F_ERROR \
+ |INJECT_F_RETVAL \
+ |INJECT_F_DELAY_ENTER \
+ |INJECT_F_DELAY_EXIT \
+ )
struct inject_data {
- uint8_t flags; /* 5 of 8 flags are used so far */
+ uint8_t flags; /* 6 of 8 flags are used so far */
uint8_t signo; /* NSIG <= 128 */
uint16_t rval_idx; /* index in retval_vec */
uint16_t delay_idx; /* index in delay_data_vec */
+ uint16_t scno; /* syscall to be injected instead of -1 */
};
struct inject_opts {
struct mmap_cache_t *mmap_cache;
+#ifdef HAVE_LINUX_KVM_H
+ struct vcpu_info *vcpu_info_list;
+#endif
+
#ifdef ENABLE_STACKTRACE
void *unwind_ctx;
struct unwind_queue_t *unwind_queue;
#define TCB_INJECT_DELAY_EXIT 0x800 /* Current syscall needs to be delayed
on exit */
#define TCB_DELAYED 0x1000 /* Current syscall has been delayed */
+#define TCB_TAMPERED_NO_FAIL 0x2000 /* We tamper tcb with syscall
+ that should not fail. */
/* qualifier flags */
#define QUAL_TRACE 0x001 /* this system call should be traced */
#define recovering(tcp) ((tcp)->flags & TCB_RECOVERING)
#define inject_delay_exit(tcp) ((tcp)->flags & TCB_INJECT_DELAY_EXIT)
#define syscall_delayed(tcp) ((tcp)->flags & TCB_DELAYED)
+#define syscall_tampered_nofail(tcp) ((tcp)->flags & TCB_TAMPERED_NO_FAIL)
#include "xlat.h"
/** Ethernet protocols array size without terminating record. */
extern const size_t ethernet_protocols_size;
+/** IP protocols list, sorted, defined in net.c. */
+extern const struct xlat inet_protocols[];
+/** IP protocols array size without terminating record. */
+extern const size_t inet_protocols_size;
+
extern const struct xlat evdev_abs[];
/** Number of elements in evdev_abs array without the terminating record. */
extern const size_t evdev_abs_size;
extern const struct xlat iffflags[];
-extern const struct xlat inet_protocols[];
extern const struct xlat ip_type_of_services[];
extern const struct xlat ipc_private[];
extern const struct xlat msg_flags[];
extern void unwind_tcb_capture(struct tcb *);
#endif
+#ifdef HAVE_LINUX_KVM_H
+extern void kvm_run_structure_decoder_init(void);
+extern void kvm_vcpu_info_free(struct tcb *);
+#endif
+
static inline int
printstrn(struct tcb *tcp, kernel_ulong_t addr, kernel_ulong_t len)
{
extern const struct_ioctlent ioctlent0[];
extern const char *const personality_names[];
+/* Personality designators to be used for specifying personality */
+extern const char *const personality_designators[];
#if SUPPORTED_PERSONALITIES > 1
extern const struct_sysent *sysent;