/** * ecryptfs_process_nl_reponse * @skb: The socket buffer containing the netlink message of state * RESPONSE * * Processes a response message after sending a operation request to * userspace. Attempts to assign the msg to a netlink context element * at the index specified in the msg. The sk_buff and nlmsghdr must * be validated before this function. Returns zero upon delivery to * desired context element; non-zero upon delivery failure or error. */ static int ecryptfs_process_nl_response(struct sk_buff *skb) { struct nlmsghdr *nlh = nlmsg_hdr(skb); struct ecryptfs_message *msg = NLMSG_DATA(nlh); int rc; if (skb->len - NLMSG_HDRLEN - sizeof(*msg) != msg->data_len) { rc = -EINVAL; ecryptfs_printk(KERN_ERR, "Received netlink message with " "incorrectly specified data length\n"); goto out; } rc = ecryptfs_process_response(msg, NETLINK_CREDS(skb)->uid, NETLINK_CREDS(skb)->pid, nlh->nlmsg_seq); if (rc) printk(KERN_ERR "Error processing response message; rc = [%d]\n", rc); out: return rc; }
/** * ecryptfs_miscdev_response - miscdevess response to message previously sent to daemon * @data: Bytes comprising struct ecryptfs_message * @data_size: sizeof(struct ecryptfs_message) + data len * @seq: Sequence number for miscdev response packet * * Returns zero on success; non-zero otherwise */ static int ecryptfs_miscdev_response(struct ecryptfs_daemon *daemon, char *data, size_t data_size, u32 seq) { struct ecryptfs_message *msg = (struct ecryptfs_message *)data; int rc; if ((sizeof(*msg) + msg->data_len) != data_size) { printk(KERN_WARNING "%s: (sizeof(*msg) + msg->data_len) = " "[%zd]; data_size = [%zd]. Invalid packet.\n", __func__, (sizeof(*msg) + msg->data_len), data_size); rc = -EINVAL; goto out; } rc = ecryptfs_process_response(daemon, msg, seq); if (rc) printk(KERN_ERR "Error processing response message; rc = [%d]\n", rc); out: return rc; }