|
|
Message-ID: <50e56e3e-d448-c568-b3d8-fbab98939ff8@gmail.com>
Date: Mon, 15 Mar 2021 17:39:43 -0400
From: Dominic Chen <d.c.ddcc@...il.com>
To: musl@...ts.openwall.com
Subject: Issue with fread() and unaligned readv()
Not sure this counts as a problem in musl or the application, but I've
been debugging a return error of EINVAL from `fread(&buf, 8, 16, f)`,
where `f = fopen("/proc/self/pagemap", "r")`. Internally, musl converts
this into a call to `readv(f->fd, iov, 2)`, where `iov = {{iov_base =
buf, iov_len = 127}, {iov_base = f->buf, iov_len = 1024}}`. However, it
turns out that the kernel VFS read implementation inside `pagemap_read`
checks that both the file position and count are divisible by
PM_ENTRY_BYTES (8 on x86_64), otherwise it rejects the read with EINVAL.
In comparison, glibc's `_IO_file_xsgetn` does appear to try to maintain
read alignment, although I haven't looked at it in detail.
Thanks,
Dominic
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.