#include <linux/spinlock.h>
#include <linux/init.h>
#include <linux/security.h>
#include <linux/slab.h>
#include <linux/ipc.h>
#include <linux/msg.h>
#include <linux/ipc_namespace.h>
#include <linux/utsname.h>
#include <linux/proc_ns.h>
#include <linux/uaccess.h>
#include <linux/sched.h>
#include "util.h"
DEFINE_SPINLOCK(…);
struct ipc_namespace init_ipc_ns = …;
struct msg_msgseg { … };
#define DATALEN_MSG …
#define DATALEN_SEG …
static kmem_buckets *msg_buckets __ro_after_init;
static int __init init_msg_buckets(void)
{ … }
subsys_initcall(init_msg_buckets);
static struct msg_msg *alloc_msg(size_t len)
{ … }
struct msg_msg *load_msg(const void __user *src, size_t len)
{ … }
#ifdef CONFIG_CHECKPOINT_RESTORE
struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst)
{ … }
#else
struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst)
{
return ERR_PTR(-ENOSYS);
}
#endif
int store_msg(void __user *dest, struct msg_msg *msg, size_t len)
{ … }
void free_msg(struct msg_msg *msg)
{ … }