<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<div dir="auto">
<div>Args are used to get function result<br>
<div class="gmail_extra"><br>
<div class="gmail_quote">5 &#1076;&#1077;&#1082;. 2016 &#1075;. 10:53 PM &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1100; Pavel Emelianov &lt;xemul@virtuozzo.com&gt; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083;:<br type="attribution">
<blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><font size="2"><span style="font-size:10pt"></span></font>
<div>On 12/06/2016 12:15 AM, Cyrill Gorcunov wrote:<br>
&gt; Simply run tracee from specfied IP assuming<br>
&gt; it's arelady have trapping instruction in<br>
&gt; stream.<br>
&gt; <br>
&gt; It's unsafe low-level function use with caution.<br>
&gt; <br>
&gt; Signed-off-by: Cyrill Gorcunov &lt;gorcunov@openvz.org&gt;<br>
&gt; ---<br>
&gt;&nbsp; compel/include/uapi/infect.h |&nbsp; 1 &#43;<br>
&gt;&nbsp; compel/src/lib/infect.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 11 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;<br>
&gt;&nbsp; 2 files changed, 12 insertions(&#43;)<br>
&gt; <br>
&gt; diff --git a/compel/include/uapi/infect.h b/compel/include/uapi/infect.h<br>
&gt; index 174c197bba1c..7b88a5634c5e 100644<br>
&gt; --- a/compel/include/uapi/infect.h<br>
&gt; &#43;&#43;&#43; b/compel/include/uapi/infect.h<br>
&gt; @@ -73,6 &#43;73,7 @@ extern int compel_syscall(struct parasite_ctl *ctl, int nr, unsigned long *ret,<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long arg5,<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long arg6);<br>
&gt;&nbsp; extern int compel_run_in_thread(struct parasite_thread_ctl *tctl, unsigned int cmd);<br>
&gt; &#43;extern int compel_run_at(struct parasite_ctl *ctl, unsigned long ip, user_regs_struct_t *ret_regs);<br>
&gt;&nbsp; <br>
&gt;&nbsp; /*<br>
&gt;&nbsp;&nbsp; * The PTRACE_SYSCALL will trap task twice -- on<br>
&gt; diff --git a/compel/src/lib/infect.c b/compel/src/lib/infect.c<br>
&gt; index fd92ee5d1da6..72cf20cdcba1 100644<br>
&gt; --- a/compel/src/lib/infect.c<br>
&gt; &#43;&#43;&#43; b/compel/src/lib/infect.c<br>
&gt; @@ -590,6 &#43;590,17 @@ int compel_execute_syscall(struct parasite_ctl *ctl,<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return err;<br>
&gt;&nbsp; }<br>
&gt;&nbsp; <br>
&gt; &#43;int compel_run_at(struct parasite_ctl *ctl, unsigned long ip, user_regs_struct_t *ret_regs)<br>
<br>
What's the use in ret_regs argument for a caller?<br>
<br>
&gt; &#43;{<!-- --><br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; user_regs_struct_t regs = ctl-&gt;orig.regs;<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; int ret;<br>
&gt; &#43;<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; ret = parasite_run(ctl-&gt;rpid, PTRACE_CONT, ip, 0, &amp;regs, &amp;ctl-&gt;orig);<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; if (!ret)<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = parasite_trap(ctl, ctl-&gt;rpid, ret_regs ? ret_regs : &amp;regs, &amp;ctl-&gt;orig);<br>
&gt; &#43;&nbsp;&nbsp;&nbsp;&nbsp; return ret;<br>
&gt; &#43;}<br>
&gt; &#43;<br>
&gt;&nbsp; static int accept_tsock(struct parasite_ctl *ctl)<br>
&gt;&nbsp; {<!-- --><br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int sock;<br>
&gt; <br>
<br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</body>
</html>