/* * Return true if specified path (in user-space) matches. */ static int upathmatch(struct tcb *tcp, unsigned long upath) { char path[PATH_MAX + 1]; return umovestr(tcp, upath, sizeof path, path) > 0 && pathmatch(path); }
bool decode_nla_linkinfo_kind(struct tcb *const tcp, const kernel_ulong_t addr, const unsigned int len, const void *const opaque_data) { struct ifla_linkinfo_ctx *ctx = (void *) opaque_data; memset(ctx->kind, '\0', sizeof(ctx->kind)); if (umovestr(tcp, addr, sizeof(ctx->kind), ctx->kind) <= 0) { /* * If we haven't seen NUL or an error occurred, set kind to * an empty string. */ ctx->kind[0] = '\0'; } printstr_ex(tcp, addr, len, QUOTE_0_TERMINATED); return true; }
int sys_sysmips(struct tcb *tcp) { if (entering(tcp)) { printxval(sysmips_operations, tcp->u_arg[0], "???"); if (!verbose(tcp)) { tprintf("%ld, %ld, %ld", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]); } else if (tcp->u_arg[0] == SETNAME) { char nodename[__NEW_UTS_LEN + 1]; if (umovestr(tcp, tcp->u_arg[1], (__NEW_UTS_LEN + 1), nodename) < 0) tprintf(", %#lx", tcp->u_arg[1]); else tprintf(", \"%.*s\"", (int)(__NEW_UTS_LEN + 1), nodename); } else if (tcp->u_arg[0] == MIPS_ATOMIC_SET) { tprintf(", %#lx, 0x%lx", tcp->u_arg[1], tcp->u_arg[2]); } else if (tcp->u_arg[0] == MIPS_FIXADE) { tprintf(", 0x%lx", tcp->u_arg[1]); } else { tprintf("%ld, %ld, %ld", tcp->u_arg[1], tcp->u_arg[2], tcp->u_arg[3]); } } return 0; }