static void get_compat_ipmi_req(struct ipmi_req *p64, struct compat_ipmi_req *p32) { p64->addr = compat_ptr(p32->addr); p64->addr_len = p32->addr_len; p64->msgid = p32->msgid; get_compat_ipmi_msg(&p64->msg, &p32->msg); }
static void get_compat_ipmi_recv(struct ipmi_recv *p64, struct compat_ipmi_recv *p32) { memset(p64, 0, sizeof(struct ipmi_recv)); p64->recv_type = p32->recv_type; p64->addr = compat_ptr(p32->addr); p64->addr_len = p32->addr_len; p64->msgid = p32->msgid; get_compat_ipmi_msg(&p64->msg, &p32->msg); }
static long get_compat_ipmi_recv(struct ipmi_recv *p64, struct compat_ipmi_recv __user *p32) { compat_uptr_t tmp; if (!access_ok(VERIFY_READ, p32, sizeof(*p32)) || __get_user(p64->recv_type, &p32->recv_type) || __get_user(tmp, &p32->addr) || __get_user(p64->addr_len, &p32->addr_len) || __get_user(p64->msgid, &p32->msgid) || get_compat_ipmi_msg(&p64->msg, &p32->msg)) return -EFAULT; p64->addr = compat_ptr(tmp); return 0; }