summaryrefslogtreecommitdiffstats
path: root/results/classifier/111/review/1893003
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/111/review/1893003')
-rw-r--r--results/classifier/111/review/1893003108
1 files changed, 108 insertions, 0 deletions
diff --git a/results/classifier/111/review/1893003 b/results/classifier/111/review/1893003
new file mode 100644
index 00000000..c86dd986
--- /dev/null
+++ b/results/classifier/111/review/1893003
@@ -0,0 +1,108 @@
+other: 0.112
+semantic: 0.107
+debug: 0.088
+permissions: 0.086
+device: 0.082
+graphic: 0.075
+PID: 0.066
+performance: 0.065
+boot: 0.064
+files: 0.056
+vnc: 0.056
+socket: 0.056
+KVM: 0.046
+network: 0.042
+files: 0.196
+debug: 0.139
+semantic: 0.114
+PID: 0.101
+device: 0.080
+other: 0.080
+network: 0.073
+performance: 0.054
+boot: 0.043
+socket: 0.036
+permissions: 0.028
+graphic: 0.021
+vnc: 0.020
+KVM: 0.015
+
+qemu linux-user doesn't translate host/target data for iovec I/O
+
+When using iovec I/O functions (like `readv`), no data translation happens. I'm hitting this issue with libevent upon constructing a bufferevent over an inotify descriptor, and then building for either ppc64 or s390x (both big-endian) on x86_64 (little-endian) and running resulting code with qemu-ppc64 or qemu-s390x on Gentoo using latest QEMU version available (5.0.0-r2).
+
+The code in question is in https://github.com/transmission/transmission/blob/master/libtransmission/watchdir-inotify.c (`tr_watchdir_inotify_new`, `tr_watchdir_inotify_on_event`).
+
+While `read` syscall is handled properly, `readv` (which libevent is using in my case) doesn't have any logic to call `host_to_target_data_inotify` or any other translation function, leaving inotify data unchanged (with values in little-endian), which then leads to unit test failures. Quoting `do_syscall1` implementation bits for the reference:
+
+---8<---begin---
+ case TARGET_NR_read:
+ if (arg2 == 0 && arg3 == 0) {
+ return get_errno(safe_read(arg1, 0, 0));
+ } else {
+ if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0)))
+ return -TARGET_EFAULT;
+ ret = get_errno(safe_read(arg1, p, arg3));
+ if (ret >= 0 &&
+ fd_trans_host_to_target_data(arg1)) {
+ ret = fd_trans_host_to_target_data(arg1)(p, ret);
+ }
+ unlock_user(p, arg2, ret);
+ }
+ return ret;
+...
+ case TARGET_NR_readv:
+ {
+ struct iovec *vec = lock_iovec(VERIFY_WRITE, arg2, arg3, 0);
+ if (vec != NULL) {
+ ret = get_errno(safe_readv(arg1, vec, arg3));
+ unlock_iovec(vec, arg2, arg3, 1);
+ } else {
+ ret = -host_to_target_errno(errno);
+ }
+ }
+ return ret;
+---8<---end---
+
+To reiterate, the issue is not only with `readv` but with other iovec functions as well.
+
+The attached patch fixes the issue for me, but is incomplete (and not thoroughly tested) as I've only implemented inotify data translation for readv syscall.
+
+The QEMU project is currently moving its bug tracking to another system.
+For this we need to know which bugs are still valid and which could be
+closed already. Thus we are setting the bug state to "Incomplete" now.
+
+If the bug has already been fixed in the latest upstream version of QEMU,
+then please close this ticket as "Fix released".
+
+If it is not fixed yet and you think that this bug report here is still
+valid, then you have two options:
+
+1) If you already have an account on gitlab.com, please open a new ticket
+for this problem in our new tracker here:
+
+ https://gitlab.com/qemu-project/qemu/-/issues
+
+and then close this ticket here on Launchpad (or let it expire auto-
+matically after 60 days). Please mention the URL of this bug ticket on
+Launchpad in the new ticket on GitLab.
+
+2) If you don't have an account on gitlab.com and don't intend to get
+one, but still would like to keep this ticket opened, then please switch
+the state back to "New" or "Confirmed" within the next 60 days (other-
+wise it will get closed as "Expired"). We will then eventually migrate
+the ticket automatically to the new system (but you won't be the reporter
+of the bug in the new system and thus you won't get notified on changes
+anymore).
+
+Thank you and sorry for the inconvenience.
+
+
+
+This is an automated cleanup. This bug report has been moved to QEMU's
+new bug tracker on gitlab.com and thus gets marked as 'expired' now.
+Please continue with the discussion here:
+
+ https://gitlab.com/qemu-project/qemu/-/issues/426
+
+