On Mon, Jun 26, 2017 at 03:13:42AM +0300, Dmitry V. Levin wrote:
> On Sat, Jun 24, 2017 at 01:35:18PM +0800, JingPiao Chen wrote:
> > * netlink.c (print_nlmsghdr): Remove condition
> > nlmsghdr->nlmsg_type < NLMSG_MIN_TYPE.
> > (decode_nlmsg_type): Add condition type >= NLMSG_MIN_TYPE.
> > (decode_nlmsg_flags): Add condition type < NLMSG_MIN_TYPE.
> > (decode_netlink_sock_diag): Add condition
> > nlmsghdr->nlmsg_type < NLMSG_MIN_TYPE.
> > ---
> >  netlink.c           | 13 ++++++++-----
> >  netlink_sock_diag.c |  3 +++
> >  2 files changed, 11 insertions(+), 5 deletions(-)
> > 
> > diff --git a/netlink.c b/netlink.c
> > index 87b389c..d990fad 100644
> > --- a/netlink.c
> > +++ b/netlink.c
> > @@ -177,7 +177,7 @@ decode_nlmsg_type(const uint16_t type, const unsigned 
> > int family)
> >     const struct xlat *xlat = netlink_types;
> >     const char *dflt = "NLMSG_???";
> >  
> > -   if (family < ARRAY_SIZE(nlmsg_types)) {
> > +   if (type >= NLMSG_MIN_TYPE && family < ARRAY_SIZE(nlmsg_types)) {
> >             if (nlmsg_types[family].decoder)
> >                     decoder = nlmsg_types[family].decoder;
> >             if (nlmsg_types[family].xlat)
> > @@ -194,6 +194,11 @@ decode_nlmsg_flags(const uint16_t flags, const 
> > uint16_t type, const int family)
> >  {
> >     const struct xlat *table = NULL;
> >  
> > +   if (type < NLMSG_MIN_TYPE) {
> > +           printflags(netlink_flags, flags, "NLM_F_???");
> > +           return;
> > +   }
> > +
> 
> There is another printflags invocation in this function already,
> can this duplication be avoided?

Can delete, goto statement, big if statement, change family, to tell the
truth, I do like these solution.
Finally, I replace it with goto statement.

> 
> >     switch (family) {
> >     case NETLINK_SOCK_DIAG:
> >             table = netlink_get_flags;
> > @@ -246,10 +251,8 @@ print_nlmsghdr(struct tcb *tcp,
> >  
> >     tprintf("{len=%u, type=", nlmsghdr->nlmsg_len);
> >  
> > -   const int hdr_family = (nlmsghdr->nlmsg_type < NLMSG_MIN_TYPE)
> > -                          ? NL_FAMILY_DEFAULT
> > -                          : (family != NL_FAMILY_DEFAULT
> > -                             ? family : get_fd_nl_family(tcp, fd));
> > +   const int hdr_family = family != NL_FAMILY_DEFAULT
> > +                          ? family : get_fd_nl_family(tcp, fd);
> 
> Is the family needed for any nlmsg_type?  What about NLMSG_ERROR?

Changed, do not delete previous condition,
add nlmsghdr->nlmsg_type != NLMSG_DONE.

        const int hdr_family = (nlmsghdr->nlmsg_type < NLMSG_MIN_TYPE
                                && nlmsghdr->nlmsg_type != NLMSG_DONE)
                               ? NL_FAMILY_DEFAULT
                               : (family != NL_FAMILY_DEFAULT
                                  ? family : get_fd_nl_family(tcp, fd));

--
JingPiao Chen

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