summary refs log tree commit diff stats
path: root/results/classifier/105/network/1814352
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/105/network/1814352')
-rw-r--r--results/classifier/105/network/181435280
1 files changed, 80 insertions, 0 deletions
diff --git a/results/classifier/105/network/1814352 b/results/classifier/105/network/1814352
new file mode 100644
index 000000000..8c47bb32f
--- /dev/null
+++ b/results/classifier/105/network/1814352
@@ -0,0 +1,80 @@
+network: 0.882
+graphic: 0.879
+vnc: 0.870
+other: 0.865
+socket: 0.857
+semantic: 0.844
+device: 0.834
+instruction: 0.833
+mistranslation: 0.801
+boot: 0.776
+KVM: 0.767
+assembly: 0.725
+
+SIOCGIFNAME takes a struct ifreq not an integer
+
+The ioctl SIOCGIFNAME takes a pointer to a struct ifreq, not an integer.  This leads to if_indextoname() not correctly returning interface names (well, not if they're longer than 4 characters including the trailing NULL ;-).
+
+This is observed on v3.1.0.
+
+The following one-line patch will be sent to the qemu-devel mailing list:
+
+"""
+diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
+index ae8951625f..37501f575c 100644
+--- a/linux-user/ioctls.h
++++ b/linux-user/ioctls.h
+@@ -178,7 +178,7 @@
+ #endif /* CONFIG_USBFS */
+ 
+   IOCTL(SIOCATMARK, IOC_R, MK_PTR(TYPE_INT))
+-  IOCTL(SIOCGIFNAME, IOC_RW, MK_PTR(TYPE_INT))
++  IOCTL(SIOCGIFNAME, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_int_ifreq)))
+   IOCTL(SIOCGIFFLAGS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_short_ifreq)))
+   IOCTL(SIOCSIFFLAGS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_short_ifreq)))
+   IOCTL(SIOCGIFADDR, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_sockaddr_ifreq)))
+"""
+
+Your suggested fix looks good -- did you want to send it to qemu-devel with a suitable Signed-off-by: line ?
+
+
+Sure.  Looking at HEAD, and even the surrounding the lines, I think I
+should have tried STRUCT_short_ifreq instead of STRUCT_int_ifreq, though
+I'm not sure what the real difference would be.
+
+I'll try to test internally with the _short_ version and if that works send
+that.
+
+
+On Wed, 10 Apr 2019 at 01:26, Erik Kline <email address hidden> wrote:
+> Sure.  Looking at HEAD, and even the surrounding the lines, I think I
+> should have tried STRUCT_short_ifreq instead of STRUCT_int_ifreq, though
+> I'm not sure what the real difference would be.
+
+The multiple STRUCT_*_ifreq are working around the fact that
+our MK_STRUCT infrastructure can't handle unions. The struct
+ifreq is a char array followed by a union whose members are
+various different types. You should use the STRUCT_*_ifreq
+corresponding to whatever type the union field used by this
+particular ioctl is. For SIOCGIFNAME the ifr_ifindex is read,
+and that's an int, so you want STRUCT_int_ifreq. (If you used
+the 'short' version by mistake this would probably break for the
+case of big-endian guest and little-endian host or vice-versa
+because we'd swap the wrong amount of data.)
+
+thanks
+-- PMM
+
+
+Patch sent to the list.  Apologies for the delay.
+
+Please let me know if further work or another patch submission is required.
+
+Please let me know if further work or another patch submission is required.
+
+https://git.qemu.org/?p=qemu.git;a=commit;h=43330b7169ae76222472a4b20c7f4db9d8880527
+
+Thank you, all.
+
+Released as part of v4.1.0.
+