<div dir="ltr"><div>sock.c: 150</div><div><br></div><div>150         if (syserror(tcp) || umove(tcp, addr, &ifc) < 0) {</div><div>151                 if (ifc.ifc_buf)</div><div>152                         tprints("}");</div><div>153                 else</div><div>154                         printaddr(addr);</div><div>155                 return RVAL_DECODED | 1;</div><div>156         }</div><div><br></div><div>Second enter function decode_ifconf(), if syserror(tcp) is true, </div><div>variable ifc is garbage value. "if (ifc.ifc_buf)" may be wrong.</div><div>example:</div><div><br></div><div>int main(void)</div><div>{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>struct ifconf ifc;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>ioctl(-1, SIOCGIFCONF, &ifc);</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>return 0;</div><div>}</div><div>strace -eioctl output:</div><div>ioctl(-1, SIOCGIFCONF, {41958240x7ffc354f9bc0) = -1 EBADF (Bad file descriptor)</div><div><br></div><div><div>From 5b2d4f12d61e5a03212de948508e830c9aeeef87 Mon Sep 17 00:00:00 2001</div><div>From: JingPiao Chen <<a href="mailto:chenjingpiao@gmail.com">chenjingpiao@gmail.com</a>></div><div>Date: Mon, 19 Dec 2016 23:08:09 +0800</div><div>Subject: [PATCH 1/2] sock: fix bitwise OR operation short circuit</div><div><br></div><div>* sock.c (decode_ifconf): Exchange the place of syserror() and umove().</div><div>---</div><div> sock.c | 2 +-</div><div> 1 file changed, 1 insertion(+), 1 deletion(-)</div><div><br></div><div>diff --git a/sock.c b/sock.c</div><div>index cf13896..0bdb7a9 100644</div><div>--- a/sock.c</div><div>+++ b/sock.c</div><div>@@ -147,7 +147,7 @@ decode_ifconf(struct tcb *tcp, const long addr)</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">            </span>return 1;</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">    </span>}</div><div> </div><div>-<span class="gmail-Apple-tab-span" style="white-space:pre">    </span>if (syserror(tcp) || umove(tcp, addr, &ifc) < 0) {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>if (umove(tcp, addr, &ifc) < 0 || syserror(tcp)) {</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">            </span>if (ifc.ifc_buf)</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                     </span>tprints("}");</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">              </span>else</div><div>-- </div><div>2.7.4</div></div><div><br></div></div>