ntsync: absolute MONOTONIC timeout ignores time namespace offset
Maoyi Xie <[email protected]> Mon, 18 May 2026 18:21:08 +0800
| Newsgroups | gmane.linux.kernel,gmane.comp.emulators.wine.devel |
|---|---|
| Message-ID | <CAHPEe=G7A3qcsNJmXpF71iP2UTaQA_p630oYSPNhz4Sob4kJxg@mail.gmail.com> |
--0000000000006a3615065214ecb8 Content-Type: text/plain; charset="UTF-8" Hi all, While reading drivers/misc/ntsync.c I noticed something that might be a time-namespace bug. I would appreciate it if you could take a look and let me know whether this is a real bug, and whether it is worth fixing. ntsync_schedule() takes the user-supplied absolute timeout and hands it to schedule_hrtimeout_range_clock() with HRTIMER_MODE_ABS. For the default CLOCK_MONOTONIC path, it does not call timens_ktime_to_host() first. A process inside a CLOCK_MONOTONIC time namespace computes the absolute timeout in its own clock view. The kernel reads the same value against the host clock. The two differ by the namespace offset. The other absolute-timeout consumers (timerfd, posix-timers, alarmtimer, posix-stubs, futex) all run user-supplied absolute MONOTONIC ktime through timens_ktime_to_host() before hrtimer. ntsync was added post-5.17 and seems to have missed that step. /dev/ntsync is mode 0666, so any user in a time namespace that can open it is affected. The user-visible impact is wrong timeout behaviour for Wine inside a container that sets a CLOCK_MONOTONIC offset. Attached PoC: baseline run elapsed ~100 ms; the --in-timens run inside a -10s namespace elapsed ~0 ms. A candidate fix would call timens_ktime_to_host(clock, timeout) in the else branch (i.e., when NTSYNC_WAIT_REALTIME is not set) before passing the value to schedule_hrtimeout_range_clock(). If this is intentional or already known, please disregard. Otherwise, I am happy to send a [PATCH] or to leave the fix to you. Thank you for your time, and sorry for the noise if this is not actually a bug or has already been spotted. Thanks, Maoyi Xie https://maoyixie.com/ --0000000000006a3615065214ecb8 Content-Type: application/octet-stream; name="poc_ntsync_timens.log" Content-Disposition: attachment; filename="poc_ntsync_timens.log" Content-Transfer-Encoding: base64 Content-ID: <f_mpb1w8nh0> X-Attachment-Id: f_mpb1w8nh0 IyBidWcyNCBQb0MgdmVyaWZpY2F0aW9uIG9uIGxpbnV4LTcuMS1yYzEgKG1haW5saW5lIHZhbmls bGEpCiMKIyBUZXN0IHBsYXRmb3JtOgojICAgcWVtdS1zeXN0ZW0teDg2XzY0IC1lbmFibGUta3Zt IC1zbXAgNCAtbSA0RwojICAgYnpJbWFnZTogdm0vYnVpbGQtNy4xLXJjMS12YW5pbGxhL2FyY2gv eDg2L2Jvb3QvYnpJbWFnZQojICAgcm9vdGZzOiAgdm0vYm9va3dvcm0ucWNvdzIgKGRlYmlhbiBi b29rd29ybSkKIyAgIG50c3luYy5rbzogYnVpbHQgQ09ORklHX05UU1lOQz1tIGZyb20gdGhlIHNh bWUgdHJlZQojCiMgL2Rldi9udHN5bmMgcmVnaXN0ZXJzIHdpdGggbW9kZSAwNjY2LCBzbyBhbnkg dXNlciBpbnNpZGUgdGhlIFZNCiMgKGFuZCBhbnkgY29udGFpbmVyIGV4cG9zaW5nIC9kZXYvbnRz eW5jKSBjYW4gb3BlbiBpdC4KCiMjIyBVbnBhdGNoZWQgKGxpbnV4LTcuMS1yYzEgdmFuaWxsYSkg IyMjCgokIHVuYW1lIC1hCkxpbnV4IG5zcHJvYmUgNy4xLjAtcmMxLTAwMDAxLWcxOTZkOWE5YmZh OWIgIzIgU01QIFBSRUVNUFRfRFlOQU1JQwoKJCBpbnNtb2QgL3Jvb3QvbnRzeW5jLmtvCiQgbHMg LWxhIC9kZXYvbnRzeW5jCmNydy1ydy1ydy0gMSByb290IHJvb3QgMTAsIDI1OCBNYXkgMTcgMTY6 MTkgL2Rldi9udHN5bmMKCiQgLi9wb2NfbnRzeW5jX3RpbWVucyAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBiYXNlbGluZSAobm8gdGltZW5zKQpbcGFyZW50XSBiYXNlbGluZSAobm8gdGltZW5z KQpbd2FpdF0gcmV0PS0xIGVycm5vPTExMCAoQ29ubmVjdGlvbiB0aW1lZCBvdXQpIGVsYXBzZWQ9 MTAwIG1zCgokIC4vcG9jX250c3luY190aW1lbnMgLS1pbi10aW1lbnMgICAgICAgICAgICAgICMg aW5zaWRlIENMT0NLX01PTk9UT05JQyAtMTBzCltjaGlsZF0gaW4gQ0xPQ0tfTU9OT1RPTklDIC0x MHMgdGltZSBuYW1lc3BhY2UKW3dhaXRdIHJldD0tMSBlcnJubz0xMTAgKENvbm5lY3Rpb24gdGlt ZWQgb3V0KSBlbGFwc2VkPTAgbXMKCiMjIyBQYXRjaGVkIChsaW51eC03LjEtcmMxICsgMDAwMS1u dHN5bmMtdGltZW5zLWZpeC5wYXRjaCkgIyMjCgokIHVuYW1lIC1hCkxpbnV4IG5zcHJvYmUgNy4x LjAtcmMxLTAwMDAxLWcxOTZkOWE5YmZhOWItZGlydHkgIzMgU01QIFBSRUVNUFRfRFlOQU1JQwoK JCBpbnNtb2QgL3Jvb3QvbnRzeW5jLmtvCiQgLi9wb2NfbnRzeW5jX3RpbWVucyAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBiYXNlbGluZSAobm8gdGltZW5zKQpbcGFyZW50XSBiYXNlbGluZSAo bm8gdGltZW5zKQpbd2FpdF0gcmV0PS0xIGVycm5vPTExMCAoQ29ubmVjdGlvbiB0aW1lZCBvdXQp IGVsYXBzZWQ9MTAwIG1zCgokIC4vcG9jX250c3luY190aW1lbnMgLS1pbi10aW1lbnMgICAgICAg ICAgICAgICMgaW5zaWRlIENMT0NLX01PTk9UT05JQyAtMTBzCltjaGlsZF0gaW4gQ0xPQ0tfTU9O T1RPTklDIC0xMHMgdGltZSBuYW1lc3BhY2UKW3dhaXRdIHJldD0tMSBlcnJubz0xMTAgKENvbm5l Y3Rpb24gdGltZWQgb3V0KSBlbGFwc2VkPTEwMCBtcwo= --0000000000006a3615065214ecb8 Content-Type: application/octet-stream; name="poc_ntsync_timens.c" Content-Disposition: attachment; filename="poc_ntsync_timens.c" Content-Transfer-Encoding: base64 Content-ID: <f_mpb1w8nq1> X-Attachment-Id: f_mpb1w8nq1 LyoKICogUG9DOiBudHN5bmMgTlRTWU5DX0lPQ19XQUlUX0FOWSBpZ25vcmVzIHRoZSBDTE9DS19N T05PVE9OSUMKICogICAgICB0aW1lIG5hbWVzcGFjZSBvZmZzZXQuCiAqCiAqIG50c3luYyBwYXNz ZXMgYSB1c2VyLXN1cHBsaWVkIGFic29sdXRlIHRpbWVvdXQgdG8gaHJ0aW1lcgogKiB3aXRoIEhS VElNRVJfTU9ERV9BQlMuIEl0IGRvZXMgbm90IGNhbGwgdGltZW5zX2t0aW1lX3RvX2hvc3QoKQog KiBmaXJzdC4gSW5zaWRlIGEgQ0xPQ0tfTU9OT1RPTklDIHRpbWUgbmFtZXNwYWNlLCB0aGUgdXNl ciB2aWV3CiAqIGFuZCB0aGUgaG9zdCB2aWV3IG9mICJub3ciIGRpZmZlciBieSB0aGUgbmFtZXNw YWNlIG9mZnNldC4KICoKICogQnVpbGQ6IGNjIC1PMCAtZyBwb2NfbnRzeW5jX3RpbWVucy5jIC1v IHBvY19udHN5bmNfdGltZW5zCiAqIFJ1bjogICAuL3BvY19udHN5bmNfdGltZW5zICAgICAgICAg ICAgICAgIyBiYXNlbGluZQogKiAgICAgICAgLi9wb2NfbnRzeW5jX3RpbWVucyAtLWluLXRpbWVu cyAgICMgaW5zaWRlIC0xMHMgdGltZW5zCiAqCiAqIEJhc2VsaW5lOiAgZWxhcHNlZCB+IDEwMCBt cwogKiBJbi10aW1lbnM6IGVsYXBzZWQgfiAwICAgbXMKICovCgojZGVmaW5lIF9HTlVfU09VUkNF CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHNjaGVkLmg+ CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIu aD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiNpbmNsdWRlIDxz eXMvd2FpdC5oPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgoKI2lmbmRlZiBDTE9ORV9ORVdUSU1FCiNkZWZpbmUgQ0xPTkVfTkVX VElNRSAweDAwMDAwMDgwCiNlbmRpZgoKLyogTWlycm9yIG9mIGluY2x1ZGUvdWFwaS9saW51eC9u dHN5bmMuaC4gKi8Kc3RydWN0IG50c3luY19zZW1fYXJncyB7IF9fdTMyIGNvdW50OyBfX3UzMiBt YXg7IH07CnN0cnVjdCBudHN5bmNfd2FpdF9hcmdzIHsKCV9fdTY0IHRpbWVvdXQ7CglfX3U2NCBv YmpzOwoJX191MzIgY291bnQ7CglfX3UzMiBpbmRleDsKCV9fdTMyIGZsYWdzOwoJX191MzIgb3du ZXI7CglfX3UzMiBhbGVydDsKCV9fdTMyIHBhZDsKfTsKCiNkZWZpbmUgTlRTWU5DX0lPQ19DUkVB VEVfU0VNICAgX0lPVyAoJ04nLCAweDgwLCBzdHJ1Y3QgbnRzeW5jX3NlbV9hcmdzKQojZGVmaW5l IE5UU1lOQ19JT0NfV0FJVF9BTlkgICAgIF9JT1dSKCdOJywgMHg4Miwgc3RydWN0IG50c3luY193 YWl0X2FyZ3MpCgpzdGF0aWMgaW50IHJ1bl93YWl0KHZvaWQpCnsKCWludCBmZCA9IG9wZW4oIi9k ZXYvbnRzeW5jIiwgT19SRFdSIHwgT19DTE9FWEVDKTsKCWlmIChmZCA8IDApIHsKCQlmcHJpbnRm KHN0ZGVyciwgIm9wZW4gL2Rldi9udHN5bmM6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwoJCXJl dHVybiAxOwoJfQoKCXN0cnVjdCBudHN5bmNfc2VtX2FyZ3Mgc2EgPSB7IC5jb3VudCA9IDAsIC5t YXggPSAxIH07CglpbnQgc2VtX2ZkID0gaW9jdGwoZmQsIE5UU1lOQ19JT0NfQ1JFQVRFX1NFTSwg JnNhKTsKCWlmIChzZW1fZmQgPCAwKSB7CgkJZnByaW50ZihzdGRlcnIsICJpb2N0bCBDUkVBVEVf U0VNOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKCQlyZXR1cm4gMTsKCX0KCglzdHJ1Y3QgdGlt ZXNwZWMgdHM7CgljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKTsKCV9fdTY0IG5v d19ucyA9IChfX3U2NCl0cy50dl9zZWMgKiAxMDAwMDAwMDAwVUxMICsgdHMudHZfbnNlYzsKCV9f dTY0IHRpbWVvdXRfbnMgPSBub3dfbnMgKyAxMDBVTEwgKiAxMDAwMDAwVUxMOyAvKiArMTAwbXMg Ki8KCglzdHJ1Y3QgbnRzeW5jX3dhaXRfYXJncyB3YSA9IHsKCQkudGltZW91dCA9IHRpbWVvdXRf bnMsCgkJLm9ianMgICAgPSAoX191NjQpKHVpbnRwdHJfdCkmc2VtX2ZkLAoJCS5jb3VudCAgID0g MSwKCQkuaW5kZXggICA9IDAsCgkJLmZsYWdzICAgPSAwLCAgICAgLyogQ0xPQ0tfTU9OT1RPTklD ICovCgkJLm93bmVyICAgPSAwLAoJCS5hbGVydCAgID0gMCwKCX07CgoJc3RydWN0IHRpbWVzcGVj IHQwLCB0MTsKCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdDApOwoJaW50IHJldCA9 IGlvY3RsKGZkLCBOVFNZTkNfSU9DX1dBSVRfQU5ZLCAmd2EpOwoJaW50IGVyciA9IGVycm5vOwoJ Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0MSk7CgoJbG9uZyBtcyA9ICh0MS50dl9z ZWMgLSB0MC50dl9zZWMpICogMTAwMCArCgkJICAodDEudHZfbnNlYyAtIHQwLnR2X25zZWMpIC8g MTAwMDAwMDsKCXByaW50ZigiW3dhaXRdIHJldD0lZCBlcnJubz0lZCAoJXMpIGVsYXBzZWQ9JWxk IG1zXG4iLAoJICAgICAgIHJldCwgZXJyLCBzdHJlcnJvcihlcnIpLCBtcyk7CgoJY2xvc2Uoc2Vt X2ZkKTsKCWNsb3NlKGZkKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IHNldF90aW1lbnMobG9u ZyBtb25vdG9uaWNfb2Zmc2V0X3NlYykKewoJaWYgKHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikgPCAw KSB7CgkJZnByaW50ZihzdGRlcnIsICJ1bnNoYXJlKENMT05FX05FV1VTRVIpOiAlc1xuIiwgc3Ry ZXJyb3IoZXJybm8pKTsKCQlyZXR1cm4gMTsKCX0KCWludCBmZDsKCWlmICgoZmQgPSBvcGVuKCIv cHJvYy9zZWxmL3NldGdyb3VwcyIsIE9fV1JPTkxZKSkgPj0gMCkgewoJCXdyaXRlKGZkLCAiZGVu eSIsIDQpOwoJCWNsb3NlKGZkKTsKCX0KCWlmICgoZmQgPSBvcGVuKCIvcHJvYy9zZWxmL3VpZF9t YXAiLCBPX1dST05MWSkpID49IDApIHsKCQlkcHJpbnRmKGZkLCAiMCAlZCAxIiwgZ2V0dWlkKCkp OwoJCWNsb3NlKGZkKTsKCX0KCWlmICgoZmQgPSBvcGVuKCIvcHJvYy9zZWxmL2dpZF9tYXAiLCBP X1dST05MWSkpID49IDApIHsKCQlkcHJpbnRmKGZkLCAiMCAlZCAxIiwgZ2V0Z2lkKCkpOwoJCWNs b3NlKGZkKTsKCX0KCglpZiAodW5zaGFyZShDTE9ORV9ORVdUSU1FKSA8IDApIHsKCQlmcHJpbnRm KHN0ZGVyciwgInVuc2hhcmUoQ0xPTkVfTkVXVElNRSk6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp OwoJCXJldHVybiAxOwoJfQoKCWZkID0gb3BlbigiL3Byb2Mvc2VsZi90aW1lbnNfb2Zmc2V0cyIs IE9fV1JPTkxZKTsKCWlmIChmZCA8IDApIHsKCQlmcHJpbnRmKHN0ZGVyciwgIm9wZW4gdGltZW5z X29mZnNldHM6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwoJCXJldHVybiAxOwoJfQoJY2hhciBi dWZbNjRdOwoJaW50IG4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAibW9ub3RvbmljICVs ZCAwXG4iLAoJCQkgbW9ub3RvbmljX29mZnNldF9zZWMpOwoJaWYgKHdyaXRlKGZkLCBidWYsIG4p IDwgMCkgewoJCWZwcmludGYoc3RkZXJyLCAid3JpdGUgdGltZW5zX29mZnNldHM6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOwoJCWNsb3NlKGZkKTsKCQlyZXR1cm4gMTsKCX0KCWNsb3NlKGZkKTsK CXJldHVybiAwOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWludCBpbl90 aW1lbnMgPSAwOwoJZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKCQlpZiAoIXN0cmNt cChhcmd2W2ldLCAiLS1pbi10aW1lbnMiKSkKCQkJaW5fdGltZW5zID0gMTsKCX0KCglpZiAoaW5f dGltZW5zKSB7CgkJaWYgKHNldF90aW1lbnMoLTEwKSAhPSAwKQoJCQlyZXR1cm4gMTsKCQkvKiBm b3JrIHNvIGNoaWxkIHJlLWV4ZWNzIGludG8gdGhlIG5ldyB0aW1lIG5hbWVzcGFjZSAqLwoJCXBp ZF90IHBpZCA9IGZvcmsoKTsKCQlpZiAocGlkIDwgMCkgeyBwZXJyb3IoImZvcmsiKTsgcmV0dXJu IDE7IH0KCQlpZiAocGlkID09IDApIHsKCQkJcHJpbnRmKCJbY2hpbGRdIGluIENMT0NLX01PTk9U T05JQyAtMTBzIHRpbWUgbmFtZXNwYWNlXG4iKTsKCQkJcmV0dXJuIHJ1bl93YWl0KCk7CgkJfQoJ CWludCBzdGF0dXM7CgkJd2FpdHBpZChwaWQsICZzdGF0dXMsIDApOwoJCXJldHVybiBXRVhJVFNU QVRVUyhzdGF0dXMpOwoJfQoKCXByaW50ZigiW3BhcmVudF0gYmFzZWxpbmUgKG5vIHRpbWVucylc biIpOwoJcmV0dXJuIHJ1bl93YWl0KCk7Cn0K --0000000000006a3615065214ecb8--