<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 10, 2018 at 7:49 PM Dmitry V. Levin <<a href="mailto:ldv@altlinux.org">ldv@altlinux.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Mon, Jul 09, 2018 at 12:11:32AM +0800, Zhibin Li wrote:<br>
[...]<br>
> diff --git a/tests/quotactl.h b/tests/quotactl.h<br>
> index 352f9270..087747cc 100644<br>
> --- a/tests/quotactl.h<br>
> +++ b/tests/quotactl.h<br>
> @@ -78,6 +78,7 @@ enum check_quotactl_flags {<br>
>       CQF_ADDR_CB   = 1 << CQF_ADDR_CB_BIT,<br>
>  };<br>
>  <br>
> +static const char *errstr;<br>
>  <br>
>  static inline void<br>
>  check_quota(uint32_t flags, int cmd, const char *cmd_str,<br>
> @@ -116,6 +117,21 @@ check_quota(uint32_t flags, int cmd, const char *cmd_str,<br>
>       va_end(ap);<br>
>  <br>
>       rc = syscall(__NR_quotactl, cmd, special, id, addr);<br>
> +<br>
> +     errstr = sprintrc(rc);<br>
> +<br>
> +#ifdef INJECT_RETVAL<br>
> +     if (rc != INJECT_RETVAL)<br>
> +             error_msg_and_fail("Got a return value of %ld != %d",<br>
> +                                rc, INJECT_RETVAL);<br>
> +<br>
> +     static char inj_errstr[4096];<br>
> +<br>
> +     snprintf(inj_errstr, sizeof(inj_errstr), "%s (INJECTED)", errstr);<br>
> +     errstr = inj_errstr;<br>
> +     addr_cb_arg = 0;<br>
<br>
Why addr_cb_arg is being cleared here?<br></blockquote><div>Because the condition</div><div>if (((rc != 0) && out_arg) || (out_arg > 1)) {</div><div>        printf("%p", qs);</div><div>        return;</div><div>}</div><div>in functions print_xquota_stat() and print_xquota_statv() in</div><div>tests/quotactl-xfs.c will be true if injection is working (rc = 42) and </div><div>out_arg is true at the same time. addr_cb_arg is a pointer which is</div><div>passed to paramter void *arg in the two functions mentioned above. And then</div><div><br></div><div>long out_arg = (long) arg; </div><div><br></div><div>As I see, if out_arg is not cleared in the injection, then all the structures</div><div>and other fields will not be printed, which mismatches the output of strace</div><div>itself. I thought addr_cb_arg is prepared for this purpose but am I</div><div>misunderstaing? Is it going to be used somewhere else?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
-- <br>
ldv<br>
</blockquote></div></div>