Re: [PATCH] msgop.2: Add restriction on ENOSYS error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/9/20 1:14 PM, Yang Xu wrote:
> Hi Michael
> 
>> Hello Yang Xu,
>>
>> On Wed, 9 Sep 2020 at 05:57, Yang Xu <xuyang2018.jy@xxxxxxxxxxxxxx> wrote:
>>>
>>> When calling msgrcv with MSG_COPY flag on 3.8 or new kernel, it will
>>> report EINVAL error even we have disabled CONFIG_CHECKPOINT_RESTORE.
>>> It also needs to specify IPC_NOWAIT flag.
>>>
>>> Signed-off-by: Yang Xu <xuyang2018.jy@xxxxxxxxxxxxxx>
>>> ---
>>>   man2/msgop.2 | 4 +++-
>>>   1 file changed, 3 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/man2/msgop.2 b/man2/msgop.2
>>> index 373e53aa7..e559097a7 100644
>>> --- a/man2/msgop.2
>>> +++ b/man2/msgop.2
>>> @@ -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
>>> --
>>> 2.23.0
>>
>> My apologies, I have a little bit of trouble to understand your commit
>> message, but the patch does seem to be wrong, at least as I understand
>> the code:
>>
>> [[
>> #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));
> 
> The #ifdef CONFIG_CHECKPOINT_RESTORE only affected prepare_copy function 
> and the EINVAL judgment is not included in #ifdef.
> So, if current kernel config disables CONFIG_CHECKPOINT_RESTORE, Using 
> MSG_COPY without IPC_NOWAIT will still hit EINVAL error firstly and 
> doesn't run into  prepare_copy function to hit ENOSYS error.

Ahh -- now I see what you mean.

Thanks,

Michael


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/



[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux