struct list_head q_messages;
        struct list_head q_receivers;
        struct list_head q_senders;
 -};
 +} __randomize_layout;
  
- /* Helper routines for sys_msgsnd and sys_msgrcv */
- extern long do_msgsnd(int msqid, long mtype, void __user *mtext,
-                       size_t msgsz, int msgflg);
- extern long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp,
-                     int msgflg,
-                     long (*msg_fill)(void __user *, struct msg_msg *,
-                                      size_t));
- 
  #endif /* _LINUX_MSG_H */
 
        return do_msgrcv(msqid, msgp, msgsz, msgtyp, msgflg, do_msg_fill);
  }
  
+ #ifdef CONFIG_COMPAT
+ static long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
+ {
+       struct compat_msgbuf __user *msgp = dest;
+       size_t msgsz;
+ 
+       if (put_user(msg->m_type, &msgp->mtype))
+               return -EFAULT;
+ 
+       msgsz = (bufsz > msg->m_ts) ? msg->m_ts : bufsz;
+       if (store_msg(msgp->mtext, msg, msgsz))
+               return -EFAULT;
+       return msgsz;
+ }
+ 
+ COMPAT_SYSCALL_DEFINE5(msgrcv, int, msqid, compat_uptr_t, msgp,
+                      compat_ssize_t, msgsz, compat_long_t, msgtyp, int, msgflg)
+ {
+       return do_msgrcv(msqid, compat_ptr(msgp), (ssize_t)msgsz, (long)msgtyp,
+                        msgflg, compat_do_msg_fill);
+ }
+ #endif
  
 -void msg_init_ns(struct ipc_namespace *ns)
 +int msg_init_ns(struct ipc_namespace *ns)
  {
        ns->msg_ctlmax = MSGMAX;
        ns->msg_ctlmnb = MSGMNB;
  static int sysvipc_msg_proc_show(struct seq_file *s, void *it)
  {
        struct user_namespace *user_ns = seq_user_ns(s);
 -      struct msg_queue *msq = it;
 +      struct kern_ipc_perm *ipcp = it;
 +      struct msg_queue *msq = container_of(ipcp, struct msg_queue, q_perm);
  
        seq_printf(s,
-                  "%10d %10d  %4o  %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n",
+                  "%10d %10d  %4o  %10lu %10lu %5u %5u %5u %5u %5u %5u %10llu %10llu %10llu\n",
                   msq->q_perm.key,
                   msq->q_perm.id,
                   msq->q_perm.mode,
 
  static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
  {
        struct user_namespace *user_ns = seq_user_ns(s);
 -      struct sem_array *sma = it;
 +      struct kern_ipc_perm *ipcp = it;
 +      struct sem_array *sma = container_of(ipcp, struct sem_array, sem_perm);
-       time_t sem_otime;
+       time64_t sem_otime;
  
        /*
         * The proc interface isn't aware of sem_lock(), it calls