On Wed, Jul 19, 2017 at 11:07:19AM +0800, JingPiao Chen wrote:
> Extended ACK reporting introduced by linux kernel commit
> v4.11-rc5-1382-g2d4bc93.
> 
> * netlink.h (NLM_F_CAPPED): New macro.
> * netlink.c (decode_payload): Pass
> nlmsghdr->nlmsg_flags & NLM_F_CAPPED to decode_nlmsgerr.
> (decode_nlmsgerr): Adjust the length pass to
> decode_nlmsghdr_with_payload.
> ---
>  netlink.c | 14 +++++++++++---
>  netlink.h |  4 ++++
>  2 files changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/netlink.c b/netlink.c
> index d3ad8b0..122422b 100644
> --- a/netlink.c
> +++ b/netlink.c
> @@ -297,7 +297,8 @@ decode_nlmsgerr(struct tcb *const tcp,
>               const int fd,
>               const int family,
>               kernel_ulong_t addr,
> -             kernel_ulong_t len)
> +             kernel_ulong_t len,
> +             const bool capped)
>  {
>       struct nlmsgerr err;
>  
> @@ -320,10 +321,16 @@ decode_nlmsgerr(struct tcb *const tcp,
>       len -= offsetof(struct nlmsgerr, msg);
>  
>       if (len) {
> +             unsigned int payload = len;
> +
>               tprints(", msg=");
>               if (fetch_nlmsghdr(tcp, &err.msg, addr, len)) {
> +                     payload = capped ? sizeof(err.msg) : err.msg.nlmsg_len;

Subsequent decode_nlmsghdr_with_payload call already does all necessary
checks, why do you bother with err.msg.nlmsg_len here?

> +                     if (payload > len)
> +                             payload = len;

Consider this instead:

                const unsigned int payload =
                        (capped && sizeof(err.msg) < len) ? sizeof(err.msg) : 
len;

> +
>                       decode_nlmsghdr_with_payload(tcp, fd, family,
> -                                                  &err.msg, addr, len);
> +                                                  &err.msg, addr, payload);


-- 
ldv

Attachment: signature.asc
Description: PGP signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to