[LTP] [PATCH v5] fanotify22.c: handle multiple asynchronous error events

Andrea Cervesato andrea.cervesato@suse.com
Thu Mar 26 10:40:48 CET 2026


Hi Wei,

The overall approach with poll/read loop and consolidate_events() looks
good. A few issues below.

> +		char *current_pos = event_buf + read_len;
> +		int ret = read(fd_notify, current_pos, BUF_SIZE - read_len);

read() returns ssize_t, not int. Should be:

		ssize_t ret = read(fd_notify, current_pos, BUF_SIZE - read_len);

Also, both read_len and BUF_SIZE are effectively unsigned here. If
read_len ever reaches or exceeds BUF_SIZE, the subtraction wraps to a
huge value and read() will write past event_buf. A defensive check
before the read would be safer:

		if (read_len >= BUF_SIZE)
			tst_brk(TBROK, "Event buffer full");

> +		if (ret < 0) {
> +			tst_res(TFAIL, "%s: read failed: %s", tcase->name, strerror(errno));
> +			goto out;
> +		}

Two things here:

1) Use TERRNO instead of manual strerror(errno):

		tst_res(... | TERRNO, "%s: read failed", tcase->name);

2) A read() failure after poll() confirmed data availability is a test
   infrastructure problem, not a test logic failure. This should be
   TBROK, not TFAIL:

		tst_brk(TBROK | TERRNO, "%s: read failed", tcase->name);

Regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com


More information about the ltp mailing list