@volter/browser-wali 0.1.201 → 0.1.203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/events.d.ts +0 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +19 -28
- package/dist/events.js.map +1 -1
- package/dist/filesystem-host-session.js +2 -2
- package/dist/filesystem-host-session.js.map +1 -1
- package/dist/filesystem-remote.d.ts.map +1 -1
- package/dist/filesystem-remote.js +1 -0
- package/dist/filesystem-remote.js.map +1 -1
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +29 -15
- package/dist/filesystem.js.map +1 -1
- package/dist/futex-arguments.d.ts +3 -0
- package/dist/futex-arguments.d.ts.map +1 -0
- package/dist/futex-arguments.js +44 -0
- package/dist/futex-arguments.js.map +1 -0
- package/dist/guest-memory-error.d.ts +7 -0
- package/dist/guest-memory-error.d.ts.map +1 -0
- package/dist/guest-memory-error.js +11 -0
- package/dist/guest-memory-error.js.map +1 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +20 -4
- package/dist/memory.js.map +1 -1
- package/dist/network-host.d.ts.map +1 -1
- package/dist/network-host.js +25 -23
- package/dist/network-host.js.map +1 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +44 -51
- package/dist/network.js.map +1 -1
- package/dist/read-vector.d.ts +9 -0
- package/dist/read-vector.d.ts.map +1 -0
- package/dist/read-vector.js +27 -0
- package/dist/read-vector.js.map +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +10 -1
- package/dist/runtime.js.map +1 -1
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +6 -19
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +37 -12
- package/dist/signals.js.map +1 -1
- package/dist/system.d.ts +9 -12
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +35 -29
- package/dist/system.js.map +1 -1
- package/dist/thread-worker.js +15 -8
- package/dist/thread-worker.js.map +1 -1
- package/dist/timerfd.d.ts +7 -0
- package/dist/timerfd.d.ts.map +1 -0
- package/dist/timerfd.js +23 -0
- package/dist/timerfd.js.map +1 -0
- package/dist/write-vector.js +2 -2
- package/dist/write-vector.js.map +1 -1
- package/package.json +1 -1
package/dist/filesystem.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
|
package/dist/filesystem.js
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
// (Copyright 2021, MIT), 862dc0d48acc4134a0088d27ac8f5dd18baba1cd; see ../LICENSE.
|
|
3
3
|
// Storage, shared descriptors and process state remain owned by this kernel.
|
|
4
4
|
import { createWaliDevice, waliDeviceStat } from "./special-files.js";
|
|
5
|
+
import { WaliGuestMemoryError } from "./guest-memory-error.js";
|
|
5
6
|
import { WALI_USER_ID, waliOwnershipAllowed } from "./credentials.js";
|
|
6
7
|
import { realtimeMilliseconds } from "./monotonic-clock.js";
|
|
7
8
|
import { gatherWaliWriteVector } from "./write-vector.js";
|
|
9
|
+
import { captureWaliTimerFdSpec } from "./timerfd.js";
|
|
10
|
+
import { captureWaliReadVector } from "./read-vector.js";
|
|
8
11
|
import { setBrowserFileTimes } from "@volter/browser-runtime/browser-file-times.js";
|
|
9
12
|
import { WaliDescriptionRegistry, WaliProcessDescriptorTable } from "./descriptors.js";
|
|
10
13
|
import { WaliSharedPipeHost, waliNamedPipeInode, waliNamedPipePath } from "./shared-pipes.js";
|
|
@@ -212,6 +215,13 @@ export class WaliFileDescriptorTable {
|
|
|
212
215
|
SYS_getdents64: (fd, pointer, count) => this.getdents64(Number(fd), Number(pointer), Number(count)),
|
|
213
216
|
SYS_fsync: (fd) => this.hasFd(Number(fd)) ? 0n : -9n,
|
|
214
217
|
SYS_fdatasync: (fd) => this.hasFd(Number(fd)) ? 0n : -9n,
|
|
218
|
+
// Valid filesystem descriptions are not timerfds. Network-owned
|
|
219
|
+
// timer descriptions are intercepted before reaching these fallbacks.
|
|
220
|
+
SYS_timerfd_gettime: (fd) => this.hasFd(Number(fd)) ? -22n : -9n,
|
|
221
|
+
SYS_timerfd_settime: (fd, flags, value) => {
|
|
222
|
+
const spec = captureWaliTimerFdSpec(this.options.memory(), Number(flags), Number(value));
|
|
223
|
+
return typeof spec === "bigint" ? spec : this.hasFd(Number(fd)) ? -22n : -9n;
|
|
224
|
+
},
|
|
215
225
|
SYS_flock: (fd, operation) => this.flock(Number(fd), Number(operation)),
|
|
216
226
|
// ADR-0047's handshake; every other prctl answers 0, as before.
|
|
217
227
|
SYS_prctl: (option, operation, pointer, length) => Number(option) === PR_WALI
|
|
@@ -411,11 +421,14 @@ export class WaliFileDescriptorTable {
|
|
|
411
421
|
}
|
|
412
422
|
readCString(pointer) {
|
|
413
423
|
const bytes = this.memoryBytes();
|
|
414
|
-
if (!Number.isSafeInteger(pointer) || pointer
|
|
415
|
-
throw new
|
|
424
|
+
if (!Number.isSafeInteger(pointer) || pointer <= 0 || pointer >= bytes.byteLength)
|
|
425
|
+
throw new WaliGuestMemoryError();
|
|
426
|
+
// Linux v6.12 fs/namei.c getname_flags: PATH_MAX includes the NUL.
|
|
427
|
+
// Reaching the guest memory boundary first is a copy fault, not a long path.
|
|
428
|
+
const limit = Math.min(bytes.byteLength, pointer + 4096);
|
|
416
429
|
const end = bytes.indexOf(0, pointer);
|
|
417
|
-
if (end < 0 || end
|
|
418
|
-
throw new
|
|
430
|
+
if (end < 0 || end >= limit)
|
|
431
|
+
throw new WaliGuestMemoryError(limit - pointer === 4096 ? "ENAMETOOLONG" : "EFAULT");
|
|
419
432
|
// A path is almost always ASCII, read here a code unit at a time; any
|
|
420
433
|
// other goes through one decoder, over a copy, since a browser's
|
|
421
434
|
// TextDecoder rejects views backed by SharedArrayBuffer and the copy is a
|
|
@@ -836,15 +849,16 @@ export class WaliFileDescriptorTable {
|
|
|
836
849
|
}
|
|
837
850
|
}
|
|
838
851
|
readv(fd, pointer, count) {
|
|
852
|
+
const vector = captureWaliReadVector(this.options.memory(), pointer, count);
|
|
853
|
+
if (typeof vector === "bigint")
|
|
854
|
+
return vector;
|
|
839
855
|
let total = 0n;
|
|
840
|
-
for (
|
|
841
|
-
const
|
|
842
|
-
assertRange(this.options.memory(), offset, 8);
|
|
843
|
-
const result = this.read(fd, this.memoryView().getUint32(offset, true), this.memoryView().getUint32(offset + 4, true));
|
|
856
|
+
for (const target of vector.targets) {
|
|
857
|
+
const result = this.read(fd, target.base, target.length);
|
|
844
858
|
if (result < 0n)
|
|
845
859
|
return total > 0n ? total : result;
|
|
846
860
|
total += result;
|
|
847
|
-
if (result
|
|
861
|
+
if (result < BigInt(target.length))
|
|
848
862
|
break;
|
|
849
863
|
}
|
|
850
864
|
return total;
|
|
@@ -2244,8 +2258,8 @@ function safeOffset(value) {
|
|
|
2244
2258
|
}
|
|
2245
2259
|
function assertRange(memory, pointer, length) {
|
|
2246
2260
|
if (!Number.isSafeInteger(pointer) || !Number.isSafeInteger(length) || pointer < 0 || length < 0
|
|
2247
|
-
|| pointer + length > memory.buffer.byteLength)
|
|
2248
|
-
throw new
|
|
2261
|
+
|| (pointer === 0 && length > 0) || pointer + length > memory.buffer.byteLength)
|
|
2262
|
+
throw new WaliGuestMemoryError();
|
|
2249
2263
|
}
|
|
2250
2264
|
/** The stat of `path`, or undefined when the store says ENOENT; any other failure is thrown. */
|
|
2251
2265
|
function statIfPresent(fs, path, noFollow = false) {
|
|
@@ -2259,8 +2273,8 @@ function statIfPresent(fs, path, noFollow = false) {
|
|
|
2259
2273
|
}
|
|
2260
2274
|
}
|
|
2261
2275
|
function writeStat(view, pointer, stat) {
|
|
2262
|
-
if (pointer
|
|
2263
|
-
throw new
|
|
2276
|
+
if (!Number.isSafeInteger(pointer) || pointer <= 0 || pointer + 144 > view.byteLength)
|
|
2277
|
+
throw new WaliGuestMemoryError();
|
|
2264
2278
|
// Every field written once, and the 64-bit ones as two words: a stat is
|
|
2265
2279
|
// one of a program's commonest calls, and zeroing the struct a word at a
|
|
2266
2280
|
// time and then allocating a BigInt per 64-bit field was a third of it
|
|
@@ -2299,8 +2313,8 @@ function syntheticSymlinkStat(target) {
|
|
|
2299
2313
|
};
|
|
2300
2314
|
}
|
|
2301
2315
|
function writeStatfs(view, pointer) {
|
|
2302
|
-
if (pointer
|
|
2303
|
-
throw new
|
|
2316
|
+
if (!Number.isSafeInteger(pointer) || pointer <= 0 || pointer + 120 > view.byteLength)
|
|
2317
|
+
throw new WaliGuestMemoryError();
|
|
2304
2318
|
for (let offset = 0; offset < 120; offset += 4)
|
|
2305
2319
|
view.setUint32(pointer + offset, 0, true);
|
|
2306
2320
|
view.setBigInt64(pointer, 0x01021994n, true); // TMPFS_MAGIC
|