Re: Misleading documentation in Netlink(7) man page / doesn't match with Kernel

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

 



Hi Philipp,

On 2/20/21 11:48 PM, Philipp Schuster wrote:
> Hi Michael,
> 
>> I'm a little unclear. Do you mean that the manual page should include
>> the additional comments?
> 
> 
> Yes, this is true. It must be clear that Netlink error responses,
> i.e. messages with type NLMSG_ERROR (0x2), can be longer than
> sizeof(struct nlmsgerr). In certain circumstances the payload can be longer.
> 
> I appended a patch. If you need further information or the patch in
> a different format, I'm looking forward to solving this with you.
> 
> diff --git a/man7/netlink.7 b/man7/netlink.7
> index c69bb62bf..c8ca5da28 100644
> --- a/man7/netlink.7
> +++ b/man7/netlink.7
> @@ -189,13 +189,25 @@ message signals an error and the payload contains an
>  .I nlmsgerr
>  structure,
>  .B NLMSG_DONE
> -message terminates a multipart message.
> +message terminates a multipart message. Error messages get the
> +original request appened, unless the user requests to cap the
> +error message, and get extra error data if requested.
>  .PP
>  .in +4n
>  .EX
>  struct nlmsgerr {
>      int error;        /* Negative errno or 0 for acknowledgements */
>      struct nlmsghdr msg;  /* Message header that caused the error */
> +    /*
> +     * followed by the message contents unless NETLINK_CAP_ACK was set
> +     * or the ACK indicates success (error == 0).
> +     * For example Generic Netlink message with attributes.
> +     * message length is aligned with NLMSG_ALIGN()
> +     */
> +    /*
> +     * followed by TLVs defined in enum nlmsgerr_attrs
> +     * if NETLINK_EXT_ACK was set
> +     */
>  };
>  .EE
>  .in

Thanks! I applied the patch. Just a side note that the patch
will only apply cleanly (e.g., with 'git am') if there is no
trailing tex (as below).

Thanks

Michael

> I also attached the patch as a file.
> 
> 
> 
> Am Sa., 20. Feb. 2021 um 21:07 Uhr schrieb Michael Kerrisk (man-pages)
> <mtk.manpages@xxxxxxxxx>:
>>
>> Hi Philipp,
>>
>> On Sat, 20 Feb 2021 at 16:25, Philipp Schuster <phip1611@xxxxxxxxx> wrote:
>>>
>>> To whom it may concern,
>>> I'd like to inform you about a bug in the Netlink(7) man page [0].
>>>
>>> It describes struct nlmsgerr the following way:
>>>
>>> struct nlmsgerr {
>>>        int error;        /* Negative errno or 0 for acknowledgements */
>>>        struct nlmsghdr msg;  /* Message header that caused the error */
>>> };
>>>
>>> but according to Kernel code [1] [2] [3] it actually should be:
>>>
>>> struct nlmsgerr {
>>>        int error;        /* Negative errno or 0 for acknowledgements */
>>>        struct nlmsghdr msg;  /* Message header that caused the error */
>>>        /*
>>>         * followed by the message contents unless NETLINK_CAP_ACK was set
>>>         * or the ACK indicates success (error == 0)
>>>         * message length is aligned with NLMSG_ALIGN()
>>>         */
>>>        /*
>>>         * followed by TLVs defined in enum nlmsgerr_attrs
>>>         * if NETLINK_EXT_ACK was set
>>>         */
>>> };
>>>
>>> This discrepancy led to errors implementing at least a Rust library which
>>> made wrong assumptions about the returned value.
>>
>> I'm a little unclear. Do you mean that the manual page should include
>> the additional comments?
>>
>> Thanks,
>>
>> Michael
>>
>>> [0] https://man7.org/linux/man-pages/man7/netlink.7.html
>>> [1] https://elixir.bootlin.com/linux/v5.11/source/include/uapi/linux/netlink.h#L112
>>> [2] https://elixir.bootlin.com/linux/v5.11/source/net/netlink/af_netlink.c#L2416
>>> [3] https://elixir.bootlin.com/linux/v5.11/source/net/netlink/af_netlink.c#L2440
>>>
>>>
>>> Kind regards
>>> --
>>> Philipp Schuster
>>
>>
>>
>> --
>> Michael Kerrisk
>> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
>> Linux/UNIX System Programming Training: http://man7.org/training/
> 
> 
> 
> --
> Philipp Schuster
> 


-- 
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