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