]> granicus.if.org Git - procps-ng/commit
procio: fix potential out-of-bounds access when write fails
authorPatrick Steinhardt <ps@pks.im>
Tue, 29 May 2018 11:20:00 +0000 (13:20 +0200)
committerCraig Small <csmall@enc.com.au>
Mon, 4 Mar 2019 10:55:07 +0000 (21:55 +1100)
commit09a3687547c1e1a66a0f1e0e32a03e9c7ab2de11
treefd557e66735aeaa5965f320a50a232cfab98c369
parent70ed1a72adda188de106c76d0604fc332016e9a2
procio: fix potential out-of-bounds access when write fails

When writing to procfs via `proc_write` fails, we try to chunk the
buffer into smaller pieces to work around that issue. When searching for
the next location to split the buffer, though, we can underflow the
buffer in case the current offset is smaller than `LINELEN`. Fix the
issue by passing `cookie->offset` instead of `LINELEN` into `memrchr` in
case `cookie->offset` is smaller than `LINELEN`.

This bug can be triggered on musl-based systems, e.g. by executing

    $ sysctl kernel.printk_ratelimit=1000000000000000

As the value is out-of-range, `write` will return an error and set
`errno` to `EINVAL`. As we're only trying to write a smallish buffer
with a length smaller than `LINELEN` and as the buffer does not contain
any newlines, the call

    token = (char*)memrchr(cookie->buf+offset, '\n', LINELEN);

will underflow the buffer and crash the program.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
lib/procio.c