puzzle of ioctl decode in file_ioctl.c and userfaultfd.c
jingpiao chen
chenjingpiao at gmail.com
Sun Dec 11 11:21:12 UTC 2016
Version:4.14-ab28d7f1e5ab9b51f5708741bd13f92e768123d4
1.file_ioctl.c:130
125 int
126 file_ioctl(struct tcb *tcp, const unsigned int code, const long arg)
127 {
128 switch (code) {
129 case FICLONE: /* W */
130 tprintf(", %d", (int) arg);
131 break;
Why print the pointer, not the pointer point to?
I think it should like sock.c: 230:
230#ifdef SIOCATMARK
231 case SIOCATMARK:
232#endif
233 if (entering(tcp))
234 return 0;
235 tprints(", ");
236 printnum_int(tcp, arg, "%d");
237 break;
2.userfaultfd.c:126
126 case UFFDIO_UNREGISTER:
127 case UFFDIO_WAKE: {
128 struct uffdio_range ura;
129 tprints(", ");
130 if (!umove_or_printaddr(tcp, arg, &ura))
131 tprintf_uffdio_range(&ura);
132 return RVAL_DECODED | 1;
133 }
/usr/include/linux/userfaultfd.h:
51 #define UFFDIO_UNREGISTER _IOR(UFFDIO, _UFFDIO_UNREGISTER, \
52 struct uffdio_range)
53 #define UFFDIO_WAKE _IOR(UFFDIO, _UFFDIO_WAKE, \
54 struct uffdio_range)
UFFDIO_UNREGISTER and UFFDIO_WAKE are read data, why it get data
when entering.
I means it should replace by:
127 case UFFDIO_UNREGISTER:
128 case UFFDIO_WAKE: {
129 if (entering(tcp))
130 return 0;
131
132 struct uffdio_range ura;
133 tprints(", ");
134 if (!umove_or_printaddr(tcp, arg, &ura))
135 tprintf_uffdio_range(&ura);
136 return RVAL_DECODED | 1;
137 }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20161211/a0219733/attachment.html>
More information about the Strace-devel
mailing list