]> git.ipfire.org Git - thirdparty/man-pages.git/commitdiff
msgop.2: Add restriction on ENOSYS error
authorYang Xu <xuyang2018.jy@cn.fujitsu.com>
Wed, 9 Sep 2020 03:57:42 +0000 (11:57 +0800)
committerMichael Kerrisk <mtk.manpages@gmail.com>
Wed, 9 Sep 2020 12:19:44 +0000 (14:19 +0200)
When calling msgrcv() with the MSG_COPY flag, it will report
EINVAL error even we if have disabled CONFIG_CHECKPOINT_RESTORE.
ENOSYS will be reported only if we also specify the IPC_NOWAIT
flag.

[mtk: edited commit message]

Notes from mtk:

The relevant kernel code is this:

[[
#ifdef CONFIG_CHECKPOINT_RESTORE
...
#else
static inline struct msg_msg *prepare_copy(void __user *buf, size_t bufsz)
{
        return ERR_PTR(-ENOSYS);
}

...
static long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long
msgtyp, int msgflg,
               long (*msg_handler)(void __user *, struct msg_msg *, size_t))
{
...
        if (msgflg & MSG_COPY) {
                if ((msgflg & MSG_EXCEPT) || !(msgflg & IPC_NOWAIT))
                        return -EINVAL;
                copy = prepare_copy(buf, min_t(size_t, bufsz, ns->msg_ctlmax));
...
}
]]

We'll only hit the ENOSYS error if:
(1) MSG_COPY was specified;
(2) IPC_NOWAIT was not specified; and
(3) CONFIG_CHECKPOINT_RESTORE was not enabled.

Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
man2/msgop.2

index 373e53aa751fbcd2f65c3f511620e1d6cca6a73c..e559097a7f2912478fc541ee8e1d48469e800679 100644 (file)
@@ -467,7 +467,9 @@ and the queue contains less than
 messages.
 .TP
 .BR ENOSYS " (since Linux 3.8)"
-.I MSG_COPY
+.B IPC_NOWAIT
+and
+.B MSG_COPY
 was specified in
 .IR msgflg ,
 and this kernel was configured without