From: Dmitry V. L. <ld...@al...> - 2007-03-18 14:25:43
|
2007-01-12 Dmitry V. Levin <ld...@al...> * sock.c (sock_ioctl): Check umove() return code. --- sock.c +++ sock.c @@ -93,8 +93,8 @@ sock_ioctl(struct tcb *tcp, long code, long arg) =20 if (entering(tcp)) { if (code =3D=3D SIOCGIFCONF) { - umove(tcp, tcp->u_arg[2], &ifc); - if (ifc.ifc_buf =3D=3D NULL) + if (umove(tcp, tcp->u_arg[2], &ifc) >=3D 0 + && ifc.ifc_buf =3D=3D NULL) tprintf(", {%d -> ", ifc.ifc_len); else tprintf(", {"); @@ -146,8 +146,9 @@ sock_ioctl(struct tcb *tcp, long code, long arg) case SIOCGIFHWADDR: case SIOCGIFTXQLEN: case SIOCGIFMAP: - umove(tcp, tcp->u_arg[2], &ifr); - if (syserror(tcp)) { + if (umove(tcp, tcp->u_arg[2], &ifr) < 0) + tprintf(", %#lx", tcp->u_arg[2]); + else if (syserror(tcp)) { if (code =3D=3D SIOCGIFNAME) tprintf(", {ifr_index=3D%d, ifr_name=3D???}", ifr.ifr_ifindex); else @@ -223,7 +224,10 @@ sock_ioctl(struct tcb *tcp, long code, long arg) } return 1; case SIOCGIFCONF: - umove(tcp, tcp->u_arg[2], &ifc); + if (umove(tcp, tcp->u_arg[2], &ifc) < 0) { + tprintf("???}"); + return 1; + } tprintf("%d, ", ifc.ifc_len); if (syserror(tcp)) { tprintf("%lx", (unsigned long) ifc.ifc_buf); --=20 ldv |