On Thu, Feb 28, 2019 at 07:36:29AM -0800, Richard Cochran wrote:
> On Thu, Feb 28, 2019 at 09:22:22PM +0800, Hangbin Liu wrote:
> > v3: a) Do not make rtnl_buf global as it may be freed by calling 
> > rtnl_close()
> >        while we are using it in rtnl_link_status()
> 
> This fix is wrong.  You added a call to rtnl_close() for (AFAICT) no
> good reason.  That is the bug.

Cause there is a genl_open() in get_team_active_iface().
> 
> 
> >  int rtnl_link_status(int fd, char *device, rtnl_callback cb, void *ctx)
> >  {
> 
> >     index = if_nametoindex(device);
> > +
> > +   rtnl_buf = malloc(BUF_SIZE);
> >     if (!rtnl_buf) {
> > -           rtnl_len = 4096;
> > -           rtnl_buf = malloc(rtnl_len);
> > -           if (!rtnl_buf) {
> > -                   pr_err("rtnl: low memory");
> > -                   return -1;
> 
> The original code avoids calling malloc on every single invocation of
> rtnl_link_status(), but you have removed that.  This needs some kind
> of justification.

Oh, I got what you mean. OK, how about just close the fd directly in
get_team_active_iface() since we didn't use rtnl_buf there. Then I
can move this check back.

I will post a new patch for you reviewing.

Thanks
Hangbin
> 
> > -           }
> > +           pr_err("rtnl: low memory");
> > +           goto out;
> >     }
> 
> > +static int get_team_active_iface(int master_index)
> > +{
> > +   struct rtattr *tb[TEAM_ATTR_MAX+1];
> > +   struct genlmsghdr *gnlh;
> > +   struct nlmsghdr *nlh;
> > +   char msg[BUF_SIZE];
> > +   int fd, gf_id;
> > +   int len = -1;
>       ...
> 
> > +no_info:
> > +   rtnl_close(fd);
> > +   return len;
> > +}
> 
> Here len is -1, as an error flag.  Why simply propagate that error
> correct up the call stack?
> 
> No need for rtnl_close() here.
> 
> Thanks,
> Richard
> 


_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to