<div dir="ltr"><div class="gmail_extra"><div class="gmail_extra">On Tue, Jun 13, 2017 at 07:10:13PM +0300, Dmitry V. Levin wrote:</div><div class="gmail_extra">> On Tue, Jun 13, 2017 at 07:04:21PM +0800, JingPiao Chen wrote:</div><div class="gmail_extra">> > +static void</div><div class="gmail_extra">> > +test_unix_diag_req(const int fd)</div><div class="gmail_extra">> > +{</div><div class="gmail_extra">> > ...</div><div class="gmail_extra">> > + /* short read of unix_diag_req */</div><div class="gmail_extra">> > + nlh = nlh0 - (sizeof(*req) - 1);</div><div class="gmail_extra">> > + memmove(nlh, nlh0 - sizeof(*req), NLMSG_HDRLEN + sizeof(*req) - 1);</div><div class="gmail_extra">> > +</div><div class="gmail_extra">> > + rc = sendto(fd, nlh, NLMSG_HDRLEN + sizeof(*req), MSG_DONTWAIT,</div><div class="gmail_extra">> > +    NULL, 0);</div><div class="gmail_extra">> > +</div><div class="gmail_extra">> > + printf("sendto(%d, {{len=%u, type=SOCK_DIAG_BY_FAMILY"</div><div class="gmail_extra">> > +       ", flags=NLM_F_REQUEST, seq=0, pid=0}, {family=AF_UNIX, %p}}"</div><div class="gmail_extra">> > +       ", %u, MSG_DONTWAIT, NULL, 0) = %s\n",</div><div class="gmail_extra">> > +       fd, NLMSG_HDRLEN + (unsigned int) sizeof(*req),</div><div class="gmail_extra">> > +       NLMSG_DATA(nlh) + 1,</div><div class="gmail_extra">> > +       NLMSG_HDRLEN + (unsigned int) sizeof(*req),</div><div class="gmail_extra">> > +       sprintrc(rc));</div><div class="gmail_extra">> > +}</div><div class="gmail_extra">> > </div><div class="gmail_extra">> > When (sizeof(*req) - 1 - sizeof(*family) > DEFAULT_STRLEN), the test will</div><div class="gmail_extra">> > fail.</div><div class="gmail_extra">> </div><div class="gmail_extra">> Why?  In this part of the test strace is expected to print a pointer,</div><div class="gmail_extra">> not a string, so it shouldn't be affected by DEFAULT_STRLEN.</div><div class="gmail_extra">This fault appear when call test_inet_diag_req.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Call stack is decode_inet_diag_req -->> decode_family -->> printstrn</div><div class="gmail_extra">len = sizeof(*req) - 1 - sizeof(*family),</div><div class="gmail_extra">When sizeof(*req) - 1 - sizeof(*family) > DEFAULT_STRLEN, umoven will</div><div class="gmail_extra">return true, because: (util.c: 770)</div><div class="gmail_extra">size = max_strlen + 1;</div><div class="gmail_extra">if (size > len)</div><div class="gmail_extra"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>size = len;</div><div class="gmail_extra"><br></div><div class="gmail_extra">--</div><div class="gmail_extra">JingPiao Chen</div></div></div>